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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5177|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)LCD1602顯示的定時(shí)鬧鐘程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
  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;//若標(biāo)志為1,則工作


  19. void ledshow()//led閃爍,標(biāo)示程序開(kāi)始運(yùn)轉(zhuǎn)
  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時(shí)鐘寫(xiě)入初始化
  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()//時(shí)鐘實(shí)時(shí)寫(xiě)入
  81. {
  82.   write_sfm(0x49,hour);
  83.   write_sfm(0x4c,minute);
  84. }


  85. void key_menu()//總鍵盤掃描函數(shù)
  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,走時(shí)停止,開(kāi)始更改時(shí)鐘值
  92.         {
  93.           while(~key0);//防抖
  94.           TR0=0;
  95.           do{
  96.             keyvalue_change=keyscan();
  97.                 if(keyvalue_change==1)//按下1鍵,更改小時(shí)
  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)//鬧鈴運(yùn)轉(zhuǎn),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//鬧鈴關(guān)閉,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鍵,從新開(kāi)始走時(shí)
  151.           while(~key2==0);
  152.           TR0=1;//調(diào)整時(shí)間后從新開(kāi)始走時(shí)
  153.         }
  154.         else if(keyvalue_menu==2)//按鍵2,走時(shí)繼續(xù),顯示鬧鐘值
  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);//未完成設(shè)置前始終顯示當(dāng)前鬧鐘
  171.                 while(~key2);
  172.         }
  173.         else if(keyvalue_menu==3)//按鍵3,走時(shí)繼續(xù),設(shè)置鬧鐘值
  174.         {
  175.           while(~key2);
  176.           do{
  177.                 if(keyvalue_change==1)//按下1鍵,更改小時(shí)
  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)//鬧鈴運(yùn)轉(zhuǎn),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//鬧鈴關(guān)閉,1聲
  221.               {
  222.                 buzzer=0;
  223.                     delay(100);
  224.                     buzzer=1;
  225.                     delay(100);
  226.               }
  227.                 }
  228.                 for(i=0;i<16;i++)  //實(shí)時(shí)顯示修改結(jié)果
  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鍵,重新開(kāi)始顯示走時(shí)
  241.           while(~key2);//防抖
  242.         }
  243.         else if(keyvalue_menu==4)//按鍵4,關(guān)閉/開(kāi)啟鬧鐘
  244.         {
  245.           while(~key2);
  246.           clockflag=!clockflag;
  247.           if(clockflag)//鬧鐘運(yùn)轉(zhuǎn),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//鬧鐘關(guān)閉,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))//鬧鐘打開(kāi)且達(dá)到預(yù)設(shè)時(shí)間時(shí)啟動(dòng)鬧鐘
  275.   {
  276.     if(buzzerflag)//如果鬧鈴打開(kāi)
  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();//程序啟動(dòng),led閃爍
  296.   init1602();//lcd初始化
  297.   clock_init();//時(shí)鐘初始化
  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)  //判斷時(shí)間變換問(wèn)題
  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. }
復(fù)制代碼


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

2-36 LCD顯示的定時(shí)鬧鐘

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

使用道具 舉報(bào)

沙發(fā)
ID:819841 發(fā)表于 2020-10-12 23:48 來(lái)自手機(jī) | 只看該作者
程序運(yùn)行出錯(cuò)了~
回復(fù)

使用道具 舉報(bào)

板凳
ID:875201 發(fā)表于 2021-1-8 10:19 | 只看該作者
這個(gè)L1 12V的在哪里的啊,我找了一遍沒(méi)看到,博主看到回復(fù)一下我唄,我們要做設(shè)計(jì)。。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品综合 | 网站黄色在线免费观看 | 一区二区三区精品 | 国产精品久久久乱弄 | 国产精品美女久久久久久免费 | 国产精品久久久久久婷婷天堂 | 日韩精品无码一区二区三区 | 国产精品美女久久久久久免费 | 日韩欧美国产一区二区三区 | 国产精品免费高清 | 国产日韩欧美91 | 精品免费国产一区二区三区 | 欧美久久久久久久久 | 亚洲精品久久嫩草网站秘色 | 在线观看国产视频 | 久久精品网 | 日韩精品视频在线 | 日日爱夜夜操 | 国产精品xxxx | 久久看片| 在线亚洲精品 | 91在线资源 | 高清欧美性猛交xxxx黑人猛交 | 精品国产乱码久久久久久图片 | 国产亚洲一区二区三区 | 在线观看黄色大片 | 久久久久久一区 | 亚洲一区二区三区免费视频 | 伊人久久综合 | 色姑娘综合网 | 久久久久久91 | 成人欧美一区二区三区在线播放 | 国产一区不卡 | 欧美在线视频一区二区 | 成人99| 国产一区二区三区免费 | 日韩中文字幕av | 天天艹天天干天天 | 中文字幕精品一区久久久久 | 久久久一二三区 | h网站在线观看 |