找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6917|回復(fù): 5
收起左側(cè)

單片機(jī)stc89c52 1602液晶顯示 倒計(jì)時(shí)分秒 按鍵可以設(shè)置

  [復(fù)制鏈接]
ID:388477 發(fā)表于 2020-3-13 16:06 | 顯示全部樓層 |閱讀模式
       做這個(gè)倒計(jì)時(shí),主要家里的電磁爐經(jīng)常燒熱水,最近一次就燒干鍋了,就壞掉了,拆開之后線盤燒斷了,換了一個(gè)就好了,后來我就發(fā)現(xiàn)有定時(shí)功能,每次燒水就定時(shí)就好了,用起來挺方便,所以就想著做一個(gè),先在論壇里找一些相關(guān)大家分享的,同時(shí)正好也是看了郭師傅的視頻后,自己照著寫了一個(gè)倒計(jì)時(shí),分享給大家,如果有問題歡迎指正。
功能:按下key1鍵進(jìn)行時(shí)間設(shè)定,同時(shí)時(shí)分秒設(shè)置完后,最后一次也是開始鍵
          按下key2鍵進(jìn)行時(shí)分秒的加
          按下key3鍵進(jìn)行時(shí)分秒的減
          按下key4鍵會(huì)暫停,第二次按會(huì)繼續(xù)開始,第三次按下就復(fù)位
51hei圖片_20200313160627.jpg 1.jpg
單片機(jī)源程序如下:
  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;  //設(shè)置鍵
  7. sbit key2=P2^1;  //加鍵
  8. sbit key3=P2^2;  //減鍵
  9. sbit key4=P2^3;  //第一次暫停,第二次啟動(dòng),第三次初始化
  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);  //開顯示不顯示光標(biāo)
  22.           lcd_writecom(0x06);  //寫一個(gè)指針加1
  23.           lcd_writecom(0x01);  //清屏
  24.           lcd_writecom(0x80);  //設(shè)置數(shù)據(jù)指針起點(diǎn)
  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;                //設(shè)置定時(shí)器模式
  39.         TL1 = 0x00;                //設(shè)置定時(shí)初值
  40.         TH1 = 0xB8;                //設(shè)置定時(shí)初值
  41.         TR1 = 0;                //定時(shí)器1開始計(jì)時(shí)
  42.          ET1=1;                 //定時(shí)器1中斷
  43.          EA=1;                   //打開總中斷
  44. }

  45. /*******************************************************************************
  46. * 函 數(shù) 名         : Delay1ms
  47. * 函數(shù)功能                   : 延時(shí)函數(shù),延時(shí)1ms
  48. * 輸    入         : c
  49. * 輸    出         : 無
  50. * 說    名         : 該函數(shù)是在22.1184MHZ晶振下,12分頻單片機(jī)的延時(shí)。
  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;   //啟動(dòng)定時(shí)器
  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;
復(fù)制代碼
Keil代碼下載: 單片機(jī)stc89c52 1602液晶顯示 倒計(jì)時(shí)分秒 按鍵可以設(shè)置.zip (53.69 KB, 下載次數(shù): 133)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:388477 發(fā)表于 2020-3-14 17:58 | 顯示全部樓層
admin 發(fā)表于 2020-3-13 21:05
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)

最后一次按下key4鍵,我想程序初始化會(huì)清除數(shù)據(jù),結(jié)果發(fā)現(xiàn)后沒有清除,已經(jīng)修改重新上傳了,現(xiàn)在可以了
回復(fù)

使用道具 舉報(bào)

ID:921765 發(fā)表于 2021-5-15 15:43 | 顯示全部樓層
有詳細(xì)說明嗎
回復(fù)

使用道具 舉報(bào)

ID:942134 發(fā)表于 2021-6-22 10:00 來自觸屏版 | 顯示全部樓層
有詳細(xì)說明嗎
回復(fù)

使用道具 舉報(bào)

ID:384318 發(fā)表于 2021-12-9 10:32 | 顯示全部樓層
文件打不開
回復(fù)

使用道具 舉報(bào)

ID:262 發(fā)表于 2021-12-9 19:32 | 顯示全部樓層

工程要用Keil5打開
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表