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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3971|回復: 0
收起左側

簡易單片機電子鐘時鐘 AD格式電路圖+仿真+代碼

[復制鏈接]
ID:434872 發表于 2019-1-6 10:44 | 顯示全部樓層 |閱讀模式
可用于單片機學習
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機源程序如下:
  1. /************************************************************
  2. 作品名字:簡易聲光報時時鐘  
  3. 功能:六位數碼管顯示時分秒,整點半點報時 ,夜間只有燈光提醒   
  4. 二十四小時制
  5. 到整點時長鳴1次,LED閃爍10次  
  6. 到半點時短促鳴響1次,LED閃爍5次  
  7. 制作說明:P0接數碼管段選,P2低6位接數碼管位   
  8.         
  9. **************************************************************/
  10. #include<reg52.h> //頭文件
  11. #define uc unsigned char //宏定義
  12. #define ui unsigned int        //宏定義
  13. sbit LED=P3^3;//定義LED
  14. sbit key1=P3^4;//定義調小時
  15. sbit key2=P3^5;//定義調分鐘
  16. sbit key3=P3^6;//定義秒清零
  17. sbit beep=P3^7;//設蜂鳴器  
  18. uc min,hour,sec,led,num; //無符號字符型變量
  19. bit bdata hourLED,halfLED,hourbeep,halfbeep; //位變量
  20. uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*0,1,2,3,4,5,6,7,8,9,.*///共陰極編碼
  21. void delay(ui x)//1ms延時函數
  22. {
  23.         ui i,j;
  24.         for(i=0;i<x;i++)
  25.         for(j=0;j<121;j++);
  26. }
  27. void display()//掃描顯示函數,高位到低位
  28. {
  29.         P0=tab[hour/10];//給小時的十位送形
  30.         P2=0xdf;//11011111 //位選
  31.         delay(1); //延時動態掃描
  32.         P2=0xff;  //關閉位選

  33.         P0=(tab[hour%10])|0x80;//給第二位后加“點
  34.         P2=0xef;//11101111
  35.         delay(1);
  36.         P2=0xff;

  37.         P0=tab[min/10];
  38.         P2=0xf7;//11110111
  39.         delay(1);
  40.         P2=0xff;

  41.         P0=(tab[min%10])|0x80;//給第四位后加“點”
  42.         P2=0xfb;//11111011
  43.         delay(1);
  44.         P2=0xff;

  45.         P0=tab[sec/10];
  46.         P2=0xfd;//11111101
  47.         delay(1);
  48.         P2=0xff;

  49.         P0=tab[sec%10];
  50.         P2=0xfe;//11111110
  51.         delay(1);
  52.         P2=0xff;
  53. }

  54. void keyscan()//鍵盤掃描,開關接地
  55. {
  56.         if(key1==0)         //如果小時加按鍵按下
  57.         {
  58.                 delay(5);  //延時去抖
  59.                 if(key1==0)         //確定是否按鍵
  60.                 {
  61.                         hour++;         //小時加一
  62.                         if(hour==24) //如果小時等于24
  63.                         hour=0;                //小時歸零
  64.                 }
  65.                 while(!key1) display();//判斷是否松開
  66.         }
  67.         if(key2==0)          //如果分鐘加按鍵按下
  68.         {
  69.                 delay(5);  //延時去抖
  70.                 if(key2==0)        //確定是否按鍵
  71.                 {
  72.                         min++; //分鐘加一
  73.                         if(min==60)// 如果分鐘等于60
  74.                         min=0;        //分鐘歸零
  75.                 }
  76.                 while(!key2) display();//判斷是否松開
  77.         }
  78.         if(key3==0)//判斷調整秒按鍵
  79.         {
  80.                 delay(5);  //延時去抖
  81.                 if(key3==0)        //確定是否按鍵
  82.                 {sec=0;} //秒清零
  83.                 while(!key3) display();//判斷是否松開
  84.         }
  85. }
  86. void strike()//報時函數
  87. {
  88.         if((hour>6)&&(hour<22))//判斷大于6點并且小于22點
  89.         {
  90.                 if(sec==0)//以下判斷是否整點
  91.                 {
  92.                         if(min==0)//如果秒和分都等于0
  93.                         {
  94.                                 hourbeep=1;        //那么蜂鳴器和小燈位開啟
  95.                                 hourLED=1;
  96.                         }
  97.                         else if(min==30)//如果分鐘等于30
  98.                         {
  99.                                 if(num<10)        //閃5下響一聲
  100.                                 halfbeep=1;
  101.                                 halfLED=1;
  102.                         }
  103.                 }
  104.         }
  105.         else //小于6點和大于22點的時候
  106.         {
  107.                 if(sec==0)//以下判斷是否整點
  108.                 {
  109.                         if(min==0)//如果分鐘等于0
  110.                         hourLED=1; //led位開
  111.                         else if(min==30)//如果分鐘=0
  112.                         halfLED=1;//進行半點報時
  113.                 }
  114.         }
  115. }

  116. void init()//初始化函數
  117. {
  118.         sec=0;//一通電,顯示12:30:00,蜂鳴器響一下
  119.         min=30;
  120.         hour=12;
  121.         TMOD=0x01;//設置定時器為定時器0工作方式為1
  122.         TH0=(65536-50000)/256;        //賦初值
  123.         TL0=(65536-50000)%256;  //賦初值
  124.         EA=1; //開總中斷
  125.         ET0=1; //開定時器0中斷
  126.         TR0=1; //啟動定時器0
  127. }

  128. void main()//主函數
  129. {
  130.         init();//初始化
  131.         while(1) //主循環
  132.         {
  133.                 display(); //顯示
  134.                 keyscan();//掃描是否有鍵按下
  135.                 strike();//報時函數
  136.         }
  137. }
  138. void time0() interrupt 1  //定時器中斷
  139. {
  140.         TH0=(65536-50000)/256;//重賦初值
  141.         TL0=(65536-50000)%256;//重賦初值
  142.         num++;
  143.         if((num%10==0)&&(hourLED==1)) //整點報時
  144.         {
  145.                 led++;
  146.                 LED=~LED;//取反實現閃爍
  147.                 if(led==20)        //閃10次
  148.                 {
  149.                         led=0;        //之后關閉閃爍
  150.                         LED=1;
  151.                         hourLED=0;
  152.                 }
  153.         }
  154.         else if((num%10==0)&&(halfLED==1))//半點報時
  155.         {
  156.                 led++;
  157.                 LED=~LED; //取反實現閃爍
  158.                 if(led==10)//閃5次
  159.                 {
  160.                         led=0; //關閉閃爍
  161.                         LED=1;
  162.                         halfLED=0;
  163.                 }
  164.         }
  165.         if(hourbeep==1)        //蜂鳴器響標志位
  166.         {
  167.                 if(num==1)
  168.                 beep=0;
  169.                 if(num==20)         //長響次之后
  170.                 {
  171.                         beep=1;          //關閉
  172.                         hourbeep=0;
  173.                 }
  174.         }
  175.         else if(halfbeep==1) //蜂鳴器響標志位
  176.         {
  177.                 if(num<10)
  178.                 beep=0;
  179.                 if(num==10)         //短響之后
  180.                 {
  181.                         beep=1;         //關閉
  182.                         halfbeep=0;
  183.                 }
  184.         }
  185.         if(num==20)        //計時20次為1s時間
  186.         {
  187.                 num=0;        
  188.                 sec++;        //秒加一
  189.                 if(sec==60)//如果秒等于60
  190.                 {
  191.                         sec=0; //秒歸零
  192.                         min++; //分鐘加一
  193.                         if(min==60)//如果分鐘等于60
  194.                         {
  195.                                 min=0; //分鐘歸零
  196.                                 hour++;        //小時加一
  197.                                 if(hour==24) //如果小時等于24
  198.                                 {hour=0;}//小時歸零
  199.                         }
  200.                 }
  201.         }
  202. }
復制代碼

所有資料51hei提供下載:
簡易時鐘.7z (218.54 KB, 下載次數: 28)





回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩欧美国产成人一区二区 | 精品无码久久久久久国产 | 99精品视频免费观看 | 91精品久久久久久久久久小网站 | 国产精品一二三区在线观看 | 嫩草视频入口 | 久久精品16| 欧美一区2区三区4区公司二百 | 这里有精品 | 奇米影视在线 | 婷婷激情五月网 | 超碰天天 | 欧美成人免费在线 | 久久久国产一区二区三区 | 欧美精品一区二区三区在线 | jdav视频在线观看免费 | 日韩视频一区二区 | 草久在线视频 | 丁香五月缴情综合网 | 日韩精品免费在线 | 一区二区三区国产精品 | 四虎午夜剧场 | 欧美三区视频 | 国产欧美日韩综合精品一区二区 | 欧美性大战久久久久久久蜜臀 | 亚洲在线 | 999热精品| 亚洲免费成人av | 国产美女自拍视频 | 秋霞av国产精品一区 | 久草视频在线播放 | 日本午夜在线视频 | 久久久久国产一级毛片高清网站 | 国产 日韩 欧美 制服 另类 | 亚洲精品一区二区三区中文字幕 | 亚洲成人免费观看 | 免费看国产精品视频 | 亚洲 欧美 日韩在线 | 人人干人人干人人 | 久久婷婷麻豆国产91天堂 | www.久久 |