找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机使用1062lcd设置的电子时钟源代码

[复制链接]
跳转到指定楼层
楼主
ID:431442 发表于 2018-11-22 20:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机使用1062lcd设置的电子时钟。
第一行显示字符
第二行显示时间
适用于初学者和一些学生。
在文件里面有源文件C文件以及hex烧录程序。
大家可以看一看。

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<string.h>           //strcat():合并字符串
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define GPIO_KEY P1

  6. sbit E=P2^7;                //1602使能引脚
  7. sbit RW=P2^5;                //1602读写引脚        
  8. sbit RS=P2^6;                //1602数据/命令选择引脚

  9. uchar table1[]="zhangwenhua2017210484";  //The time is
  10. //注意修改后的长度
  11. uchar str1[2]="12";         //second
  12. uchar str2[2]="12";         //minute
  13. uchar str3[2]="07";         //hour

  14. uint KEY_VALUE;


  15. uint second,minute,hour;  //时钟显示数值
  16. uint tag; //中断计时指标

  17. void intTostring(uint num,uchar temp[2]);
  18. void clock()           //时钟进制函数
  19. {
  20.     if(second == 60){minute++;second=0;}
  21.         if(minute == 60){hour++;minute=0;}
  22.         if(hour == 24){hour=0;}
  23.         //数字->字符串的转换
  24.     intTostring(second,str1);
  25.         intTostring(minute,str2);
  26.         intTostring(hour,str3);
  27.   // time 已经存储了时间
  28. }  

  29. void delayms(uint del)   //延时1ms
  30. {
  31. uint i,j;
  32. for(i=0;i<del;i++)
  33.    for(j=0;j<=110;j++);
  34. }
  35. void writecmd(uchar com)  //写指令
  36. {
  37.     E=0;
  38.     RS=0;
  39.     RW=0;
  40.     P0=com;
  41.     delayms(2);
  42.     E=1;  
  43.     delayms(2);
  44.     E=0;
  45. }

  46. void writedata(uchar dat)//写数据
  47. {  
  48.    E=0;
  49.    RS=1;
  50.    RW=0;
  51.    P0=dat;
  52.    delayms(2);
  53.    E=1;  
  54.    delayms(2);
  55.    E=0;

  56. }
  57. void init(void)               //初始化
  58. {
  59.     delayms(15);
  60.     writecmd(0x38);
  61.     delayms(5);
  62.     writecmd(0x38);
  63.     delayms(5);
  64.     writecmd(0x38);
  65.     writecmd(0x38);
  66.     writecmd(0x08);
  67.     writecmd(0x01);
  68.     writecmd(0x06);
  69.     writecmd(0x0c);
  70. }

  71. void intTostring(uint num,uchar temp[2])// 一定要注意这里的字符串长度。
  72. {
  73.     uint ge,shi;
  74.         shi = num/10;
  75.         ge = num%10;
  76.         temp[0] = shi+48;//利用ASCLL编码转换
  77.         temp[1] = ge+48;
  78. }

  79. void display()
  80. {
  81.                 
  82.    uchar j;
  83.    uchar i;
  84.    writecmd(0x80);    //告诉液晶在哪个地方显示 (设置地址指针)//80H+00

  85.    for(j=0;j<11;j++)   //有11个字符,要循环11次
  86.    {
  87.        writedata(table1[j]);   //The time is
  88.        delayms(5);
  89.    }

  90.    writecmd(0x80+0x40);    //再设置第二行的起始位置

  91.    //时钟显示
  92.    for(i=0;i<2;i++)writedata(str3[i]);
  93.    writedata(':');
  94.    for(i=0;i<2;i++)writedata(str2[i]);
  95.    writedata(':');
  96.    for(i=0;i<2;i++)writedata(str1[i]);
  97.    delayms(5);
  98.    //end
  99.   
  100. }


  101. void main()
  102. {  
  103.    TMOD = 0x02;   //设置T0为自动重装初值的工作方式                                                         
  104.    TL0 = 0x06;//          12Mhz晶振 -->  1us,此处取250us作为一次中断所用时间, 那么4000次中断就算一秒。
  105.    TH0 = 0x06;//          自动重装初值,不影响精度
  106.    EA = 1;
  107.    ET0 = 1;
  108.    TR0 = 1;
  109.     init();
  110.        
  111.    while(1){
  112.                             
  113.                           display();       
  114.                                  clock();
  115.           
  116.   }
  117.    
  118. }

  119. //利用定时器0计时
  120. void T0_time() interrupt 1
  121. {
  122.            if(tag == 4000)
  123.          {
  124.              tag = 0;
  125.                  second++;
  126.          }
  127.          tag++;
  128. }
复制代码

所有资料51hei提供下载:
电子时钟.rar (2.45 KB, 下载次数: 13)



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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