久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5177|回復: 3
打印 上一主題 下一主題
收起左側

單片機LCD1602顯示的定時鬧鐘程序

[復制鏈接]
跳轉到指定樓層
樓主
  1. #include<reg51.h>
  2. #include<lcd1602.h>


  3. #define uchar unsigned char
  4. #define uint unsigned int


  5. sbit key0=P1^0;
  6. sbit key1=P1^1;
  7. sbit key2=P1^2;
  8. sbit key3=P1^3;


  9. sbit buzzer=P2^5;
  10. sbit relay=P2^3;//buzzer & relay均為低電平工作


  11. sbit led=P2^4;
  12. sbit lamp=P2^5;


  13. uchar code date[]="  H.I.T. CHINA  ";
  14. uchar code time[]="  ALARM  23:58  ";
  15. uchar code bell[]="  ALARM    :    ";


  16. uchar second=40,minute=58,hour=23,counter=0;
  17. uchar bellminute=0,bellhour=0;
  18. uchar buzzerflag,clockflag;//若標志為1,則工作


  19. void ledshow()//led閃爍,標示程序開始運轉
  20. {
  21.   uchar i;


  22.   for(i=0;i<=100;i++)
  23.   {
  24.     led=~led;
  25.         delay(5);
  26.   }
  27. }
  28. uchar keyscan()//鍵盤掃描
  29. {
  30.   uchar keyvalue,temp;
  31.   
  32.   keyvalue=0;
  33.   P1=0xff;
  34.   temp=P1;
  35.   if(~(P1&temp))
  36.   {
  37.     switch(temp)
  38.         {
  39.           case 0xfe:
  40.             keyvalue=1;
  41.             break;
  42.           case 0xfd:
  43.             keyvalue=2;
  44.             break;
  45.           case 0xfb:
  46.             keyvalue=3;
  47.             break;
  48.           case 0xf7:
  49.             keyvalue=4;
  50.             break;
  51.           default:
  52.             keyvalue=0;
  53.             break;
  54.         }
  55.   }


  56.   return keyvalue;
  57. }


  58. void clock_init()//lcd時鐘寫入初始化
  59. {
  60.   uchar i,j;


  61.   for(i=0;i<16;i++)
  62.   {
  63.     write_data(date[i]);[/i][i]
  64.   }
  65.   write_com(0x80+0x40);
  66.   for(j=0;j<16;j++)
  67.   {
  68.     write_data(time[j]);
  69.   }
  70. }


  71. void timer0_init()//中斷初始化
  72. {
  73.   EA=1;
  74.   ET0=1;
  75.   TMOD=0x01;
  76.   TH0=0xd8;//每10m中斷一次
  77.   TL0=0xf0;
  78.   TR0=1;
  79. }


  80. void clock_write()//時鐘實時寫入
  81. {
  82.   write_sfm(0x49,hour);
  83.   write_sfm(0x4c,minute);
  84. }


  85. void key_menu()//總鍵盤掃描函數
  86. {
  87.   unsigned char keyvalue_menu=0,keyvalue_change=0,i,j;


  88.   keyvalue_menu=keyscan();
  89.   if(keyvalue_menu)
  90.   {
  91.     if(keyvalue_menu==1)//按鍵1,走時停止,開始更改時鐘值
  92.         {
  93.           while(~key0);//防抖
  94.           TR0=0;
  95.           do{
  96.             keyvalue_change=keyscan();
  97.                 if(keyvalue_change==1)//按下1鍵,更改小時
  98.                 {
  99.                   while(~key0);
  100.                   if(hour<23)
  101.                   {
  102.                     hour++;
  103.                   }
  104.                   else
  105.                   {
  106.             hour=0;
  107.                   }
  108.                 }
  109.                 else if(keyvalue_change==2)//按下2鍵,更改分鐘
  110.                 {
  111.                   while(~key1);
  112.                   if(minute<59)
  113.                   {
  114.                     minute++;
  115.                   }
  116.                   else
  117.                   {
  118.             minute=0;
  119.                   }
  120.                 }
  121.                 else if(keyvalue_change==4)//按下4鍵,更改響鈴方式
  122.                 {
  123.                   while(~key3);
  124.                   buzzerflag=~buzzerflag;
  125.                   if(buzzerflag)//鬧鈴運轉,3聲
  126.               {
  127.                 buzzer=0;
  128.                     delay(100);
  129.                     buzzer=1;
  130.                     delay(100);
  131.                     buzzer=0;
  132.                     delay(100);
  133.                     buzzer=1;
  134.                     delay(100);
  135.                     buzzer=0;
  136.                     delay(100);
  137.                     buzzer=1;
  138.                     delay(100);
  139.               }
  140.               else//鬧鈴關閉,1聲
  141.               {
  142.                 buzzer=0;
  143.                     delay(100);
  144.                     buzzer=1;
  145.                     delay(100);
  146.               }
  147.                 }
  148.                 write_sfm(0x49,hour);
  149.         write_sfm(0x4c,minute);
  150.           }while(keyvalue_change!=3);//按下3鍵,從新開始走時
  151.           while(~key2==0);
  152.           TR0=1;//調整時間后從新開始走時
  153.         }
  154.         else if(keyvalue_menu==2)//按鍵2,走時繼續,顯示鬧鐘值
  155.         {
  156.           while(~key1);//防抖
  157.           do{
  158.             for(i=0;i<16;i++)
  159.         {
  160.           write_data(date[i]);[/i][i]
  161.         }
  162.           write_com(0x80+0x40);
  163.         for(j=0;j<16;j++)
  164.         {
  165.           write_data(bell[j]);
  166.         }
  167.                 write_sfm(0x49,bellhour);
  168.         write_sfm(0x4c,bellminute);
  169.                 keyvalue_change=keyscan();
  170.             }while(keyvalue_change!=3);//未完成設置前始終顯示當前鬧鐘
  171.                 while(~key2);
  172.         }
  173.         else if(keyvalue_menu==3)//按鍵3,走時繼續,設置鬧鐘值
  174.         {
  175.           while(~key2);
  176.           do{
  177.                 if(keyvalue_change==1)//按下1鍵,更改小時
  178.                 {
  179.                   while(~key0);
  180.                   if(bellhour<23)
  181.                   {
  182.                     bellhour++;
  183.                   }
  184.                   else
  185.                   {
  186.             bellhour=0;
  187.                   }
  188.                 }
  189.                 else if(keyvalue_change==2)//按下2鍵,更改分鐘
  190.                 {
  191.                   while(~key1);
  192.                   if(bellminute<59)
  193.                   {
  194.                     bellminute++;
  195.                   }
  196.                   else
  197.                   {
  198.             bellminute=0;
  199.                   }
  200.                 }
  201.                 else if(keyvalue_change==4)//按下4鍵,更改響鈴方式
  202.                 {
  203.                   while(~key3);
  204.                   buzzerflag=~buzzerflag;
  205.                   if(buzzerflag)//鬧鈴運轉,3聲
  206.               {
  207.                 buzzer=0;
  208.                     delay(100);
  209.                     buzzer=1;
  210.                     delay(100);
  211.                     buzzer=0;
  212.                     delay(100);
  213.                     buzzer=1;
  214.                     delay(100);
  215.                     buzzer=0;
  216.                     delay(100);
  217.                     buzzer=1;
  218.                     delay(100);
  219.               }
  220.               else//鬧鈴關閉,1聲
  221.               {
  222.                 buzzer=0;
  223.                     delay(100);
  224.                     buzzer=1;
  225.                     delay(100);
  226.               }
  227.                 }
  228.                 for(i=0;i<16;i++)  //實時顯示修改結果
  229.         {
  230.           write_data(date[i]);[/i][i]
  231.         }
  232.           write_com(0x80+0x40);
  233.         for(j=0;j<16;j++)
  234.         {
  235.           write_data(bell[j]);
  236.         }
  237.                 write_sfm(0x49,bellhour);
  238.         write_sfm(0x4c,bellminute);
  239.                 keyvalue_change=keyscan();
  240.           }while(keyvalue_change!=3);//按下3鍵,重新開始顯示走時
  241.           while(~key2);//防抖
  242.         }
  243.         else if(keyvalue_menu==4)//按鍵4,關閉/開啟鬧鐘
  244.         {
  245.           while(~key2);
  246.           clockflag=!clockflag;
  247.           if(clockflag)//鬧鐘運轉,3聲
  248.           {
  249. [color=#f4a460]            buzzer=0;[/color]
  250. [color=#f4a460]                delay(100);[/color]
  251. [color=#f4a460]                buzzer=1;[/color]
  252. [color=#f4a460]                delay(100);[/color]
  253. [color=#f4a460]                buzzer=0;[/color]
  254. [color=#f4a460]                delay(100);[/color]
  255. [color=#f4a460]                buzzer=1;[/color]
  256. [color=#f4a460]                delay(100);[/color]
  257. [color=#f4a460]                buzzer=0;[/color]
  258. [color=#f4a460]                delay(100);[/color]
  259. [color=#f4a460]                buzzer=1;[/color]
  260. [color=#f4a460]                delay(100);[/color]
  261.           }
  262.           else//鬧鐘關閉,1聲
  263.           {
  264.             buzzer=0;
  265.                 delay(100);
  266.                 buzzer=1;
  267.                 delay(100);
  268.           }
  269.         }
  270.   }
  271. }


  272. void alarm_clock()
  273. {
  274.   if((minute==bellminute)&&(hour==bellhour)&&(clockflag))//鬧鐘打開且達到預設時間時啟動鬧鐘
  275.   {
  276.     if(buzzerflag)//如果鬧鈴打開
  277.         {
  278.           relay=0;
  279.           buzzer=0;
  280.         }
  281.         else
  282.         {
  283.           relay=0;
  284.           buzzer=1;
  285.         }
  286.   }
  287.   else
  288.   {
  289.     relay=1;
  290.         buzzer=1;
  291.   }
  292. }


  293. void main()
  294. {
  295.   ledshow();//程序啟動,led閃爍
  296.   init1602();//lcd初始化
  297.   clock_init();//時鐘初始化
  298.   timer0_init();//中斷初始化
  299.   while(1)
  300.   {
  301.     clock_write();
  302.         key_menu();
  303.         alarm_clock();
  304.   }
  305. }


  306. void timer0() interrupt 1
  307. {
  308.   if(counter<100)  //判斷時間變換問題
  309.   {
  310.     counter++;
  311.   }
  312.   else
  313.   {
  314.     counter=0;
  315.         led=~led;
  316.         if(second<59)
  317.         {
  318.           second++;
  319.         }
  320.         else
  321.         {
  322.           second=0;
  323.           if(minute<59)
  324.           {
  325.             minute++;
  326.           }
  327.           else
  328.           {
  329.             minute=0;
  330.                 if(hour<23)
  331.                 {
  332.                   hour++;
  333.                 }
  334.                 else
  335.                 {
  336.                   hour=0;
  337.                 }
  338.           }
  339.         }
  340.   }
  341.   TH0=0xd8;//重新加載中斷值
  342.   TL0=0xf0;
  343.   TR0=1;
  344. }
復制代碼


51hei截圖20200229145150.png (57.96 KB, 下載次數: 65)

2-36 LCD顯示的定時鬧鐘

2-36 LCD顯示的定時鬧鐘
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂1 踩
回復

使用道具 舉報

沙發
ID:819841 發表于 2020-10-12 23:48 來自手機 | 只看該作者
程序運行出錯了~
回復

使用道具 舉報

板凳
ID:875201 發表于 2021-1-8 10:19 | 只看該作者
這個L1 12V的在哪里的啊,我找了一遍沒看到,博主看到回復一下我唄,我們要做設計。。
回復

使用道具 舉報

地板
ID:875201 發表于 2021-1-8 10:20 | 只看該作者
那個L112V的元器件在哪里啊
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99re99| 九九久久精品视频 | jlzzjlzz欧美大全 | 久久大陆| 欧美国产一区二区 | 97久久久久久 | 久草网站 | 欧美午夜精品 | 亚洲二区在线 | 欧美黄色一区 | 蜜桃视频在线观看免费视频网站www | 国产精品久久国产精品99 gif | 久久综合九九 | 日日夜夜狠狠操 | 亚洲欧美激情国产综合久久久 | www.国产精品 | 亚洲精品国产综合区久久久久久久 | 男女精品久久 | 日韩在线91 | 中国大陆高清aⅴ毛片 | 狠狠色综合欧美激情 | 亚洲色图第一页 | 久久精品国产a三级三级三级 | 久久久久精 | 亚洲欧美精品国产一级在线 | 亚洲传媒在线 | 三级成人在线 | 免费观看av网站 | 欧美日韩一 | 日韩高清中文字幕 | 国产欧美日韩在线播放 | 91精品国产91久久久久久丝袜 | 最新午夜综合福利视频 | 精品成人69xx.xyz | 国产精品视频一区二区三区不卡 | 日韩中文在线观看 | 羞羞的视频在线看 | 国产精品免费小视频 | 成人久久| 国产精品一区二区三区在线播放 | 国产精品久久久久久久久久久久久 |