找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1481|回复: 0
打印 上一主题 下一主题
收起左侧

单片机实验板LCD1602时钟

[复制链接]
跳转到指定楼层
楼主
学会了使用LCD1602,然后利用普中的实验板顺利实现了程序运行
  1. #include <reg51.h>
  2. #include <lcd.h>
  3. #include <delay.h>
  4. #include <intrins.h>
  5. unsigned char hour=0,minu=0,sec=0,j=0;
  6. void main()
  7. {
  8.          unsigned char lcd[]="51hei I LOVE U";
  9.         unsigned char i;
  10.         unsigned char time[8]={0};
  11.         TMOD=0X01;
  12.         TH0=(65536-50000)/256;        //定时器time0定时50ms
  13.         TL0=(65536-50000)%256;
  14.         TR0=1;
  15.         EA=1;
  16.         ET0=1;
  17.         LCD1602_DATAPINS=0xff;
  18.         lcd_init();
  19.         delayms(10);
  20.         lcd_w_cmd(0x80);  //显示的初始位置在第一行第一列
  21.         delayms(10);
  22.         for(i=0;lcd[i]!='\0';i++)  //遇到数组的\0就结束
  23.         {
  24.                 lcd_w_dat(lcd[i]);
  25.                 delayms(50);
  26.         }
  27.         lcd_w_cmd(0x0c); //光标不显示,字符不闪烁
  28.         delayms(10);
  29.         while(1)   //此处的数组元素值一定要能够更新,否则数据不会变化
  30.         {
  31.                 time[0]=hour/10+48;//转换为ASCII码,十进制值加48
  32.                 time[1]=hour%10+48;
  33.                 time[2]=':';
  34.                 time[3]=minu/10+48;
  35.                 time[4]=minu%10+48;
  36.                 time[5]=':';
  37.                 time[6]=sec/10+48;
  38.                 time[7]=sec%10+48;
  39.                 lcd_w_cmd(0xc3);
  40.                 for(i=0;i<8;i++)
  41.                 {
  42.                         lcd_w_dat(time[i]);
  43.                         delayms(10);
  44.                 }
  45.         }
  46. }
  47. void time_0()interrupt 1 //50ms中断服务函数,可以放在程序的任意位置
  48. {
  49.          TH0=(65536-50000)/256;        //定时50ms
  50.         TL0=(65536-50000)%256;
  51.         TR0=1;
  52.         j++;
  53.         if(j==20)
  54.         {
  55.                 j=0;
  56.                 sec++;
  57.                 if(sec==60)
  58.                 {
  59.                         sec=0;minu++;
  60.                         if(minu==60)
  61.                         {
  62.                                  minu=0;
  63.                                 hour++;
  64.                                 if(hour==24)
  65.                                         hour=0;
  66.                         }
  67.                 }
  68.         }        
  69. }
  70. 以下是LCD.C
  71. #include <reg51.h>
  72. #include <lcd.h>
  73. #include <delay.h>
  74. void lcd_init()
  75. {
  76.    lcd_w_cmd(0x3c);
  77.    lcd_w_cmd(0x0e);
  78.    lcd_w_cmd(0x01);
  79.    lcd_w_cmd(0x06);
  80.    lcd_w_cmd(0x80);
  81. }
  82. unsigned char  lcd_r_state()        //读液晶状态并返回一个值
  83. {
  84.          unsigned char s;
  85.         RW=1;
  86.         delay1();
  87.         RS=0;
  88.         delay1();
  89.         E=1;
  90.         delay1();
  91.         s=LCD1602_DATAPINS;
  92.         delay1();
  93.         E=0;
  94.         delay1();
  95.         RW=0;
  96.         delay1();
  97.         return(s);
  98. }
  99. void lcd_w_cmd(unsigned char com)//向液晶写入命令
  100. {
  101.         unsigned char i;
  102.         do
  103.         {
  104.                  i=lcd_r_state();
  105.                 i=i&0x80;
  106.                 delayms(1);        
  107.         }while(i!=0);
  108.         RW=0;
  109.         delay1();
  110.         RS=0;
  111.         delay1();
  112.         E=1;
  113.         delay1();
  114.         LCD1602_DATAPINS=com;
  115.         delay1();
  116.         E=0;
  117.         delay1();
  118.         RW=1;
  119. //        delayms(10);
  120. }
  121. void lcd_w_dat(unsigned char dat)//向液晶写入数据
  122. {
  123.          unsigned char i;
  124.          do
  125.          {
  126.                   i=lcd_r_state();
  127.                 i=i&0x80;
  128.                 delayms(1);
  129.          }while(i!=0);
  130.          RW=0;
  131.          delay1();
  132.          RS=1;
  133.          delay1();
  134.          E=1;
  135.          delay1();
  136.          LCD1602_DATAPINS=dat;
  137.          delay1();
  138.          E=0;
  139.          delay1();
  140.          RW=1;
  141.          delay1();
  142. //         delayms(100);
  143. }
复制代码



1.JPG (2.14 MB, 下载次数: 59)

1.JPG

LCD1602时钟.zip

52.77 KB, 下载次数: 9, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表