基于51单片机的24C64驱动程序

合集下载

基于51单片机的公交,智能收费系统

基于51单片机的公交,智能收费系统
2 设计方案
设计的基本思想:一有Mifare1射频卡距离射频天线100mm内时,读写器就能够获取到卡中的数据信息。然后单片机把读取得数据进行处理,条件符合,蜂呜器就响一声。然后把数据跟当时的时间同时储存在单片机EEPROM内.接着在LED上显示所读数据。然而当无卡在其工作范围时,就会在LED上显示此刻的时间。如果读卡出错,则显示出错的标志。在和上位机通讯时,把单片机里EEPROM存入的信息发向上位机。
然而TYPE A标准。则是目前运用较多的一种标准MIFARE标准。TYPE B与A的主要不同是卡跟读写器的调制方式的差异。而TYPE A采用的则是间断的调制原理,信息“1”为时,即有信号传到卡,信息显示是“0”时,则就无信号传到卡,并且时间的间隔非常短暂,基本不会影响到卡的正常工作。用这种方式信息区量到非接触卡的时候,能量会有几率发生波动。
Technology and methods of the research of this design not only for bus intelligent charging system plays an important role, but also in other fields such as campus card, attendance card also has extensive application value。
1.2 本文的内容
此设计研究的是公交智能收费系统(B)标准,其重点进行卡的读写程序设计,它是以非接触式通信为技术基础。
本课题设计是以射频技术为基础,铺以单片机编程来控制MF RC500的读写卡操作,然后卡里的内容跟时钟信息一起存放在存储器里,然后显示模块显示卡的扣除费用金额等,同时蜂鸣器在操作无误时就响一声。而DS1232为控制芯片,能解决程序跑飞的问题。然而在存储器存储的信息到顶时,就会通过TC232和上位机相接,然后把信息发给PC机。

基于单片机的简易收款机的设计 (3)

基于单片机的简易收款机的设计 (3)

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)一、引言(一)本设计的背景当前,单片机被广泛地应用于人们生活的各个领域。

24c02读写程序大全

24c02读写程序大全
SETB SDA24
CLR SCLK24
CALL START24;启动
MOV A,#0A0H
CALL SHIFT8;移位
CALL ACK;响应
POP ACC
>SETB;应答毕,SDA置1
>RET
>程序中多处调用了DELAY子程序(仅两条NOP指令),这是为了满足I2C总线上数据传
送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正
脉冲)。另外,在读最后一数据字节时,置应答信号为“1”,表示读操作即将完成。
>
>下面是本人编写的源程序,已经调试成功,下载就可以使用,程序编写的不是很规范
>ACALL SUBS
>MORE: ACALL SUBR
>MOV@R1,A
>INCR1
>DJNZ R7,MORE
>CLR
>ACALL DELAY
>SETB
>ACALL DELAY
>SETB;送停止信号
>RET
>SUBR: MOVR0,#08H ;接受单字节子程序
>LOOP2: SETB
>ACALL DELAY
TT2:MOV30H,A
MOVCA,@A+DPTR
CLR;开数码管
MOVP0,A;送显示
MOVA,30H
INCA
MOVB,A
MOVA,#00H
LCALLWT24
AJMP$
TAB:DB28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H
RD24: PUSH ACC;读24C02子程序。

北工大电子工程设计基于温控系统的打印机应用(电信实验班版)

北工大电子工程设计基于温控系统的打印机应用(电信实验班版)

电子工程设计报告温度控制系统的定时测量、定时控制、数据记录专业:电子信息工程小组:04B 组姓名学号: xxxx指导教师:高新完成日期:2015-4-21本项目是为使闭环温度控制系统更加适应使用环境,提高产品的市场竞争力,在已经完成的闭环温度控制系统的基础上增加新功能。

新增功能主要包括三个方面:时钟系统、定时温度打印、数据记录。

时钟系统为整个新型闭环温控系统提供精准始终,帮助完成设定、显示实时时间和定时功能;定时温度打印实现存储时间点及当时温度数据并定时打印存储的数据的功能;数据记录可以实现实时温度变化曲线打印功能,可自由设定监测数据数量,直观观察环境温度变化。

中文摘要一、项目背景二、需求分析(一)主要功能(二)关键技术难点三、方案设计(一)实时时钟方案(二)非易失存储方案(三)微型打印机方案四、电路设计(一)实时时钟(二)非易失存储(三)微型打印机(四)单片机补充五、软件设计(一)实时时钟模块(二)非易失存储(三)微型打印机模块六、调试和问题(一)实时时钟调试1、调试原理2、调试步骤3、现象和解决(二)非易失存储器调试1、调试原理2、调试步骤3、现象和解决(三)微型打印机调试1、调试原理2、调试步骤3、现象和解决七、致谢八、参考文献九、体会建议附录:照片和程序项目背景小型温度控制系统具有测温和控温功能,对于室内、车间、库房等需要恒温和控温的环境起到了重要作用。

此系统可以通过传感器测量温度,通过单片机对测量温度进行读取和显示,并通过人机交互单元可以实现手动设定和控温等功能。

为了使本系统更加适应实际场地使用要求,提高产品市场竞争力,本项目主要实现设置及显示系统时间、掉电不丢失存储时间和温度并定时打印数据、实时打印温度曲线等功能。

为此,我们设计并实现了实时时钟电路模块,非易始存储电路模块以及微型打印机电路模块并精心编写相应的功能模块程序。

需求分析(一)主要功能本项目需要在已经完成的闭环温度控制系统上增加一些新的功能。

51单片机+19264程序

51单片机+19264程序

#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中文资料

芯片24C64中文资料

芯片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驱动程序

AT24C512驱动程序

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();}。

8051模拟i2C总线24c02读写源代码C语言

8051模拟i2C总线24c02读写源代码C语言
I2C_Start();
WriteI2CByte(0xa0);
acktemp=Check_Acknowledge();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
I2C_Start();
WriteI2CByte(addr);/*address*/
acktemp=Check_Acknowledge();
WriteI2CByte(thedata);/*thedata*/
acktemp=Check_Acknowledge();
I2C_Stop();
实例1
/* 51系列单片机在使用时,有时需要模拟I2C总线_nbsp; */
/* 这里举出一个实例(读写串行EEPROM芯片at24C02_nbsp; */
/************************************************************************/
Write_A_Page(myarray2,0x18);
mybyte=Read_One_Byte(0x20);
Read_N_Bytes(rdarray,16,0x10);
}
实例2
/********************************** I2C总线驱动 *************************************
}
void SEND_1(void)
{
/*发逿,在SCL为高电平时使SDA信号为高*/
SDA=1;
SCL=1;
DELAY(DELAY_TIME);

L90多功能编程器使用说明书

L90多功能编程器使用说明书

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孔标准。

使用51读写24c256的程序

使用51读写24c256的程序

/*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*************/。

_整套24c16单片机读写驱动程序

_整套24c16单片机读写驱动程序

附录_整套24c16单片机读写驱动程序(总9页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March用单片机实现通用存贮器IC卡的读写自动化仪表2002本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C2051为例详细描述了通用存贮器IC卡的工作原理及用单片机对其进行读写操作的基本电路连接和软件编程方法。

用存贮器IC卡是由通用存贮器芯片封装而成的,由于它的结构和功能简单,生产成本低,使用方便,因此在各领域都得到了广泛的应用。

目前用于IC卡的通用存贮器芯片多为E2PROM,其常用的协议主要有两线串行连接协议(I2C)和三线串行链接协议,其中比较常用的是ATMEL公司生产的AT24系列芯片。

以该系列中的AT24C01为例,它具有1k的存贮容量,适用于2V~5V的低电压/标准电压的操作,具有低功耗和高可靠性等优点。

而AT89C2051虽是ATMEL公司89系列单片机的低档型,但它具有2k的FLASH ROM(可重编闪速存贮器)、128×8位内部RAM及全静态操作方式,同样也具有低功耗和较强的功能。

下面以AT24C2051为例,对通用存贮器IC卡的工作原理及基本电路连线作一介绍,该线路简单,使用灵活,能可靠地对通用存贮器IC卡进行读写。

2 硬件特性AT24系列存贮器的特性AT24系列存贮器芯片采用CMOS工艺制造,内置有高压泵,可在单电压供电条件下工作。

其标准封装为8脚DIP封装形式,各引脚的功能说明如下:SCL:串行时钟。

在该脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。

SDA:串行数据。

该引脚为开漏极驱动,可双向传送数据。

A0、A1、A2:器件/页面寻址。

为器件地址输入端。

在AT24C01/02中,该引脚被硬连接。

Vcc:一般输入+5V的工作电压。

2024版51单片机ppt课件

2024版51单片机ppt课件

THANKS
感谢观看
51单片机ppt课件
目录
• 51单片机概述 • 51单片机结构与原理 • 指令系统与汇编语言程序设计 • 中断系统与定时/计数器应用 • 串行通信接口原理及应用实例分析 • 并行扩展技术及其在外围设备中的应用 • 总结回顾与展望未来发展趋势
01
51单片机概述
定义与发展历程
定义
51单片机是指基于Intel 8051内核 的单片机,是一种集成度高、功能 强大的微控制器。
定时/计数器工作原理及设置方法
工作原理
定时/计数器是对机器周期进行计数, 实现定时或计数功能。
设置方法
工作模式
包括模式0(13位定时/计数器)、模 式1(16位定时/计数器)、模式2(8 位自动重装载定时/计数器)和模式3 (特殊功能寄存器)。
通过编程设置定时/计数器的工作模式、 计数初值、启中所取得的成果,如完成的实验、 项目、作业等,并分享自己的学习经验和心得。
不足之处分析 学生分析自己在课程学习中存在的不足之处,如对某些知 识点的理解不够深入、实验技能有待提高等,并提出改进 措施。
未来学习计划与目标 学生根据自己的实际情况和需求,制定未来的学习计划和 目标,如深入学习某一领域的知识、参加相关竞赛或项目 等。
分时操作、实时处理、故障处 理。
外部中断0、定时器0中断、外 部中断1、定时器1中断、串行 口中断。
高优先级中断可以打断低优先 级中断。
外部中断触发方式选择
1 2
电平触发方式 外部中断请求信号为低电平时有效。
边沿触发方式 外部中断请求信号由高电平跳变为低电平时有效。
3
定时器/计数器溢出触发方式 定时器/计数器溢出时产生中断请求。

_整套24c16单片机读写驱动程序

_整套24c16单片机读写驱动程序

用单片机实现通用存贮器IC卡的读写自动化仪表2002本文对AT24系列存贮器和AT89系列单片机的特征及总线状态作为介绍,并以AT24C01与AT89C2051为例详细描述了通用存贮器IC卡的工作原理及用单片机对其进行读写操作的基本电路连接和软件编程方法。

用存贮器IC卡是由通用存贮器芯片封装而成的,由于它的结构和功能简单,生产成本低,使用方便,因此在各领域都得到了广泛的应用。

目前用于IC卡的通用存贮器芯片多为E2PROM,其常用的协议主要有两线串行连接协议(I2C)和三线串行链接协议,其中比较常用的是ATMEL公司生产的AT24系列芯片。

以该系列中的AT24C01为例,它具有1k的存贮容量,适用于2V~5V的低电压/标准电压的操作,具有低功耗和高可靠性等优点。

而AT89C2051虽是ATMEL公司89系列单片机的低档型,但它具有2k的FLASH ROM(可重编闪速存贮器)、128×8位内部RAM及全静态操作方式,同样也具有低功耗和较强的功能。

下面以AT24C2051为例,对通用存贮器IC卡的工作原理及基本电路连线作一介绍,该线路简单,使用灵活,能可靠地对通用存贮器IC卡进行读写。

2 硬件特性AT24系列存贮器的特性AT24系列存贮器芯片采用CMOS工艺制造,内置有高压泵,可在单电压供电条件下工作。

其标准封装为8脚DIP封装形式,各引脚的功能说明如下:SCL:串行时钟。

在该脚的上升沿时,系统将数据输入到每个EEPROM器件,在下降沿时输出。

SDA:串行数据。

该引脚为开漏极驱动,可双向传送数据。

A0、A1、A2:器件/页面寻址。

为器件地址输入端。

在AT24C01/02中,该引脚被硬连接。

Vcc:一般输入+5V的工作电压。

图1是符合ISO7816-2标准的IC卡的触点图(见IC卡书P186)。

对于AT24系列通用存贮器IC卡来说,通常只需使用四个触点。

AT24C01的内部组态为128个8位字节,而对随机字寻址则需要一个7位地址。

24LC512驱动程序

24LC512驱动程序

24LC512驱动程序:24LC512存储芯片的相关函数,代码基于原子的STM32历程,此处为避免篇幅过大,只附上24LC512.h和24LC512.c文件。

在移植过程中如果因为缺少iic相关函数导致编译出错,请参考正点原子STM32的iic文件。

24LC512.h文件内容:#ifndef __24LC512_H#define __24LC512_H#include "iic.h"#define Page_Byte 128 //页字节128个#define Max_Addr 0xffff //最大可访问地址#define LC512_Write_Addr 0xA0 //器件写地址#define LC512_Read_Addr 0xA1 //器件读地址//函数功能:向指定地址写入一个字节数据void LC512_WriteByte(uint16_t addr, uint8_t dat);//函数功能:从指定地址读出一字节数据uint8_t LC512_ReadByte(uint16_t addr);//函数功能:向任意地址写入length个字节,写入数据存放于 buffer中void LC512_Write(uint8_t* buffer, uint16_t addr, uint16_t length);//函数功能:从任意地址读出length个字节,存放在buffer数组中void LC512_Read(uint8_t* buffer, uint16_t addr, uint16_t length);//函数功能:清除LC512里所有数据void LC512_Clear(void);#endif24LC512.c文件内容:#include "24lc512.h"#include "delay.h"//函数功能:向指定地址写入一个字节数据void LC512_WriteByte(uint16_t addr, uint8_t dat){I IC_Start();I IC_Send_Byte(LC512_Write_Addr);I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr>>8));I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr));I IC_Wait_Ack();I IC_Send_Byte(dat);I IC_Wait_Ack();I IC_Stop();d elay_ms(5); //等待写入完成}//函数功能:从指定地址读出一字节数据uint8_t LC512_ReadByte(uint16_t addr){u int8_t temp = 0;I IC_Start();I IC_Send_Byte(LC512_Write_Addr);I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr>>8));I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr));I IC_Wait_Ack();I IC_Start();I IC_Send_Byte(LC512_Read_Addr);I IC_Wait_Ack();t emp = IIC_Read_Byte(0);I IC_Stop();r eturn temp;}//函数功能:向任意地址写入length个字节,写入数据存放于 buffer中void LC512_Write(uint8_t* buffer, uint16_t addr, uint16_t length) {I IC_Start();I IC_Send_Byte(LC512_Write_Addr);I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr>>8));I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr));I IC_Wait_Ack();w hile(length != 0){IIC_Send_Byte(*buffer++);IIC_Wait_Ack();addr++;length--;if(addr%Page_Byte == 0){IIC_Stop();delay_ms(5); //等待写入完成IIC_Start();IIC_Send_Byte(LC512_Write_Addr);IIC_Wait_Ack();IIC_Send_Byte((uint8_t)(addr>>8));IIC_Wait_Ack();IIC_Send_Byte((uint8_t)(addr));IIC_Wait_Ack();}}I IC_Stop();d elay_ms(5); //等待写入完成}//函数功能:从任意地址读出length个字节,存放在buffer数组中void LC512_Read(uint8_t* buffer, uint16_t addr, uint16_t length) {I IC_Start();I IC_Send_Byte(LC512_Write_Addr);I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr>>8));I IC_Wait_Ack();I IC_Send_Byte((uint8_t)(addr));I IC_Wait_Ack();I IC_Start();I IC_Send_Byte(LC512_Read_Addr);I IC_Wait_Ack();w hile(--length){*buffer++ = IIC_Read_Byte(1);}*buffer = IIC_Read_Byte(0);I IC_Stop();}//函数功能:清除LC512里所有数据void LC512_Clear(void){u int16_t temp = (Max_Addr+1)/Page_Byte;u int16_t addr= 0;u int16_t i = 0, j =0;f or(i = 0; i < temp; i++){IIC_Start();IIC_Send_Byte(LC512_Write_Addr);IIC_Wait_Ack();IIC_Send_Byte((uint8_t)(addr>>8));IIC_Wait_Ack();IIC_Send_Byte((uint8_t)(addr));IIC_Wait_Ack();for(j = 0; j < 128; j++){IIC_Send_Byte(0x00);IIC_Wait_Ack();}IIC_Stop();delay_ms(5); //等待写入完成Delay_5ms(); //等待写入完成addr += Page_Byte;}}。

基于51单片机的12864LCD显示驱动

基于51单片机的12864LCD显示驱动

基于51单片机的12864LCD显示驱动摘要:利用51单片机对12864LCD显示屏进行驱动,并令其显示动态及静态图像。

可使用4位/8位并行、2线或3线串行多种接口方式,拥有多种字库的点阵图形液晶显示模块;接口方式灵活,操作指令简单、方便,可构成全中文人机交互图形界面。

可以显示汉字,也可完成图形显示;电压、功耗较低;硬件电路结构与显示程序都要简洁,同时价格也略低于相同点阵的图形液晶模块。

关键词:51单片机12864LCD 显示屏动态静态图像引言带中文字库的TS128X64(图1)具有4位/8位并行、2线或3线串行多种接口方式,引脚功能见图2。

其内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为128×64,内置8192个16*16点汉字,和128个16*8点ASCII字符集。

图1 TS12864液晶实物图该模块接口方式灵活和操作指令简单、方便,可构成全中文人机交互图形界面。

可以显示8×4行16×16点阵的汉字。

也可完成图形显示,有低电压低功耗的特点。

由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构还是显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。

本设计讲采用STC89C52对TS128X64进行驱动,设计并制作LCD驱动电路,使其可通过按键切换LCD的显示内容,并且实现对数字,汉字,英文以及图片的显示,滚屏,以及动画功能。

1.硬件设备STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash存储器。

STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。

在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:8k字节Flash,512字节RAM,32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。

24c64C储存单元使用说明及程序控制

24c64C储存单元使用说明及程序控制

scl_24c64 = 1;
Delay_xus(1);
sda_24c64 = 1; //SDA 上升沿
Delay_xus(1);
scl_24c64 = 0;
}
void ask_24c64() //写数据应答,第九个脉冲 sda_24c64 为低,则 24c64 成功接受数据
{ uchar k=30;
scl_24c64 = 1;
scl_24c64 = 0;
sda_24c64 = 1;
return data_from_24c64;
}
void write_o_data_24c64(uchar addH,uchar addL,uchar data_24c64)//写入单个数据
{ start_24c64();
writebyte_24c64(0xa1);//写 读指令(A0A1A2=000)
for(i=0;i<n;i++) //读 n 个字节数据 { m_data_from_24c64[i] = readbyte_24c64(0); }
stop_24c64(); }*/ void main() { uchar i;
始连续多字节写入
{ uchar i;
start_24c64();
writebyte_24c64(0xa0);//写指令(A0A1A2=000)
writebyte_24c64(addH);//写高位地址
writebyte_24c64(addL);//写低位地址
if(n>32) //每页最多 32 字节
Delay_xus(1);
scl_24c64 = 0;
data_to_24c64<<=1;

I2C接口的EEPROM 24C64芯片的驱动方法

I2C接口的EEPROM 24C64芯片的驱动方法

I2C接口的EEPROM24C64芯片的驱动方法与93C46类似的,24C64也是EEPROM,但不同的是24C64是I2C接口的,容量也要更大些,用来存储较大容量的数据,甚至在某些单片机中可以用作程序存储器。

24C64提供65536个位,它们是以字节方式进行组织的。

通过设置不同的地址,可以实现多达8个芯片共享两线总线。

它被广泛应用于工业、化工等需要低功耗与低电压的领域。

同时,它还提供诸如4.5V~5.5V、2.7V~5.5V、2.5V~5.5V与1.8V~5.5V各种工作电压范围的芯片,从而使其应用更加通用。

24C64的引脚定义:引脚功能详细描述:24C64的功能框图:引脚功能描述:串行时钟(SCL):在SCL的上升沿数据写入芯片中,在下降沿从芯片中读出数据。

串行数据(SDA):SDA用作双向数据传输。

这个引脚是漏极开路驱动,需要加上拉电阻。

设备地址(A2,A1,A0):A2~A0是设备地址设置引脚,可以通过接高或接低来设置不同的地址,也可以直接悬空。

设置为不同地址时最多可以在同一总线上存在多达8个芯片。

当这些引脚悬空时,默认地址为0。

写保护(WP):当此引脚接到GND上时,允许正常的写操作。

当WP接到V CC时,所有的写操作都是被禁止的。

如果悬空,则WP在内部被拉到GND。

24C64的组织方式:24C64在内部被组织为256个页,每个页32个字节。

可以按字节来进行操作,地址为13位。

24C64的操作方法:24C64是采用I2C接口来进行数据传输的,在这里不再介绍I2C接口数据传输的相关内容,具体的I2C总线协议在相关章节有详细讲解,敬请翻阅。

下面只针对于24C64的操作方法进行讲解。

1)设备寻址在开始条件使芯片使能后,需要给其写入一个8位的设备地址码,以使某一芯片被命中。

在地址码的开头有两个“10”序列,共4位,然后是3位的地址,最后是1位的读写标识位。

具体的地址码结构如下:24C64使用3个设备地址位A2、A1、A0使多达8个芯片同时存在于一条总线上。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
** 发送主机发送应答信号后 SDA 为低电平,此时接收数据要重新拉高 SDA 电平 **************************************************************************** ****************/ uchar i2c_rcvbyte(uchar ack_chack) {
作者: 李雪川 时间: 2009-7-30 说明: 24c64 存储芯片使用,I2C 通讯协议 版本: V1 注意: **************************************************************************** *****************/
void i2c_stop() {
delay_10us(); I2C_SDA = 0; delay_10us(); I2C_SCL = 1; delay_10us(); I2C_SDA = 1; }
/*************************************************************************** ****************
#endif
/************************24c64.c******************************************** **************************
作者: 李雪川 时间: 2009-7-30 说明: 24c64 存储芯片使用,I2C 通讯协议 版本: V1 注意: **************************************************************************** *****************/
/* 24C64.C */
#include"24c64.h"
bit ACK = 1; /* 应答标志 */
/*************************************************************************** ****************
延时 10us **************************************************************************** *****************/ void delay_10us() {
uchar i, temp = 0;
delay_5us(); I2C_SDA = 1;
/* 确保延时 */ /* 读数据时候先拉高 SDA 电平 */
for (i = 0; i < 8; i++) {
for (j = 124; j > 0; j--); } }
/*************************************************************************** ****************
函数名: bit i2c_start() 说明: 启动成功返回 1, 启动失败还回 0 **************************************************************************** ****************/ bit i2c_start() {
/*************************************************************************** ****************
函数名: void i2c_stop() 说明: I2C 停止信号 **************************************************************************** ****************/
uchar i = 10; while (i--); } /*************************************************************************** **************** 延时 5us **************************************************************************** *****************/ void delay_5us() { uchar i = 5; while(i--); } /*************************************************************************** **************** 延时 10ms
/*************************************************************************** *****************/
void at24c64_wr(void *dat, uint address, uint cont);
/*************************************************************************** ****************
#define uchar unsigned char #define uint unsigned short int
#define uint8 unsigned char #define uint16 unsigned long int
#define BYTE unsigned char #define UINT8 unsigned char #define UINT16 unsigned long int
函数名: bit i2c_sentbyte(uchar byt) 说明: 发送数据,还回 1: 发送成功 0;发送失败 **************************************************************************** ****************/ bit i2c_sentbyte(uchar byt) {
#define int8 char #define int16 long int
#define INT8 char #define INT16 long int
#endif
/***************************24c64.h***************************************** **************************
delay_10us(); I2C_SCL = 1; delay_10us(); I2C_SDA = 1; delay_10us(); if (I2C_SCL & I2C_SDA) /* 确保为高电平 */ {
I2C_SDA = 0; /* 启动 I2C 总线 */ delay_10us(); I2C_SCL = 0; /* 拉低时钟线以备用 */ delay_10us(); return 1; } else { return 0; } }
/* 24C64.H */
#ifndef _24C64_H #define _24C64_H
#include"reg52.h" #include"compile.h" #include"intrins.h"
sbit I2C_SDA = P3^2; sbit I2C_SCL = P3^3;
extern bit ACK; /* 应答标志 */
函数名: void at24c64_rd(void *dat, uint address, uint cont) 说明: 读数据操作(主机读到数据存放指针, 读数据首地址, 读数据个数) ** 对 24c64 进行连续读操作时候地址指针在整个数据内(8K 字节内)自加 /*?????????????????在使用 32k 以下存储器时候只发送一次地 址???????????????????????????????????*/ /*************************************************************************** *****************/ void at24c64_rd(void *dat, uint address, uint cont);
/* 拉低时钟线以备用 */
byt <<= 1; } delay_5us(); /* 在第 9 个周期响应 ACK,读 24c64 发送出的应答信号 ACK 拉 SDA */ I2C_SDA = 1; delay_5us();
I2C_SCL = 1; delay_5us(); ACK = I2C_SDA; /* 读应答信号 */ I2C_SCL = 0;
基于 51 单片机的 24C64 驱动程序 2010-04-01 11:34/************************************************************************** ************************
** 文 件 名:Compile.h ** 作 者: 李雪川 版本: v01 编写日期: 2009-7-24 完成日期: 2009-7-24 ** 功能描述: 编译类型关键词定义 ** 修改时间:2010-4-1 **************************************************************************** *************************/ #ifndef _COMPILE_ #define _COMPILE_H
相关文档
最新文档