为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

[特辑]单片机c措辞_1602液晶显示器上显示24c02贮存数据

2017-10-18 13页 doc 29KB 13阅读

用户头像

is_682974

暂无简介

举报
[特辑]单片机c措辞_1602液晶显示器上显示24c02贮存数据[特辑]单片机c措辞_1602液晶显示器上显示24c02贮存数据 单片机C语言_1602液晶显示器上显示24c02储存数据 /*********************包含的头文件 ****************************/#include #include #define uchar unsigned char #define uint unsigned int /*********************定义LCD端口 *****************************/ /* LCD...
[特辑]单片机c措辞_1602液晶显示器上显示24c02贮存数据
[特辑]单片机c措辞_1602液晶显示器上显示24c02贮存数据 单片机C语言_1602液晶显示器上显示24c02储存数据 /*********************包含的头文件 ****************************/#include #include #define uchar unsigned char #define uint unsigned int /*********************定义LCD端口 *****************************/ /* LCD的RS,RW,EN分别是P2.6、P2.5、P2.7端口 */ /* P0.0--P0.7端口接LCD的数据端口D0--D7 */ /* 24c02的sda端和scl端分别接P2.0和P2.1 */ /* 24c02的VCC端接+5V,GND,A0,A1,A2,WP都接GND */ /********************************************************** ***/ sbit LCD_RS = P2^6; sbit LCD_RW = P2^5; sbit LCD_EN = P2^7; sbit sda=P2^0; sbit scl=P2^1; /********************************************************** ***/ /* */ /* 延时子程序 */ /* */ /*************************************************************/ #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; void delay2() { ;; } void delay(uchar x) { uchar j; while((x--)!=0) { for(j=0;j<125;j++) {;} } } void delay1(uchar x) { uchar a,b; for(a=x;a>0;a--) for(b=100;b>0;b--); } /*************************************************************/ /* */ /* 存储芯片24c02设置 */ /* */ /********************************************************** ***/ void start() //开始信号 { sda=1; delay2(); scl=1; delay2(); sda=0; delay2(); } void stop() //停止信号 { sda=0; delay2(); scl=1; delay2(); sda=1; delay2(); } void respons() //应答信号 { uchar i; scl=1; delay2(); while((sda==1)&&(i<250))i++; //sda为1则应答或250个机器 周期后默认为应答 scl=0; delay2(); } void init() //24c02初始化 { sda=1; delay2(); scl=1; delay2(); } void write_byte(uchar date) //写入1 byte数据 { uchar i,temp; temp=date; for(i=0;i<8;i++) { temp=temp<<1; scl=0; delay2(); sda=CY; delay2(); scl=1; delay2(); } scl=0; delay2(); sda=1; delay2(); } uchar read_byte() //读出1 byte数据 { uchar i,k; scl=0; delay2(); sda=1; delay2(); for(i=0;i<8;i++) { scl=1; delay2(); k=(k<<1)|sda; scl=0; delay2(); } return k; } /*****************在地址address处写入数据date*****************/ void write_add(uchar address,uchar date) { start(); write_byte(0xa0); respons(); write_byte(address); respons(); write_byte(date); respons(); stop(); } /*************读出24c02的地址address处的数据********************/ uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } /*************************************************************/ /* */ /* LCD1602设置 */ /* */ /*************************************************************/ /*************************************************************/ /*检查LCD忙状态 */ /*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数 据 */ /*************************************************************/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); } /********************************************************** *********/ /*写指令数据到LCD */ /*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */ /********************************************************** *********/ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*******************************************************************/ /*写显示数据到LCD */ /*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */ /*******************************************************************/ void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; } /*************************************************************/ /* LCD初始化设定 */ /*************************************************************/ void lcd_init() { delay(15); lcd_wcmd(0x38); //16*2显示,5*7点阵,8位数据 delay(5); lcd_wcmd(0x38); //重复 delay(5); lcd_wcmd(0x38); //再重复 delay(5); lcd_wcmd(0x0c); //显示开,关光标 delay(5); lcd_wcmd(0x06); //移动光标 delay(5); lcd_wcmd(0x01); //清除LCD的显示内容 delay(5); } /********************************************************** ***/ /* 写入字符函数LCD_write_char(x,y,dat) */ /* 将字符“dat”写入LCD的第(x+1)行第(y+1)位 */ /* 设定第1行显示位置:数据指针=80+地址变量 */ /* 设定第2行显示位置:数据指针=c0+地址变量 */ /********************************************************** ***/ void LCD_write_char(unsigned char x,unsigned char y,unsigned char dat) { if(x==0) { lcd_wcmd(0x80+y); } else { lcd_wcmd(0xc0+y); } lcd_wdat(dat); } /********************************************************** ***/ /* 写入字符函数LCD_write_string(x,y,*s) */ /* 将字符串“*s”写入LCD的第(x+1)行第(y+1)位 */ /********************************************************** ***/ /*void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s) { while(*s) { LCD_write_char(x,y,*s); s++; y++; } } /********************************************************** ***/ /* */ /* 主程序 */ /* 将数列numb显示在LCD上 */ /* */ /********************************************************** ***/ void main() { uchar numb[6]={3,4,5,6,7,8};//也可以改成其他数字 uchar m; uchar temp[6]; init(); //24c02初始化 lcd_init(); //LCD初始化 for(m=0;m<6;m++) { write_add(23+m,numb[m]); delay1(100); //延时,保证芯片的反应时间,可以改短 一些 } for(m=0;m<6;m++) { temp[m]=read_add(23+m); delay1(100); LCD_write_char(0,m,temp[m]+'0'); //+‘0’表示让LCD显示ASCII code } while(1); // 程序终止,LCD始终显示numb }
/
本文档为【[特辑]单片机c措辞_1602液晶显示器上显示24c02贮存数据】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索