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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1578|回復: 1
收起左側

時鐘——數碼管顯示,大佬解釋下代碼唄

[復制鏈接]
ID:361716 發表于 2018-6-29 13:06 | 顯示全部樓層 |閱讀模式
  1. #include "reg52.h"
  2. #include "intrins.h"

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

  5. uchar code ledcode[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; // 0-9,-
  6. #define codport P0
  7. #define sitport P2
  8. sbit LSA=P2^2;
  9. sbit LSB=P2^1;
  10. sbit LSC=P2^0;
  11. uchar data disbuf[]={10, 10, 10, 10, 10, 10, 10, 10,};
  12. uchar data hou=23,min=59,s=50,num;
  13. uchar naoling[]={0,0,0};
  14. bit flag=0;
  15. sbit beep=P3^1;
  16. //************//延時************//
  17. void delay(unsigned int i)
  18. {
  19.         while(i--);        
  20. }

  21. //************//數碼管動態掃描************//
  22. void display()
  23. {
  24.         unsigned int i;
  25.         for(i=0;i<8;i++)
  26.         {
  27.                 switch(i)
  28.                 {
  29.                         case(0):
  30.                                 LSA=0;LSB=0;LSC=0; break;
  31.                         case(1):
  32.                                 LSA=1;LSB=0;LSC=0; break;
  33.                         case(2):
  34.                                 LSA=0;LSB=1;LSC=0; break;
  35.                         case(3):
  36.                                 LSA=1;LSB=1;LSC=0; break;
  37.                         case(4):
  38.                                 LSA=0;LSB=0;LSC=1; break;
  39.                         case(5):
  40.                                 LSA=1;LSB=0;LSC=1; break;
  41.                         case(6):
  42.                                 LSA=0;LSB=1;LSC=1; break;
  43.                         case(7):
  44.                                 LSA=1;LSB=1;LSC=1; break;
  45.                 }
  46.                 codport = ledcode[disbuf[i]];
  47.                 delay(100);
  48.                 P0=0x00;
  49.         }
  50. }

  51. //************//矩陣按鍵************//
  52. unsigned char Key()
  53. {
  54.         unsigned char Row, Col, k;
  55.         P1 = 0x0f;
  56.         k=P1&0x0f;
  57.         if(k == 0x0f)
  58.                 return -1;
  59.         delay(12);
  60.         k = P1&0x0f;
  61.         if(k == 0x0f)
  62.                 return -1;
  63.         for(Row = 0; Row < 4; Row++)
  64.         {
  65.                 P1 = 0x7f>>Row;
  66.                 k = P1&0x0f;
  67.                 if(k!=0x0f)
  68.                 {
  69.                         Col = 0;
  70.                         while(k&(1<<Col))
  71.                                 Col++;
  72.                         break;
  73.                 }
  74.         }
  75.         while((P1&0x0f)!=0x0f);
  76.         k = Row + Col * 4;
  77.         return k;
  78. }

  79. //************//定時器0中斷函數************//
  80. void time0() interrupt 1
  81. {
  82.         T0 = 55536%256;
  83.         TH0 = 55536/256;
  84.         num = num+1;
  85.         if(num > 99)
  86.         {
  87.                 num = 0;
  88.                 s = s + 1;
  89.                 if(s > 59)
  90.                 {
  91.                         s = 0;
  92.                         min = min + 1;
  93.                 }
  94.                         if(min > 59)
  95.                         {
  96.                                 min = 0;
  97.                                 hou = hou + 1;
  98.                         }
  99.                                 if(hou > 23)
  100.                                 {
  101.                                         hou = 0;
  102.                                 }
  103.                                 if((min==0)&&(s==0))
  104.                                 {
  105.                                         beep=~beep;
  106.                                         delay(300);
  107.                                        
  108.                                 }
  109.                 if(flag == 0)
  110.                 {
  111.                         disbuf[0] = hou/10;
  112.                         disbuf[1] = hou%10;
  113.                         disbuf[2] = 10;
  114.                         disbuf[3] = min/10;
  115.                         disbuf[4] = min%10;
  116.                         disbuf[5] = 10;
  117.                         disbuf[6] = s/10;
  118.                         disbuf[7] = s%10;
  119.                 }
  120.                 else
  121.                 {
  122.                         disbuf[0] = naoling[0]/10;
  123.                         disbuf[1] = naoling[0]%10;
  124.                         disbuf[2] = 10;
  125.                         disbuf[3] = naoling[1]/10;
  126.                         disbuf[4] = naoling[1]%10;
  127.                         disbuf[5] = 10;
  128.                         disbuf[6] = naoling[2]/10;
  129.                         disbuf[7] = naoling[2]%10;
  130.                 }
  131.         }
  132. }

  133. //************//選擇矩陣按鍵************//
  134. void keyProcess(uchar k)
  135. {
  136.         if(k == 0)
  137.         {
  138.                 flag = ~flag;
  139.         }
  140.         if(flag == 0)
  141.         {
  142.                 if(k == 7){
  143.                         if(hou<=24){hou+=10;}
  144.                         else{hou=hou%10;}
  145.                 }
  146.                 if(k == 11){
  147.                         if(hou<=24){hou+=1;}
  148.                         else{hou=hou/10;}
  149.                 }
  150.                 if(k == 6){
  151.                         if(min<=60){min+=10;}
  152.                         else{min=min%10;}
  153.                 }
  154.                 if(k == 10){
  155.                         if(min<=60){min += 1;}
  156.                         else{min=min/10;}
  157.                 }
  158.                 if(k == 5){
  159.                         if(s<=60){s += 10;}
  160.                         else{s=s%10;}
  161.                 }
  162.                 if(k == 9){
  163.                         if(s<=60){s += 1;}
  164.                         else{s=s/10;}
  165.                 }
  166.         }        
  167. }

  168. //************//主函數************//
  169. void main()
  170. {
  171.         uchar k;
  172.         TMOD = 0x01;
  173.         TL0 = 55536%256;
  174.         TH0 = 55536/256;
  175.         ET0 =1;
  176.         EA = 1;
  177.         TR0 = 1;
  178.         while(1)
  179.         {
  180.                 display();
  181.                 k = Key();
  182.                 keyProcess(k);
  183.         }
  184. }
復制代碼
回復

使用道具 舉報

ID:362076 發表于 2018-6-30 09:11 | 顯示全部樓層
可以看到,主函數中保持循環的有這三個函數:
display();//用于顯示某固定數組中的值
Key();//執行矩陣鍵盤掃描,返回定義的鍵值給K
keyProcess(k);//按鍵處理,根據采集的鍵值對時間進行相應的處理
程序不斷運行,調用定時器0每過一段時間刷新時間值,并更新顯示數組,同時根據鍵掃描結果修改顯示的時間值,就醬。

評分

參與人數 1黑幣 +60 收起 理由
admin + 60 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 五月天天丁香婷婷在线中 | 中文字幕日韩在线观看 | 亚洲经典一区 | 久久久久久蜜桃一区二区 | 亚洲成人精品 | 日韩综合一区 | 亚洲欧洲成人av每日更新 | 亚洲欧美中文日韩在线 | 亚洲 精品 综合 精品 自拍 | 羞羞色网站 | 欧美精品一区二区三区四区五区 | 国产精品一区二区久久 | 日本五月婷婷 | 中文字幕日韩一区二区 | 久久国产精品久久国产精品 | 国产精品一二三区 | 91视频进入 | 精品久久久久久久人人人人传媒 | 精国产品一区二区三区 | 国产精品免费视频一区 | 亚洲免费网 | 亚洲91视频 | 日韩在线一区二区三区 | 亚洲自拍一区在线观看 | 午夜一区 | 精品视频在线观看 | 国产成人精品999在线观看 | 黑人巨大精品欧美黑白配亚洲 | 1204国产成人精品视频 | 亚州综合一区 | 日本黄色大片免费 | 午夜电影福利 | 日本三级在线网站 | 视频一区二区在线观看 | 日韩在线观看一区二区三区 | 一区二区电影 | 久久国产精品一区二区三区 | av在线播放国产 | 国产精品一码二码三码在线 | 国产成人久久av免费高清密臂 | 涩涩视频在线观看 |