找回密码
 立即注册

QQ登录

只需一步,快速开始

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

使用at89s52和lcd1602的数字时钟,显示屏可换。

[复制链接]
跳转到指定楼层
楼主
ID:646543 发表于 2019-12-5 10:24 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用AT89S52单片机,使用矩阵按键,有DHT11温湿度传感器,蜂鸣器,及变压5V电源模块。原理图使用模块化设计。
现在初步调试后,各模块均可正常工作。已有独立的模块程序,暂时无法组合出一个合理可用的数字时钟带温度测量,求大神指教。

2019-12-05_10.14.13.jpg (1.22 MB, 下载次数: 28)

2019-12-05_10.14.13.jpg

2019-12-05_10.17.42.jpg (1.18 MB, 下载次数: 25)

2019-12-05_10.17.42.jpg

2019-12-05_10.19.40.jpg (1.12 MB, 下载次数: 26)

2019-12-05_10.19.40.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:646543 发表于 2019-12-5 10:29 | 只看该作者

基础程序

  1. include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uint count,t;
  5. int shi=1,fen=11,miao=22,nian=12,yue=7,ri=1;
  6. uchar shijian[16]={"time  00-00-00 t"},shijian1[16]={"date  00-00-00  "};

  7. //这三个引脚参考资料
  8. sbit E=P3^3;        //1602使能引脚
  9. sbit RW=P3^4;       //1602读写引脚  
  10. sbit RS=P3^5;       //1602数据/命令选择引脚
  11. sbit LE   = P3^7;
  12. sbit key1 = P1^4;      //小时修改建
  13. sbit key2 = P1^5;   //分钟修改键
  14. sbit key3 = P1^6;    //显示选择键

  15. /********************************************************************
  16. * 名称 : delay()
  17. * 功能 : 延时,延时时间大概为5US。
  18. * 输入 : 无
  19. * 输出 : 无
  20. ***********************************************************************/

  21. void delay()
  22. {
  23.    uint n=250;

  24.    while(n--);
  25. }
  26. /********************************************************************
  27. * 名称 : bit Busy(void)
  28. * 功能 : 这个是一个读状态函数,读出函数是否处在忙状态
  29. * 输入 : 输入的命令值
  30. * 输出 : 无
  31. ***********************************************************************/
  32. bit Busy(void)
  33. {
  34.     bit busy_flag = 0;
  35.     RS = 0;
  36.     RW = 1;
  37.     E = 1;
  38.     delay();
  39.     busy_flag = (bit)(P0 & 0x80);
  40.     E = 0;
  41.     return busy_flag;
  42. }
  43. /********************************************************************
  44. * 名称 : wcmd(uchar del)
  45. * 功能 : 1602命令函数
  46. * 输入 : 输入的命令值
  47. * 输出 : 无
  48. ***********************************************************************/
  49. void wcmd(uchar del)
  50. {
  51.     while(Busy());
  52.     RS = 0;
  53.     RW = 0;
  54.     E = 0;
  55.     delay();
  56.     P0 = del;
  57.     delay();
  58.     E = 1;
  59.     delay();
  60.     E = 0;
  61. }

  62. /********************************************************************
  63. * 名称 : wdata(uchar del)
  64. * 功能 : 1602写数据函数
  65. * 输入 : 需要写入1602的数据
  66. * 输出 : 无
  67. ***********************************************************************/

  68. void wdata(uchar del)
  69. {
  70.     while(Busy());
  71.     RS = 1;
  72.     RW = 0;
  73.     E = 0;
  74.     delay();
  75.     P0 = del;
  76.     delay();
  77.     E = 1;
  78.     delay();
  79.     E = 0;
  80. }

  81. /********************************************************************
  82. * 名称 : L1602_init()
  83. * 功能 : 1602初始化,请参考1602的资料
  84. * 输入 : 无
  85. * 输出 : 无
  86. ***********************************************************************/
  87. void L1602_init(void)
  88. {
  89.     wcmd(0x38);
  90.     wcmd(0x0c);
  91.     wcmd(0x06);
  92.     wcmd(0x01);
  93. }


  94. void timeInit()
  95. {
  96.     TMOD = 0X01;       //定义定时器1工作方式    16位定时   c/t选为定时器   GATE选TR1控制
  97.     TL0  = (65536-10000)%256;
  98.     TH0  = (65536-10000)/256;
  99.     TR0=1;
  100.     EA=1;
  101.     ET0=1;
  102. }
  103. void timeint() interrupt 1
  104. {
  105.     TL0  = (65536-10000)%256;
  106.     TH0  = (65536-10000)/256;
  107.     count++;
  108. }

  109. /*************************
  110. ***时间日期设定
  111. *************************/
  112. void shijianxian()
  113. {
  114.     if(count>=100)
  115.     {
  116.         miao++;
  117.         count=0;
  118.     }
  119.     if(miao>=60)
  120.     {
  121.         fen++;
  122.         miao=0;
  123.     }
  124.     if(fen>=60)
  125.     {
  126.         shi++;
  127.         fen=0;
  128.     }
  129.     if(shi>=24)      
  130.     {
  131.         ri++;
  132.         shi=0;
  133.     }
  134.     if(ri>30)
  135.     {
  136.         yue++;
  137.         ri=1;
  138.     }
  139.     if(yue>12)
  140.     {
  141.         nian++;;
  142.         yue=1;
  143.     }
  144.     if(nian==99)
  145.     {
  146.         nian=0;
  147.     }

  148.    if((key1==0)&((t%6)==0))
  149.     {
  150.         delay();
  151.         if((key1==0)&((t%6)==0))     
  152.             {
  153.             shi++;
  154.             if(shi>23)  shi=0;
  155.             }
  156.         delay();
  157.     }
  158.     if((key3==0)&((t%6)==0))
  159.     {
  160.         delay();
  161.         if((key3==0)&((t%6)==0))     
  162.             {
  163.             shi--;
  164.             if(shi<0)  shi=23;
  165.             }
  166.     }
  167.     if((key1==0)&((t%6)==1))
  168.     {
  169.         delay();
  170.         if((key1==0)&((t%6)==1))     
  171.             {
  172.             fen++;
  173.             if(fen>59)  fen=0;
  174.             }
  175.         delay();
  176.     }
  177.     if((key3==0)&((t%6)==1))
  178.     {
  179.         delay();
  180.         if((key3==0)&((t%6)==1))     
  181.             {
  182.             fen--;
  183.             if(fen<0)   fen=59;
  184.             }
  185.         delay();
  186.     }
  187.     if((key1==0)&((t%6)==2))
  188.     {
  189.         delay();
  190.         if((key1==0)&((t%6)==2))     yue++;
  191.         delay();
  192.     }
  193.     if((key1==0)&((t%6)==3))
  194.     {
  195.         delay();
  196.         if((key1==0)&((t%6)==3))     ri++;
  197.         delay();
  198.     }

  199. }
  200. /******************************
  201. ****时间显示
  202. *******************************/
  203. void shijianxian1()
  204. {
  205.         shijian[6]=shi/10+48;
  206.         shijian[7]=shi%10+48;
  207.         shijian[9]=fen/10+48;
  208.         shijian[10]=fen%10+48;
  209.         shijian[12]=miao/10+48;
  210.         shijian[13]=miao%10+48;
  211.         shijian[8]=45;
  212.         shijian[11]=45;
  213.         shijian[15]=t+48;
  214. }

  215. /******************************
  216. ****日期显示
  217. *******************************/
  218. void riqi()
  219. {
  220.         shijian1[6]=nian/10+48;
  221.         shijian1[7]=nian%10+48;
  222.         shijian1[9]=yue/10+48;
  223.         shijian1[10]=yue%10+48;
  224.         shijian1[12]=ri/10+48;
  225.         shijian1[13]=ri%10+48;
  226.         shijian1[8]=45;
  227.         shijian1[11]=45;   
  228. }


  229. /********************************************************************
  230. * 名称 : Main()
  231. * 功能 : 主函数
  232. * 输入 : 无
  233. * 输出 : 无
  234. ***********************************************************************/
  235. void Main()
  236. {
  237.     uint i;
  238.     L1602_init();
  239.      timeInit();
  240.     while(1)
  241.     {
  242.         shijianxian();
  243.         shijianxian1();
  244.         if(key2==0)
  245.             {
  246.             delay();
  247.             if( (key2==0))
  248.                 t++;
  249.             if(t>=6)  t=0;
  250.             delay();
  251.             }
  252.         riqi();
  253.         for(i=0;i<16;i++)
  254.             {
  255.             wcmd(0xc0+i);
  256.             wdata(shijian[i]);
  257.             wcmd(0x80+i);
  258.             wdata(shijian1[i]);
  259.             }
  260.     }        
  261. }
复制代码

内部资料.zip

162.72 KB, 下载次数: 14, 下载积分: 黑币 -5

部分组合用程序

回复

使用道具 举报

板凳
ID:646543 发表于 2019-12-5 10:34 | 只看该作者
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1 P0
#define LCD2 P1
#define KEY P2
uint count,t;
int hour=23;min=59;sec=49
uchar shijian[16]={"time 00-00-00 t"},shijian1[16]=["date 00-00-00"];

sbit E=P1^2;
sbit RW=P1^1;
sbit RS=P1^0;
sbit BEEP=P3^1;
sbit LED=P3^0;
sbit TP=P3^2;

void delay()
{
uint n=250;
while(n--);
}
bit Busy(void)
{
   bit busy_flag=0;
   RS=0;
   RW=1;
   E=1;
   delay();
   busy flag=(bit)(P0&0x80);
   E=0;
   return busy_flag;
}
回复

使用道具 举报

地板
ID:475402 发表于 2019-12-13 17:20 | 只看该作者
我是小白支持并学习。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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