基于C51 的晶1620程序.docVIP

  • 1
  • 0
  • 约3.07千字
  • 约 8页
  • 2018-09-24 发布于江苏
  • 举报
基于C51 的晶1620程序

基于proteus的51单片机仿真实例六十四、字符液晶LCD1602显示字符串实例 HYPERLINK /my/space.php?uid=139222do=tag 标签:? HYPERLINK /my/space.php?uid=139222do=tagid=2872 proteus? HYPERLINK /my/space.php?uid=139222do=tagid=498 单片机? HYPERLINK /my/space.php?uid=139222do=tagid=2621 实例? HYPERLINK /my/space.php?uid=139222do=tagid=1261 液晶? HYPERLINK /my/space.php?uid=139222do=tagid=1730 字符? 2010-02-20 00:12 1、本例用1602液晶循环右移显示一串字符串。显示模式设置如下 1)16*2显示,5*7点阵,8位数据接口 2)开显示,有光标且光标闪烁 3)光标右移,字符不移动 ? 2、由于一次只能向液晶写入一个字符,因此如果需要显示字符串的话,需要用到指针或者字符串数组,然后再设置一个循环,从第一个字符开始写入液晶,直到写到字符串结束标志“\0”为止。 字符显示地址的确定:由于1602液晶在第一个地址显示完毕后,能够自动指向先一个地址,因此只需要指定字符串的第一个字符显示的地址即可, ? 3、在keil c51中新建工程ex52,编写如下程序代码,编译并生成ex52.hex文件 //LCD1602.C //液晶控制与显示程序 #include reg51.h #include intrins.h sbit RS=P2^0;??? //寄存器选择位,将RS位定义为P2.0引脚 sbit RW=P2^1;??? //读写选择位,将RW位定义为P2.1引脚 sbit E=P2^2;???? //使能信号位,将E位定义为P2.2引脚 //延时函数 void delayms(unsigned int ms) { ??unsigned char i; ?while(ms--) ?{ ? ?for(i = 0;i 120;i++); ?} } //忙检测函数 unsigned char busy_check(void) { ??unsigned char LCD_Status;??? //定义忙状态变量 ?RS = 0;???????? // ?RW = 1; ?EN = 1; ?delayms(1);?????? ?LCD_Status = P0;???? //读取忙状态 ?EN = 0; ?return LCD_Status;???? //返回忙状态 } //写命令 void write_LCD_Command(unsigned char cmd) { ??while((busy_check() 0x80) == 0x80);?//等待忙状态结束 ?RS = 0; ?RW = 0; ?EN = 0; ?P0 = cmd; ?EN = 1; ?delayms(1);? ?EN = 0; } //写数据 void write_LCD_data(unsigned char dat) { ??while((busy_check() 0x80) == 0x80); ?RS = 1; ?RW = 0; ?EN = 0; ?P0 = dat; ?EN = 1; ?delayms(1);? ?EN = 0; } //初始化 void init_LCD(void) { ??write_LCD_Command(0x38);???? //显示模式设置 ?delayms(1); ?write_LCD_Command(0x01);???? //清屏 ?delayms(1); ?write_LCD_Command(0x06);??? //字符进入模式:屏幕不动,字符后移 ?delayms(1); ?write_LCD_Command(0x0c);??? //显示开,关光标 ?delayms(1); } //显示字符串 void ShowString(unsigned char x,unsigned char y,unsigned char *str) { ??unsigned char i = 0; ?//设置起始位置 ?if(y == 0) ?{ ? ?write_LCD_Command(0x80 | x); ?} ?if(y == 1) ?{ ? ?write_LCD_Command(0xc0 | x); ?} ?//输出字符串 ?for(i = 0; i 16;i++) ?{ ? ?write_LCD_data(str

文档评论(0)

1亿VIP精品文档

相关文档