1602液晶屏一个按键控制光标位移-51单片机程序.txt_第1页
1602液晶屏一个按键控制光标位移-51单片机程序.txt_第2页
1602液晶屏一个按键控制光标位移-51单片机程序.txt_第3页
1602液晶屏一个按键控制光标位移-51单片机程序.txt_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include #define cmdread 0x15 #define lcd_data p0 sbit lcd_rs = p12; / 0 = cmd, 1 = data sbit lcd_rw = p16; / 0 = write, 1 = read sbit lcd_e = p13; / 1 = readenable, 1-0 = writeenable sbit cs = p10; sbit clk = p17; sbit data = p16; sbit key = p32; unsigned char keyvalue; unsigned char code logo = “s m i c“; unsigned char code time = “00:00:00 am“; void delay10us(unsigned char count); void delay1ms(unsigned int count); void writelcdcmdnobusy(unsigned char cmd); void writelcdcmd(unsigned char cmd); void writelcddata(unsigned char byte); void lcdinitial(void); unsigned char read7279(void); unsigned char receivebyte(void); void sendbyte(unsigned char byte); main() unsigned char i,j=0; lcdinitial(); / 初始化 writelcdcmd(0x84); / 第1行 for (i=0; logoi != 0; i+) writelcddata(logoi); / s m i c writelcdcmd(0xc2); / 第2行 i = 0; while (timei != 0) writelcddata(timei); / 时间 i+; while (1) if (!key) / 有键按下 keyvalue = read7279(); / 读键值 if(keyvalue=0) writelcdcmd(0x0f); / 设置闪烁 writelcdcmd(0xc2 + j); / ac指定位移位 j+; if(j=8) j=0; delay1ms(1000); / 维持1s while (!key); / lcd初始化 void lcdinitial(void) delay1ms(15); writelcdcmdnobusy(0x38); delay1ms(5); writelcdcmdnobusy(0x38); delay1ms(5); writelcdcmd(0x38); / 5*8点阵,8位数据 writelcdcmd(0x38); writelcdcmd(0x08); writelcdcmd(0x01); / 清屏 writelcdcmd(0x06); / ac自动加1,不移位 writelcdcmd(0x0c); / 开显示,光标不显示,不闪烁 / 延时count * 10us void delay10us(unsigned char count) unsigned char i; while(count-) for (i =0 ; i4 ; i+); / 延时count ms void delay1ms(unsigned int count) unsigned char i; while(count-) for (i =0 ; i120 ; i+); / 写lcd命令,不读取busy位 void writelcdcmdnobusy(unsigned char cmd) lcd_rs = 0; / cmd lcd_rw = 0; / write lcd_e = 1; lcd_data = cmd;/ data lcd_e = 0; / 下降沿 lcd_data = 0xff; / 写lcd命令 void writelcdcmd(unsigned char cmd) unsigned char temp; writelcdcmdnobusy(cmd); lcd_rw = 1; / read do lcd_e = 1; delay1ms(1); temp = lcd_data; lcd_e = 0; while (temp / 写lcd数据 void writelcddata(unsigned char byte) unsigned char temp; lcd_rs = 1; / data lcd_rw = 0; / write lcd_e = 1; lcd_data = byte; lcd_e = 0; lcd_data = 0xff; lcd_rs = 0; lcd_rw = 1; / read do lcd_e = 1; delay1ms(1); temp = lcd_data; lcd_e = 0; while (temp / 从7279读取键值, 返回无符号字节的键值 unsigned char read7279(void) unsigned char byte; cs = 0; delay10us(5); sendbyte(cmdread); byte = receivebyte(); cs = 1; return (byte); / 按位读取8位数据, 返回值为字节数据 unsigned char receivebyte(void) unsigned char i, byte = 0; data = 1; / 设为输入口 for (i=0; i8; i+) clk = 1; delay10us(1); byte = byte 1; if (data) byte = byte | 0x01; clk = 0; delay10us(1); data = 0; / 设为输出口 return (byte); / byte字节按位送出 void sendbyte(unsigned char byte) unsigned char i; clk = 0; for (i=0; i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论