基于51单片机的24C64驱动程序
- 格式:pdf
- 大小:91.45 KB
- 文档页数:8
XXXXX大学本科毕业设计基于单片机的简易收款机的设计学生姓名所在系专业名称班级学号指导教师基于单片机的简易收款机的设计学生:指导教师:内容摘要:随着全球信息化的发展,人们的生活水平也不断在提高,人们所需要的商品也越来越多,各大规模的超市也随之涌现,超市里的商品品种和数量数不胜数,以致于不可能完全依靠人来管理。
本设计正是基于此,解决超市人工收款任务不方便的问题.本设计是基于Atmel公司AT89C51的简易超市收款机控制的设计。
通过4X4矩阵键盘,液晶显示器(字符型1602),串行铁电存贮器(24C64),串行通讯口和单片机(AT89C51)的配合,以程控的方式完成收款的目的,系统采用Atmel公司1989年生产的AT89C51单片机为核心控制器,完成简易超市收款机的基本功能。
通过矩阵键盘输入商品号,系统经过一系列的分析处理,输出商品号,数量,单价和总价等基本信息.关键词:矩阵键盘字符型液晶显示铁电存贮I2CSimple cash register based on single-design Abstract:With the development of global information, people's living standards have also continued to improve, people need more and more merchandise, the large-scale supermarkets also the emergence of the supermarket variety and quantity of merchandise just to name a few that do not may completely rely on to manage people. The design is based on this, the settlement of receivables design artificial supermarket. through the 4X4 matrix keyboard, liquid crystal display (character 1602), serial ferroelectric memory (24C64), using Atmel Corporation 1989 production AT89C51 single-chip microcomputer as the core controller, complete the summary of the basic functions of supermarket cash registers, through the matrix keyboard input No. merchandise, the system through a series of analytical processing, the output of goods number, quantity, unit price, total price of such basic information. Key words:Matrix keyboard character LCD ferroelectric memory I2C目录一、引言 (1)(一)本设计的背景 (1)(二)本设计的目的和意义 (1)二、总体方案设计 (2)(一)方案设计 (2)(二)方案论证与选择 (2)三、系统硬件电路设计 (4)(一)单片机及其外围电路设计 (4)(二)键盘电路的设计 (5)(三)、显示电路的设计 (6)(四)存储器电路的设计 (10)(五)串行通信接口电路的设计 (12)四、系统软件程序设计 (14)(一)单片机内部数据处理程序 (14)(二)键盘处理程序 (15)(三)LCD液晶显示程序 (16)(四)串口通信程序 (17)(五)存储器程序 (18)五、设计总结 (19)六、致谢 (19)附录 (20)附录一硬件原理图 (20)附录二硬件PCB图 (21)附录三原程序代码 (22)参考文献 (30)一、引言(一)本设计的背景当前,单片机被广泛地应用于人们生活的各个领域。
电子工程设计报告温度控制系统的定时测量、定时控制、数据记录专业:电子信息工程小组:04B 组姓名学号: xxxx指导教师:高新完成日期:2015-4-21本项目是为使闭环温度控制系统更加适应使用环境,提高产品的市场竞争力,在已经完成的闭环温度控制系统的基础上增加新功能。
新增功能主要包括三个方面:时钟系统、定时温度打印、数据记录。
时钟系统为整个新型闭环温控系统提供精准始终,帮助完成设定、显示实时时间和定时功能;定时温度打印实现存储时间点及当时温度数据并定时打印存储的数据的功能;数据记录可以实现实时温度变化曲线打印功能,可自由设定监测数据数量,直观观察环境温度变化。
中文摘要一、项目背景二、需求分析(一)主要功能(二)关键技术难点三、方案设计(一)实时时钟方案(二)非易失存储方案(三)微型打印机方案四、电路设计(一)实时时钟(二)非易失存储(三)微型打印机(四)单片机补充五、软件设计(一)实时时钟模块(二)非易失存储(三)微型打印机模块六、调试和问题(一)实时时钟调试1、调试原理2、调试步骤3、现象和解决(二)非易失存储器调试1、调试原理2、调试步骤3、现象和解决(三)微型打印机调试1、调试原理2、调试步骤3、现象和解决七、致谢八、参考文献九、体会建议附录:照片和程序项目背景小型温度控制系统具有测温和控温功能,对于室内、车间、库房等需要恒温和控温的环境起到了重要作用。
此系统可以通过传感器测量温度,通过单片机对测量温度进行读取和显示,并通过人机交互单元可以实现手动设定和控温等功能。
为了使本系统更加适应实际场地使用要求,提高产品市场竞争力,本项目主要实现设置及显示系统时间、掉电不丢失存储时间和温度并定时打印数据、实时打印温度曲线等功能。
为此,我们设计并实现了实时时钟电路模块,非易始存储电路模块以及微型打印机电路模块并精心编写相应的功能模块程序。
需求分析(一)主要功能本项目需要在已经完成的闭环温度控制系统上增加一些新的功能。
#include <reg52.h>#include"zifuku.h"#define uint unsigned int#define uchar unsigned char#define disp_off 0x3e#define disp_on 0x3f#define disp_x 0xb8#define disp_z 0xc0#define disp_y 0x40#define comm 0#define dat 1#define data_ora P1 //MCU 2<------> LCM#define data P1 /////////////数据传输口////sbit di=P2^0; ///////////////////////////sbit rw=P2^1; ////////////////////读写///sbit e=P2^2; //////使能,高电平有效/////sbit cs1=P2^3; /////////////////////////sbit cs2=P2^4; ///片选端///////////////sbit cs3=P2^5; ///////////////////////sbit rst=P2^6; ////////////复位///////*---------------延时子程序----------------*/void delay (uint us){while(us--);}void delay1 (uint ms){uint i,j;for(i=0;i<ms;i++)for(j=0;j<1000;j++);}/*------------写数据或命令到LCD--------------*/void wr_lcd (uchar dat_comm,uchar content){di=dat_comm;rw=0;data_ora=content;e=1;;e=0;}/*--------------写点阵------------------*/void lat_disp (uchar data1,uchar data2){uchar i,j;cs1=1;cs2=1;cs3=1;wr_lcd (comm,disp_on);for(j=0;j<8;j++){wr_lcd (comm,disp_x+j);wr_lcd (comm,disp_z);wr_lcd (comm,disp_y);for(i=0;i<64;i++){wr_lcd (dat,data1);wr_lcd (dat,data2);}}}void vshowcustomrow(uchar ucpage,uchar ucline,uchar width,uchar *uca) {uchar count;if(ucline<64){cs1=1;cs2=0;cs3=0;wr_lcd(comm,0xb8+ucpage);wr_lcd(comm,0x40+ucline);for(count=0;count<width;count++) wr_lcd(dat,*(uca+count));}else{cs1=0;cs2=1;cs3=0;wr_lcd(comm,0xb8+ucpage);wr_lcd(comm,0x40+ucline-64);for(count=0;count<width;count++) wr_lcd(dat,*(uca+count)); }if(ucline>127){cs1=0;cs2=0;cs3=1;wr_lcd(comm,0xb8+ucpage);wr_lcd(comm,0x40+ucline-128);for(count=0;count<width;count++) wr_lcd(dat,*(uca+count)); }}void vshowonechin(uchar ucpage,uchar ucline,uchar *uca){vshowcustomrow(ucpage,ucline ,16,uca);vshowcustomrow(ucpage+1,ucline,16,uca+16);}void vshowonechar(uchar ucpage,uchar ucline,uchar *uca){vshowcustomrow(ucpage,ucline,8,uca);vshowcustomrow(ucpage+1,ucline,8,uca+8);}/*------------------初始化-----------------*/void init_lcd (void){rst=0;delay(50);rst=1;cs1=1;cs2=1;cs3=1;wr_lcd (comm,disp_off);wr_lcd (comm,disp_on);}/*---------------显示1-----------------*/void disp1 (void){lat_disp(0x00,0x00);vshowonechin(0,0,uca_fan);vshowonechin(0,16,uca_bei);vshowonechin(0,32,uca_ke);vshowonechin(0,48,uca_ji);vshowonechin(0,64,uca_you); vshowonechin(0,80,uca_xian); vshowonechin(0,96,uca_gong); vshowonechin(0,112,uca_si); vshowonechin(0,128,uca_chen); vshowonechin(0,144,uca_li); vshowonechin(0,160,uca_li); vshowonechin(0,176,uca_zuo);vshowonechin(2,0,uca_da); vshowonechin(2,16,uca_bei); vshowonechin(2,32,uca_pai); vshowonechin(2,48,uca_ye); vshowonechin(2,64,uca_jing); vshowonechin(2,80,uca_xian1); vshowonechin(2,96,uca_shi); vshowonechin(2,112,uca_ping);vshowonechin(4,16,uca_huan); vshowonechin(4,32,uca_ying); vshowonechin(4,48,uca_ni); vshowonechin(4,64,uca_de); vshowonechin(4,80,uca_jia); vshowonechin(4,96,uca_meng);vshowonechar(6,0,uca_T); vshowonechar(6,8,uca_E); vshowonechar(6,16,uca_L); vshowonechar(6,24,uca_maohao);vshowonechar(6,32,uca_yi); vshowonechar(6,40,uca_san); vshowonechar(6,48,uca_ba); vshowonechar(6,56,uca_er); vshowonechar(6,64,uca_zero); vshowonechar(6,72,uca_er); vshowonechar(6,80,uca_ba); vshowonechar(6,88,uca_s); vshowonechar(6,96,uca_qi); vshowonechar(6,104,uca_san); vshowonechar(6,112,uca_liu);}/*------------------主程序--------------------*/void main (){init_lcd ();while (1){disp1();delay1(4000);}}#include<reg52.h>unsigned char code uca_fan[]={/*-- 文字: 樊--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x48,0x28,0xFF,0x28,0x02,0xAC,0x44,0xAA,0x00,0x48,0x28,0xFF,0x28,0x48,0x00, 0x02,0x42,0x42,0x23,0x22,0x12,0x0A,0x07,0x0A,0x12,0x22,0x62,0xC3,0x42,0x02,0x00, };unsigned char code uca_bei[]={/*-- 文字: 贝--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0xF2,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00, 0x00,0x40,0x40,0x27,0x20,0x10,0x08,0x07,0x08,0x10,0x10,0x27,0x60,0x00,0x00,0x00, };unsigned char code uca_ke[]={/*-- 文字: 科--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x12,0x92,0x72,0xFE,0x51,0x91,0x00,0x22,0xCC,0x00,0x00,0xFF,0x00,0x00,0x00, 0x04,0x02,0x01,0x00,0xFF,0x00,0x04,0x04,0x04,0x02,0x02,0x02,0xFF,0x01,0x01,0x00, };unsigned char code uca_ji[]={/*-- 文字: 技--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x08,0x88,0xFF,0x48,0x28,0x00,0xC8,0x48,0x48,0x7F,0x48,0xC8,0x48,0x08,0x00,0x01,0x41,0x80,0x7F,0x00,0x40,0x40,0x20,0x13,0x0C,0x0C,0x12,0x21,0x60,0x20,0x00, };unsigned char code uca_you[]={/*-- 文字: 有--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00, };unsigned char code uca_xian[]={/*-- 文字: 限--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0xFE,0x02,0x32,0x4E,0x82,0x00,0xFE,0x4A,0xCA,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00, 0xFF,0x00,0x02,0x04,0x03,0x00,0xFF,0x40,0x20,0x03,0x0C,0x12,0x21,0x60,0x20,0x00, };unsigned char code uca_gong[]={/*-- 文字: 公--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x80,0x40,0x30,0x0E,0x84,0x00,0x00,0x0E,0x10,0x60,0xC0,0x80,0x80,0x00,0x00,0x01,0x20,0x70,0x28,0x24,0x23,0x31,0x10,0x10,0x14,0x78,0x30,0x01,0x00,0x00, };unsigned char code uca_si[]={/*-- 文字: 司--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x10,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x12,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x1F,0x04,0x04,0x04,0x04,0x04,0x04,0x0F,0x00,0x20,0x40,0x3F,0x00,0x00, };unsigned char code uca_da[]={/*-- 文字: 大--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00, };unsigned char code uca_pai[]={/*-- 文字: 牌--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x90,0x90,0x9F,0x10,0x00,0xFE,0x92,0xD3,0xBE,0x92,0x92,0xFE,0x00,0x00, 0x40,0x3F,0x00,0x00,0x7F,0x04,0x04,0x06,0x05,0x04,0xFF,0x04,0x04,0x05,0x04,0x00, };unsigned char code uca_ye[]={/*-- 文字: 液--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x61,0x06,0xE0,0x18,0x84,0xE4,0x1C,0x84,0x65,0xBE,0x24,0xA4,0x64,0x04,0x00, 0x04,0x04,0xFF,0x00,0x01,0x00,0xFF,0x41,0x21,0x12,0x0C,0x1B,0x61,0xC0,0x40,0x00, };unsigned char code uca_jing[]={/*-- 文字: 晶--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x00,0x7E,0x2A,0x2A,0x2A,0x2A,0x2A,0x2A,0x7E,0x00,0x00,0x00,0x00, 0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x7F,0x00, };unsigned char code uca_xian1[]={/*-- 文字: 显--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x3E,0x2A,0xEA,0x2A,0x2A,0x2A,0xEA,0x2A,0x3E,0x00,0x00,0x00,0x00, 0x20,0x21,0x22,0x2C,0x20,0x3F,0x20,0x20,0x20,0x3F,0x28,0x24,0x23,0x20,0x20,0x00, };unsigned char code uca_shi[]={/*-- 文字: 示--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x20,0x20,0x22,0x22,0x22,0x22,0xE2,0x22,0x22,0x22,0x22,0x22,0x20,0x20,0x00,0x10,0x08,0x04,0x03,0x00,0x40,0x80,0x7F,0x00,0x00,0x01,0x02,0x0C,0x18,0x00,0x00, };unsigned char code uca_ping[]={/*-- 文字: 屏--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0xFF,0x09,0x49,0x59,0xE9,0x49,0x49,0x49,0xE9,0x59,0x49,0x4F,0x00,0x00, 0x40,0x30,0x0F,0x82,0x42,0x32,0x0F,0x02,0x02,0x02,0xFF,0x02,0x02,0x02,0x02,0x00, };unsigned char code uca_huan[]={/*-- 文字: 欢--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00, 0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00, };unsigned char code uca_ying[]={/*-- 文字: 迎--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00, 0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00, };unsigned char code uca_ni[]={/*-- 文字: 你--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x80,0x40,0xF0,0x2C,0x43,0x20,0x98,0x0F,0x0A,0xE8,0x08,0x88,0x28,0x1C,0x08,0x00, 0x00,0x00,0x7F,0x00,0x10,0x0C,0x03,0x21,0x40,0x3F,0x00,0x00,0x03,0x1C,0x08,0x00, };unsigned char code uca_de[]={/*-- 文字: 的--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00, 0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00, };unsigned char code uca_jia[]={/*-- 文字: 加--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0xF8,0x08,0x08,0x08,0xF8,0x00,0x00, 0x40,0x20,0x18,0x07,0x00,0x20,0x40,0x3F,0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00, };unsigned char code uca_meng[]={/*-- 文字: 盟--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x92,0x92,0x92,0xFE,0x00,0x80,0x7E,0x2A,0x2A,0x2A,0x2A,0xFE,0x00,0x00, 0x40,0x40,0x7C,0x44,0x44,0x7C,0x46,0x45,0x44,0x7C,0x44,0x45,0x7E,0x41,0x40,0x00, };unsigned char code uca_chen[]={/*-- 文字: 陈--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0xFE,0x22,0x52,0x8E,0x00,0xC4,0xB4,0x8C,0xE7,0x84,0x84,0x84,0x84,0x04,0x00, 0x00,0xFF,0x02,0x04,0x23,0x10,0x0C,0x40,0x80,0x7F,0x00,0x02,0x04,0x18,0x30,0x00, };unsigned char code uca_li[]={/*-- 文字: 莉--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x82,0x92,0x92,0x92,0xFF,0x92,0x92,0x82,0x02,0xEF,0x02,0x02,0xFA,0x02,0x00,0x20,0x10,0x08,0x04,0x03,0xFF,0x02,0x1C,0x08,0x00,0x1F,0x40,0x80,0x7F,0x00,0x00, };unsigned char code uca_zuo[]={/*-- 文字: 做--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x20,0xF8,0x07,0x8A,0x88,0xFF,0x88,0xC8,0x30,0xFF,0x12,0xF0,0x10,0x10,0x00, 0x00,0x00,0x7F,0x00,0x3F,0x08,0x08,0x48,0x5F,0x20,0x13,0x0C,0x13,0x70,0x20,0x00, };unsigned char code uca_T[]={/*-- 文字: T --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00, };unsigned char code uca_E[]={/*-- 文字: E --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00, };unsigned char code uca_L[]={/*-- 文字: L --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00, };unsigned char code uca_maohao[]={/*-- 文字: : --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, };unsigned char code uca_zero[]={/*-- 文字: 0 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, };unsigned char code uca_yi[]={/*-- 文字: 1 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, };unsigned char code uca_er[]={/*-- 文字: 2 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, };unsigned char code uca_san[]={/*-- 文字: 3 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, };unsigned char code uca_s[]={/*-- 文字: 4 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, };unsigned char code uca_wu[]={/*-- 文字: 5 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, };unsigned char code uca_liu[]={/*-- 文字: 6 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, };unsigned char code uca_qi[]={/*-- 文字: 7 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, };unsigned char code uca_ba[]={/*-- 文字: 8 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, };unsigned char code uca_qiu[]={/*-- 文字: 9 --*//*-- 宋体12; 此字体下对应的点阵为:宽x高=8x16 --*/0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00, };。
芯片24C64中文资料I2C总线I2C总线(Inter Integrated Circuit内部集成电路总线)是两线式串行总线,仅需要时钟和数据两根线就能够进行数据传输,仅需要占用微处理器的2个IO引脚,使用时十分方便。
I2C总线还能够在同一总线上挂多个器件,每个器件能够有自己的器件地址,读写操作时需要先发送器件地址,该地址的器件得到确认后便执行相应的操作,而在同一总线上的其它器件不做响应,称之为器件寻址,那个原理就像我们打的原理相当。
I2C总线产生80年代,由PHLIPS公司开发,早期多用于音频和视频设备,现在I2C总线的器件和设备已多不胜数。
最常见的采纳I2C总线的EEPROM也已被广泛使用于各种家电、工业及通信设备中,要紧用于储存设备所需要的配置数据、采集数据及程序等。
生产I2C总线EEPROM的厂商专门多,如ATMEL、Microchip公司,它们差不多上以24来开头命名芯片型号,最常用确实是24C系列。
24C系列从24C01到24C512,C后面的数字代表该型号的芯片有多少K 的储备位。
如ATMEL的24C64,储备位是64K位,也确实是说能够储备8K(8192)字节,它支持1.8V到5V电源,能够擦写1百万次,数据能够保持100年,使用5V电源时时钟能够达到400KHz,同时有多种封装可供选择。
我们能够专门容易的在周围的电器设备中发觉它们的身影,如电视中用于储存频道信息,电脑内存条中储存内存大小等相关信息,汽车里用于储存里程信息等等。
图一确实是ATMEL24C64芯片的PID封装和用于内存条SPD(Serial Presence Detect)上的24芯片。
图1图2图二是ATMEL公司24C64的引脚定义图。
A0-A2用于设置芯片的器件地址,在同一总线上有多个器件时,能够通过设置A0-A2引脚来确定器件地址。
SDA是串行数据引脚,用于在芯片读写时输入或输出数据、地址等,那个引脚是双向引脚,它是漏极开路的,使用时需要加上一个上拉电阻。
AT24C512驱动程序2008-06-27 09:09 AT24C512驱动#include#include#include#include#define BAUDRATE 9600#define SYSCLK 11059200#define uchar unsigned char#define uint unsigned int#define _Nop() _nop_(),_nop_(),_nop_(),_nop_() /*定义空指令*/uchar save_buf[7];sbit WP =P1^0;sbit SCL =P1^1;sbit SDA =P1^2;sbit led =P3^5;void IICpwrite(unsigned char highaddress,unsigned char lowaddress,unsigned char *psr);void IICpread(unsigned char highaddress,unsigned char lowaddress,unsigned char *dst);void ByteWrite(unsigned char bytedata,unsigned char highaddress,unsigned char lowaddress);uchar ByteRead(unsigned char highaddress,unsigned char lowaddress);void IICWriteByte(unsigned char sendbyte);void IICWriteByte(unsigned char sendbyte);uchar IICReadByte(void);void IICStart(void);void IICStop(void);void IICAck(void);void Noack(void);void main(){WP=0;_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_Nop();_N op();led=0;save_buf[0]=1;save_buf[1]=2;save_buf[3]=3;IICpread(0x00,0x00,save_buf);// IICpwrite(0x00,0x00,save_buf);// save_buf[0]=ByteRead(0x00,0x00);// ByteWrite(save_buf[0],0x00,0x02);while(1);} /*******************页面写数据*********************/ void IICpwrite(unsigned char highaddress,unsigned char lowaddress,unsigned char *psr){int i;// WP=0;_nop_();_nop_();_nop_();_nop_();IICStart();IICWriteByte(0xa0);IICWriteByte(highaddress);IICWriteByte(lowaddress);for(i=0;i<5;i++){ IICWriteByte(*psr++); }IICStop();// WP=1;}/*******************页面读数据********************/void IICpread(unsigned char highaddress,unsigned char lowaddress,unsigned char *dst){int i;//WP=0;IICStart();IICWriteByte(0xa0);IICWriteByte(highaddress);IICWriteByte(lowaddress);IICStart();IICWriteByte(0xa1);for(i=0;i<5;i++){*dst++=IICReadByte();if(i<4) IICAck();else Noack();}IICStop();// WP=1;}/*******************随机写数据*********************/void ByteWrite(unsigned char bytedata,unsigned char highaddress,unsigned char lowaddress){IICStart();IICWriteByte(0xa0);IICWriteByte(highaddress);IICWriteByte(lowaddress);IICWriteByte(bytedata);IICStop();// Delay2(10000);}/**********************随机读数据**********/uchar ByteRead(unsigned char highaddress,unsigned char lowaddress)unsigned char ReadByte;IICStart();IICWriteByte(0xa0);IICWriteByte(highaddress);IICWriteByte(lowaddress);IICStart();IICWriteByte(0xa1);ReadByte=IICReadByte();IICStop();return(ReadByte);}/*******************向IIC总线写数据*********************/void IICWriteByte(unsigned char sendbyte){unsigned char j;// SCL=0;for(j=8;j>0;j--){sendbyte<<=1; //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;SDA=CY;SCL=1;SCL=0; }SDA=1;SCL=1;while(SDA);SCL=0;}/**********************从IIC总线上读数据子程序**********/uchar IICReadByte(void){uchar receivebyte=0,i=8;// SCL=0;SDA=1;for(i=0;i<8;i++){receivebyte=(receivebyte<<1)|SDA;SCL=1;SCL=0;}SDA=1;SCL=0;return(receivebyte);}/*****************启动总线**********************/ void IICStart(void){SDA=1; /*发送起始条件的数据信号*/_Nop();SCL=1;_Nop(); /*起始条件建立时间大于4.7us,延时*/_Nop();_Nop();_Nop();_Nop();SDA=0; /*发送起始信号*/_Nop(); /* 起始条件锁定时间大于4μs*/_Nop();_Nop();_Nop();_Nop();SCL=0; /*钳住I2C总线,准备发送或接收数据 */ _Nop();_Nop();_Nop();_Nop();}/*****************停止IIC总线****************/ void IICStop(void){SDA=0; /*发送结束条件的数据信号*/_Nop(); /*发送结束条件的时钟信号*/SCL=1; /*结束条件建立时间大于4μs*/_Nop();_Nop();_Nop();_Nop();_Nop();SDA=1; /*发送I2C总线结束信号*/_Nop();_Nop();_Nop();_Nop();}void IICAck(void){SDA=0;_Nop();_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop(); SCL=0;_Nop();_Nop();// SDA=1;_nop_();}void Noack(void){SDA=1;_Nop();_Nop();_Nop();_Nop();SCL=1;_Nop();_Nop();_Nop();_Nop();_Nop(); SCL=0;_Nop();_Nop();}。
L90多功能编程器使用说明L90多功能编程器,功能强大,支持最新的主板BIOS spi 25Xxxx 在线编程和高速烧写EPROM、EEPROM、FLASH和串行EEPROM 系列芯片,并且还直接支持PIC、MCS51、AVR单片机芯片;价格低,性价比高;既适合于电子和电脑爱好者使用,也适合于电子电脑维修人员和单片机开发人员使用。
一、特点:1、使用优质3M 32脚镀银锁紧座,夹具专用孔型18脚、8脚DIP插座,优质进口PLCC32座性能稳定可靠。
2、全新设计,使用USB和外接电源双接口供电,并使用25针PC并行打印口通讯,具有较高的写片速度。
3、采用WINDOWS下的图形界面,使用鼠标进行操作,支持Windows 95/98/ME/2000/XP系统。
4、支持最新810、815、845、848、865、875、915等等主板上使用的大容量FWH/LPC BIOS芯片,性能价格比高。
对于电脑爱好者维修者,可用来对电脑的各种板卡的BIOS芯片进行编程,修复被病毒破坏的主板BIOS芯片,对主板、显卡等的BIOS芯片进行升级以提升计算机性能等等。
5、主板上集成了93CXX、24CXX、25CXX PIC 16FXX、DIP32Z转PLCC32、FWH/LPC PLCC32适配器,支持51系列单片机的全系列型号,可用来进行单片机开发;支持最新的大容量程序芯片;支持12.5V、15V、21V、25V多种编程电压,直接支持3.3V及2.9V电压的芯片(即显卡的BIOS芯片如SST39VF512等)。
6、全新设计的硬件,让使用者更容易使用,控制程序工作界面友好,具有编程指示!对芯片的各种操作变得十分简单,无论是电子专业人员还是电脑爱好者、维修者都可轻松掌握。
7、软件随时更新,最新软件可免费获取。
注意:1、计算机的并口要在BIOS中设置为ECP或者ECP+EPP;2、多功能编程器使用的联机电缆是25针对25孔标准。
/*the header files name is AT24C01-512.hinclude AT24C01/01A/02/04/08/16/32/64/128/256/512*the header files program's function is link exterior extend E2PROM*the link chip's name is AT24C01A-512* Debug frequency:22.1184MHz*the program's synopsis as follows* Author by:weiyi* Establish on Date:27-12-2002* Modified on Date:31-10-2002* Edition NO.:V1.0#define Wait_1us {_nop_();_nop_();}#define Wait_2us {Wait_1us;Wait_1us;}#define Sla_Wr 0xa0 /*0000 0 0 0 0*/#define Sla_Rd 0xa1 /*0000 0 0 0 1*/#define AT24C01 0x01#define AT24C01A 0x02#define AT24C02 0x03#define AT24C04 0x04#define AT24C08 0x05#define AT24C16 0x06#define AT24C32 0x07#define AT24C64 0x08#define AT24C128 0x09#define AT24C256 0x0a#define AT24C512 0x0b#define Mem_Size AT24C256 //01/01A/02/04/08/16/32/64/128/256/512#define Chip_1 0x00 //本器件的器件地址,可以第一8个不同地址的芯片使之能用同一段程序进行读写sbit bSda =P3^3;sbit bScl =P3^4;bit bScan_Err;unsigned char idata cShare_Buf[2]; //I2c read and write buffervoid Start_I2c(void);void End_I2c(void);unsigned char Scan_I2c();void Send_I2c(unsigned char cData);void Send_Ack(void);void Send_Not_Ack(void);void Write_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int cStart_Address);void Read_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int cStart_Address);/************Name:ScanI2c***********Function:read 1byte from 24C01/512NO.:1Run time:79us 1=4+2us 0=5+1us f=111kbps/83.3Kbps**********Function Start************/void Start_I2c(void){unsigned char /*idata*/ i;bSda=bScl=1;for(i=0;i<2;i++); //wait 7usbSda=0;for(i=0;i<2;i++); //wait 7usbScl=0;}/**********Function End*************//************Name:ScanI2c***********Function:read 1byte from 24C01/512NO.:1Run time:79us 1=4+2us 0=5+1us f=111kbps/83.3Kbps**********Function Start************/void End_I2c(void){unsigned char /*idata*/ i;bSda=0;bScl=1;for(i=0;i<2;i++); //wait 7usbSda=1;}/**********Function End*************//************Name:ScanI2c***********Function:read 1byte from 24C01/512NO.:1Run time:79us 1=3/5us 0=1/5us f=250/100kbps**********Function Start************/unsigned char Scan_I2c(){unsigned char /*idata*/ i,j;//IIC dataStop_Dog; //喂狗bSda=1;j=0;for(i=0;i<8;i++){bScl=1;j<<=1;Wait_2us;j|=bSda;//Scan 0 Scan 1bScl=0;Wait_2us;Wait_2us;}return j;}/**********Function End*************//************Name:SendI2c***********Function:Send 1byte to 24C01/512NO.:2Run time:82us 1=1/3us 0=3us f=250/100kbps **********Function Start************/void Send_I2c(unsigned char cData){unsigned char /*idata*/ i;Stop_Dog; //喂狗for(i=0;i<8;i++){bSda=(bit)(cData&0x80);bScl=1;cData<<=1;Wait_2us;Wait_2us;bScl=0;Wait_2us;}bSda=bScl=1; //检测ACKfor(i=0;(bSda==1)&&(bScan_Err==0);i++){if(i==30)bScan_Err=1; //如果101us没有响应就错误Stop_Dog; //喂狗}bScl=0;}/**********Function End************//************Name:SendAck***********Function:Send ackNO.:3Run time:10us+4us**********Function Start************/void Send_Ack(void){unsigned char /*idata*/ i;bSda=0;bScl=1;for(i=0;i<2;i++); //wait 8usbScl=0;bSda=1;}/**********Function End*************//************Name:SendNotAck***********Function:send not ackNO.:4Run time:10us+4us**********Function Start************/void Send_Not_Ack(void){unsigned char /*idata*/ i;bScl=bSda=1;for(i=0;i<2;i++); //wait 8usbScl=0;}/**********Function End*************//************Name:WriteMem***********Function:write data to 24C01/512NO.:5Run time:80us(1byte)*cData_Size+**********Function Start************/void Write_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned intcStart_Address){unsigned char /*idata*/ i,cAddress[2]; //0-L;1-HStop_Dog; //喂狗bScan_Err=0;cAddress[0]=cStart_Address;cStart_Address>>=8;cAddress[1]=cStart_Address;i=Sla_Wr;i|=cChips_Address;if(cMem_Size==A T24C256)i&=0xf7;Start_I2c();Send_I2c(i); //SLA:1010 xxx0if(cMem_Size==A T24C256) //1-16用1个字节地址,32-512用2个字节地址,匹配地址A T24C32、64Send_I2c(cAddress[1]); //先发送高字节地址Send_I2c(cAddress[0]); //如果是双字节地址则为低地址否则为高地址for(i=0;(bScan_Err==0)&&(i!=cData_Size);i++)Send_I2c(cShare_Buf[i]); //写一个字节数据End_I2c();Stop_Dog; //喂狗}/**********Function End*************//************Name:ReadMem***********Function:Read data from 24C01/512NO.:6Run time:80us(1byte)*cData_Size+**********Function Start************/void Read_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int cStart_Address){unsigned char /*idata*/ i,cAddress[2];Stop_Dog; //喂狗bScan_Err=0;cAddress[0]=cStart_Address; //将16位地址分解为高低字节cStart_Address>>=8;cAddress[1]=cStart_Address;i=Sla_Wr;i|=cChips_Address;if(cMem_Size==A T24C256)i&=0xf7;Start_I2c();Send_I2c(i);//SLA:1010 xxx0if(cMem_Size==A T24C256) //1-16用1个字节地址,32-512用2个字节地址,匹配地址A T24C32、64Send_I2c(cAddress[1]); //先发送高字节地址Send_I2c(cAddress[0]); //address and writei|=0x01; //ReadStart_I2c();Send_I2c(i); //address andreadfor(i=0;(bScan_Err==0)&&(i!=cData_Size);i++){cShare_Buf[i]=Scan_I2c(); //读入第一个字节if(i==(cData_Size-1))Send_Not_Ack();elseSend_Ack();}End_I2c();Stop_Dog; //喂狗}/**********Function End*************/。