找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5607|回复: 5
收起左侧

单片机stc89c52 1602液晶显示 倒计时分秒 按键可以设置

  [复制链接]
ID:388477 发表于 2020-3-13 16:06 | 显示全部楼层 |阅读模式
       做这个倒计时,主要家里的电磁炉经常烧热水,最近一次就烧干锅了,就坏掉了,拆开之后线盘烧断了,换了一个就好了,后来我就发现有定时功能,每次烧水就定时就好了,用起来挺方便,所以就想着做一个,先在论坛里找一些相关大家分享的,同时正好也是看了郭师傅的视频后,自己照着写了一个倒计时,分享给大家,如果有问题欢迎指正。
功能:按下key1键进行时间设定,同时时分秒设置完后,最后一次也是开始键
          按下key2键进行时分秒的加
          按下key3键进行时分秒的减
          按下key4键会暂停,第二次按会继续开始,第三次按下就复位
51hei图片_20200313160627.jpg 1.jpg
单片机源程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #include <lcd.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int        
  6. sbit key1=P2^0;  //设置键
  7. sbit key2=P2^1;  //加键
  8. sbit key3=P2^2;  //减键
  9. sbit key4=P2^3;  //第一次暂停,第二次启动,第三次初始化
  10. sbit RS=P2^5;
  11. sbit RW=P2^6;
  12. sbit EN=P2^7;
  13. uchar djshi,djfen,djmiao;
  14. uchar r,knum,s;
  15. uchar code table1[]={"daojishi:       "};
  16. uchar code table2[]={"    00:00:00    "};
  17. void LcdInit()                                                  //LCD初始化子程序
  18. {
  19.           uchar i;
  20.           lcd_writecom(0x38);  //开显示
  21.           lcd_writecom(0x0c);  //开显示不显示光标
  22.           lcd_writecom(0x06);  //写一个指针加1
  23.           lcd_writecom(0x01);  //清屏
  24.           lcd_writecom(0x80);  //设置数据指针起点
  25.           for(i=0;i<16;i++)
  26.            {
  27.                      lcd_writedate(table1[i]);
  28.            }
  29.           lcd_writecom(0xc0);
  30.           for(i=0;i<16;i++)
  31.           {
  32.                    lcd_writedate(table2[i]);
  33.           }
  34. }        
  35. void Timer1Init(void)                //10毫秒@22.1184MHz
  36. {
  37.         
  38.         TMOD = 0x10;                //设置定时器模式
  39.         TL1 = 0x00;                //设置定时初值
  40.         TH1 = 0xB8;                //设置定时初值
  41.         TR1 = 0;                //定时器1开始计时
  42.          ET1=1;                 //定时器1中断
  43.          EA=1;                   //打开总中断
  44. }

  45. /*******************************************************************************
  46. * 函 数 名         : Delay1ms
  47. * 函数功能                   : 延时函数,延时1ms
  48. * 输    入         : c
  49. * 输    出         : 无
  50. * 说    名         : 该函数是在22.1184MHZ晶振下,12分频单片机的延时。
  51. *******************************************************************************/
  52. void Delay1ms(uint ms)
  53. {
  54.         uint i,j,k;
  55.     for(i=0;i<ms;i++)//219.18
  56.     {
  57.         for(j=0;j<200;j++);//224.61
  58.         for(k=0;k<29;k++);//1094.29
  59.     } //1221.79
  60. }
  61. void write_sfm(uchar add,uchar date)
  62. {
  63.                 lcd_writecom(0xc0+add);
  64.                 lcd_writedate(date/10+0x30);
  65.                 lcd_writedate(date%10+0x30);
  66.                 lcd_writecom(0xc0+add+1);
  67. }
  68. void keyscan()
  69. {
  70.                 if(key1==0)
  71.                 {
  72.                                 Delay1ms(5);
  73.                                 if(key1==1)
  74.                                 {        
  75.                                                 knum++;        
  76.                                                 TR1=0;
  77.                                                 while(!key1);
  78.                                                 if(knum==1)
  79.                                                 {
  80.                                                                 lcd_writecom(0x0f);
  81.                                                                 lcd_writecom(0xcb);
  82.                                                 }
  83.                                                 if(knum==2)
  84.                                                 {
  85.                                                                 lcd_writecom(0xc8);
  86.                                                 }
  87.                                                 if(knum==3)
  88.                                                 {
  89.                                                         
  90.                                                                 lcd_writecom(0xc5);
  91.                                                 }
  92.                                                 if(knum==4)
  93.                                                 {
  94.                                                                 lcd_writecom(0x0c);
  95.                                                                 knum=0;
  96.                                                                 TR1=1;   //启动定时器
  97.                                                 }
  98.                         }
  99.                 }
  100.                 if(knum==1)
  101.                 {
  102.                                 if(key2==0)
  103.                                 {
  104.                                                 Delay1ms(5);
  105.                                                 if(key2==0)
  106.                                                 {
  107.                                                                 djmiao++;
  108.                                                                
  109.                                                                 while(!key2);        
  110.                                                                 if(djmiao==60)
  111.                                                                         djmiao=0;
  112.                                                                 lcd_writecom(0xca);
  113.                                                                 lcd_writedate(djmiao/10+0x30);
  114.                                                                 lcd_writedate(djmiao%10+0x30);
  115.                                                                 lcd_writecom(0xcb);
  116.                                                 }
  117.                                                 
  118.                                 }
  119.                                 if(key3==0)
  120.                                 {
  121.                                                 Delay1ms(5);
  122.                                                 if(key3==0)
  123.                                                 {
  124.                                                                 djmiao--;
  125.                                                                 while(!key3);
  126.                                                                 if(djmiao==255)
  127.                                                                         djmiao=59;
  128.                                                                 lcd_writecom(0xca);
  129.                                                                 lcd_writedate(djmiao/10+0x30);
  130.                                                                 lcd_writedate(djmiao%10+0x30);        
  131.                                                                 lcd_writecom(0xcb);
  132.                                                 }
  133.                                        
  134.                                 }
  135.                 }
  136.                 if(knum==2)
  137.                 {
  138.                                 if(key2==0)
  139.                                 {
  140.                                                 Delay1ms(5);
  141.                                                 if(key2==0)
  142.                                                 {
  143.                                                                 djfen++;
  144.                                                                 while(!key2);
  145.                                                                 if(djfen==60)
  146.                                                                         djfen=0;
  147.                                                                 lcd_writecom(0xc7);
  148.                                                                 lcd_writedate(djfen/10+0x30);
  149.                                                                 lcd_writedate(djfen%10+0x30);        
  150.                                                                 lcd_writecom(0xc8);
  151.                                                 }
  152.                                        
  153.                                 }
  154.                                 if(key3==0)
  155.                                 {
  156.                                                 Delay1ms(5);
  157.                                                 if(key3==0)
  158.                                                 {
  159.                                                                 djfen--;
  160.                                                         while(!key3);
  161.                                                                 if(djfen==255)
  162.                                                                         djfen=59;
  163.                                                                 lcd_writecom(0xc7);
  164.                                                                 lcd_writedate(djfen/10+0x30);
  165.                                                                 lcd_writedate(djfen%10+0x30);        
  166.                                                                 lcd_writecom(0xc8);
  167.                                                 }
  168.                                                 
  169.                                 }
  170.                 }
  171.                 if(knum==3)
  172.                 {
  173.                                 if(key2==0)
  174.                                 {
  175.                                                 Delay1ms(5);
  176.                                                 if(key2==0)
  177.                                                 {
  178.                                                                 djshi++;
  179.                                                                 while(!key2);
  180.                                                                 if(djshi==24)
  181.                                                                         djshi=0;
  182.                                                                 lcd_writecom(0xc4);
  183.                                                                 lcd_writedate(djshi/10+0x30);
  184.                                                                 lcd_writedate(djshi%10+0x30);        
  185.                                                                 lcd_writecom(0xc5);
  186.                                                 }
  187.                                                 
  188.                                 }
  189.                                 if(key3==0)
  190.                                 {
  191.                                                 Delay1ms(5);
  192.                                                 if(key3==0)
  193.                                                 {
  194.                                                                 djshi--;
  195.                                                                 while(!key3);
  196.                                                                 if(djshi==255)
  197.                                                                         djshi=23;
  198.                                                                 lcd_writecom(0xc4);
  199.                                                                 lcd_writedate(djshi/10+0x30);
  200.                                                                 lcd_writedate(djshi%10+0x30);        
  201.                                                                 lcd_writecom(0xc5);
  202.                                                 }
  203.                                        
  204.                                                 
  205.                                 }
  206.                 }
  207.                 if(key4==0)
  208.                 {
  209.                                 Delay1ms(5);
  210.                                 if(key4==0)
  211.                                 {
  212.                                                 s++;
  213.                                                 while(!key4);
  214.                                                 if(s==1)
  215.                                                 {
  216.                                                                 TR1=0;
  217.                                                 }
  218.                                                 if(s==2)
  219.                                                 {
  220.                                                                 TR1=1;
  221.                                                 }
  222.                                                 if(s==3)
  223.                                                 {
  224.                                                                  s=0;
  225.                                                                 TR1=0;
复制代码
Keil代码下载: 单片机stc89c52 1602液晶显示 倒计时分秒 按键可以设置.zip (53.69 KB, 下载次数: 131)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:388477 发表于 2020-3-14 17:58 | 显示全部楼层
admin 发表于 2020-3-13 21:05
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)

最后一次按下key4键,我想程序初始化会清除数据,结果发现后没有清除,已经修改重新上传了,现在可以了
回复

使用道具 举报

ID:921765 发表于 2021-5-15 15:43 | 显示全部楼层
有详细说明吗
回复

使用道具 举报

ID:942134 发表于 2021-6-22 10:00 来自手机 | 显示全部楼层
有详细说明吗
回复

使用道具 举报

ID:384318 发表于 2021-12-9 10:32 | 显示全部楼层
文件打不开
回复

使用道具 举报

ID:262 发表于 2021-12-9 19:32 | 显示全部楼层

工程要用Keil5打开
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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