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

標(biāo)題: 帶詳細(xì)注釋的單片機(jī)鬧鐘程序 [打印本頁(yè)]

作者: 51hei社區(qū)    時(shí)間: 2016-1-16 05:50
標(biāo)題: 帶詳細(xì)注釋的單片機(jī)鬧鐘程序
  1. #include<reg52.h> //頭文件
  2. #include<intrins.h>
  3. #define uchar unsigned char//宏定義
  4. #define uint  unsigned int
  5. sbit key1=P1^0;   //位聲明
  6. sbit key2=P1^1;
  7. sbit key3=P1^2;
  8. sbit fmq=P3^3;//鬧鐘
  9. uchar code table[]={0xc0,0xf9,0xa4,//數(shù)碼管顯示的數(shù)值
  10. 0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
  11. 0x40,0x79,0x24,//帶小數(shù)點(diǎn)的數(shù)值
  12. 0x30,0x19,0x12,0x02,0x78,0x00,0x10};
  13. void jia();   //函數(shù)聲明
  14. void jian();
  15. uchar table_1[6]; //定義數(shù)組,數(shù)組內(nèi)含有6個(gè)數(shù)值
  16. uchar table_2[6];
  17. uchar shi=23,fen=59,miao=50; //顯示初始值
  18. uchar shi1,fen1,miao1,shi2,fen2,miao2,shi3,fen3,miao3;//定義全局變量
  19. uchar flag,flag1,cnt,count;//定義全局變量
  20. void delay(uchar i)  //延時(shí)函數(shù),用于動(dòng)態(tài)掃描數(shù)碼管
  21. {
  22.      uchar x,y;
  23.      for(x=i;x>0;x--)
  24.           for(y=110;y>0;y--);
  25. }
  26. void init()   //初始化函數(shù)
  27. {
  28.      TMOD=0X01; //工作方式1
  29.      TH0=(65536-50000)/256; //定時(shí)時(shí)間為:50ms
  30.      TL0=(65536-50000)%256;
  31.      ET0=1;     //打開(kāi)定時(shí)器
  32.      EA=1;    //開(kāi)總中斷
  33.      TR0=1;    //啟動(dòng)定時(shí)器
  34. }
  35. void display()  //顯示子函數(shù),用于顯示時(shí)間數(shù)值
  36. {
  37.      uchar i,j;
  38.      table_1[0]=miao%10;  //分離秒的各位與十位
  39.      table_1[1]=miao/10;
  40.      table_1[2]=fen%10+11;  //分離分的各位與十位
  41.      table_1[3]=fen/10;
  42.      table_1[4]=shi%10+11; //分離時(shí)的各位與十位
  43.      table_1[5]=shi/10;
  44.      j=0x7f;    //從秒到時(shí)的掃描(位選)
  45.      for(i=0;i<6;i++)
  46.      {
  47.       P2=j;
  48.       P0=table[table_1[i]];//顯示數(shù)值
  49.       delay(10);
  50.       j=_cror_(j,1);//循環(huán)右移
  51.      }
  52. }
  53. void display_1() //顯示子函數(shù),用于顯示定時(shí)時(shí)間
  54. {
  55.      uchar i,j;
  56.      table_2[0]=miao2%10;  //以下含義同上
  57.      table_2[1]=miao2/10;
  58.      table_2[2]=fen2%10+11;
  59.      table_2[3]=fen2/10;
  60.      table_2[4]=shi2%10+11;
  61.      table_2[5]=shi2/10;
  62.      j=0x7f;
  63.      for(i=0;i<6;i++)
  64.      {
  65.           P2=j;
  66.           P0=table[table_2[i]];
  67.           delay(10);
  68.           j=_cror_(j,1);
  69.      }
  70. }
  71. void shijian() //時(shí)間子函數(shù)
  72. {
  73.      if(flag>=20)  //判斷是否到一秒
  74.      {
  75.           flag=0;  //到了,則標(biāo)志位清零
  76.           miao++;  //秒加1
  77.           if(miao>=60) //判斷秒是否到60s
  78.           {
  79.                miao=0;//到了,則清零
  80.                fen++; //分加1
  81.                if(fen>=59) //以下含義同上
  82.                {
  83.                     fen=0;
  84.                     shi++;
  85.                     if(shi>23)
  86.                          shi=0;
  87.                }
  88.           }
  89.      }
  90. }
  91. void key_scan() //鍵盤掃描子函數(shù)
  92. {
  93.      uchar i;   //定義局部變量
  94.      if(key1==0)
  95.      {
  96.           while(!key1)  //防止掉顯
  97.           {
  98.                if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
  99.                {
  100.                     display();
  101.                }
  102.                if(cnt==5||cnt==6||cnt==7)
  103.                {
  104.                     display_1();
  105.                }
  106.           }
  107.           cnt++; //記下按鍵key1按下的次數(shù)
  108.           if(cnt==1) //第一次按下,停止計(jì)數(shù)
  109.           TR0=0;
  110.           if(cnt==2)   //第二次按下
  111.           {
  112.                miao1=miao; //保存秒的數(shù)值
  113.                miao=99;//顯示99,表示可以調(diào)節(jié)秒的數(shù)值了
  114.                for(i=0;i<100;i++)
  115.                 display(); //顯示99
  116.                miao=miao1; //恢復(fù)前一刻秒的數(shù)值
  117.           }
  118.           if(cnt==3) //以下含義同上
  119.           {
  120.                fen1=fen;
  121.                fen=99;
  122.                for(i=0;i<100;i++)
  123.                     display();
  124.                fen=fen1;
  125.           }
  126.           if(cnt==4)
  127.           {
  128.                shi1=shi;
  129.                shi=99;
  130.                for(i=0;i<100;i++)
  131.                     display();
  132.                shi=shi1;
  133.           }
  134.           if(cnt==5)
  135.           {
  136.                miao1=miao2;
  137.                miao2=88;
  138.                for(i=0;i<100;i++)
  139.                     display_1();
  140.                miao2=miao1;
  141.           }
  142.           if(cnt==6)
  143.           {
  144.                fen1=fen2;
  145.                fen2=88;
  146.                for(i=0;i<100;i++)
  147.                     display_1();
  148.                fen2=fen1;
  149.           }
  150.           if(cnt==7)
  151.           {
  152.                shi1=shi2;
  153.                shi2=88;
  154.                for(i=0;i<100;i++)
  155.                     display_1();
  156.                shi2=shi1;
  157.           }
  158.           if(cnt==8) //第八次按下
  159.           {
  160.                TR0=1;  //開(kāi)始計(jì)數(shù)
  161.                cnt=0; //按下次數(shù)清零
  162.           }
  163.      }
  164.      if(key2==0)   //判斷key2是否按下
  165.      {
  166.           while(!key2)  //防止掉顯
  167.           {
  168.                if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
  169.                {
  170.                     display();
  171.                }
  172.                if(cnt==5||cnt==6||cnt==7)
  173.                {
  174.                     display_1();
  175.                }
  176.           }
  177.           jia();//調(diào)用加1的子函數(shù)
  178.      }
  179.      if(key3==0)  //判斷key3是否按下
  180.      {
  181.           while(!key3)  //防止掉顯
  182.           {
  183.                if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
  184.                {
  185.                     display();
  186.                }
  187.                if(cnt==5||cnt==6||cnt==7)
  188.                {
  189.                     display_1();
  190.                }
  191.           }
  192.           jian(); //調(diào)用減1子函數(shù)
  193.      }
  194. }
  195. void jia()   //加1子函數(shù)
  196. {
  197.      if(cnt==2) //判斷key1按下的次數(shù)是否為2
  198.      {
  199.           miao++; //是,則秒加1
  200.           if(miao>59) //判斷秒是否大于59,是,則秒清零
  201.                miao=0;
  202.      }
  203.      if(cnt==3) //以下含義同上
  204.      {
  205.           fen++;
  206.           if(fen>59)
  207.                fen=0;
  208.      }
  209.      if(cnt==4)
  210.      {
  211.           shi++;
  212.           if(shi>23)
  213.                shi=0;
  214.      }
  215.      if(cnt==5)
  216.      {
  217.           miao2++;
  218.           if(miao2>59)
  219.                miao2=0;
  220.      }
  221.      if(cnt==6)
  222.      {
  223.           fen2++;
  224.           if(fen2>59)
  225.                fen2=0;
  226.      }
  227.      if(cnt==7)
  228.      {
  229.           shi2++;
  230.           if(shi2>23)
  231.                shi2=0;
  232.      }
  233. }
  234. void jian()    //減1子函數(shù)
  235. {
  236.      if(cnt==2) //判斷key1按下的次數(shù)是否為2,是則秒減1
  237.      {
  238.           miao--;
  239.           if(miao==255)  //判斷秒是否減到255,是,則秒清零
  240.                miao=59;
  241.      }
  242.      if(cnt==3)
  243.      {
  244.           fen--;
  245.           if(fen==255)
  246.                fen=59;
  247.      }
  248.      if(cnt==4)
  249.      {
  250.           shi--;
  251.           if(shi==255)
  252.                shi=23;
  253.      }
  254.      if(cnt==5)
  255.      {
  256.           miao2--;
  257.           if(miao2==255)
  258.                miao2=59;
  259.      }
  260.      if(cnt==6)
  261.      {
  262.           fen2--;
  263.           if(fen2==255)
  264.                fen2=59;
  265.      }
  266.      if(cnt==7)
  267.      {
  268.           shi2--;
  269.           if(shi2==255)
  270.                shi2=23;
  271.      }
  272. }
  273. void clock() //鬧鈴子函數(shù)
  274. {
  275.      if(miao2==miao) //顯判斷秒的數(shù)值是否相等
  276.           if(fen2==fen)  //是,在判斷分是否相等
  277.                if(shi2==shi) //是,再判斷時(shí)是否相等
  278.                {
  279.                     flag1=0; //是,則標(biāo)志位,flag1清零
  280.                     while(!(flag1==100))  //判斷flag1是否到100
  281.                     {
  282.                          fmq=0;  //沒(méi)有,則,繼續(xù)驅(qū)動(dòng)蜂鳴器響,時(shí)間約為:5s
  283.                          shijian(); //調(diào)用時(shí)間子函數(shù)
  284.                          display(); //調(diào)用顯示子函數(shù)  
  285.                     }
  286.                     fmq=1;//關(guān)閉蜂鳴器
  287.                }
  288. }
  289. void main()
  290. {
  291.      init();//調(diào)用初始化子函數(shù)
  292.      while(1)
  293.      {
  294.           key_scan(); //調(diào)用鍵盤掃描子函數(shù)
  295.           shijian(); //時(shí)間子函數(shù)
  296.           clock(); //鬧鐘子函數(shù)
  297.           //顯示子函數(shù)
  298.           if(cnt==0||cnt==1||cnt==2||cnt==3||cnt==4||cnt==8)
  299.           {
  300.                display();
  301.           }
  302.           if(cnt==5||cnt==6||cnt==7)
  303.           {
  304.                display_1();
  305.           }
  306.      }
  307. }
  308. void time0() interrupt 1 //定時(shí)器0
  309. {
  310.      TH0=(65536-50000)/256; //初值50ms
  311.      TL0=(65536-50000)%256;
  312.      flag++;   //標(biāo)志位
  313.      flag1++;
  314. }
復(fù)制代碼



作者: 雪玉寐影    時(shí)間: 2016-1-21 10:51
這個(gè)注釋比較詳細(xì)了
作者: 榆林上校    時(shí)間: 2016-4-21 10:24
有清晰的注解太好了
作者: 非樂(lè)O98K    時(shí)間: 2018-5-6 22:58
你這個(gè)是無(wú)源的蜂鳴器嗎





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 一区二区三区电影在线观看 | 国产精品免费在线 | 亚洲第一av | 草草视频在线观看 | 成人在线视频一区 | 国产在线一区二区 | 一区二区三区亚洲精品国 | 亚洲国产福利视频 | 一区二区三区亚洲精品国 | 久久久久久国产 | 中文字幕精品一区久久久久 | 在线精品观看 | 欧美日韩免费在线 | 自拍视频网站 | 精品久久久久久久久久久下田 | 久久国产成人 | 欧美极品在线播放 | 午夜视频免费在线观看 | 国产乱码一二三区精品 | 国产激情91久久精品导航 | 久久久久久网 | 欧美激情国产日韩精品一区18 | 免费视频一区二区 | 国产精品视频久久 | 中文字幕亚洲区 | 久久久久av | 国产精品精品 | 国产成人99久久亚洲综合精品 | 中国大陆高清aⅴ毛片 | 天天干 夜夜操 | 欧美久久国产 | 午夜久久久久 | 91视频88av| 亚洲一区视频在线 | 国内精品久久久久久 | 欧美精品久久久久久久久久 | 日韩一级免费看 | 日本精品视频 | 国产精品美女视频 | 久久精品91 | 国产日韩欧美 |