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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求解答:用proteus仿真實現時鐘(幫忙看下代碼,已寫好了但是顯示不對

[復制鏈接]
跳轉到指定樓層
樓主

代碼:
  1. /*********************************************************************************************************************
  2. 程序名稱:8位數碼管時鐘程序
  3. 函數功能:在8位數碼管上顯示包含小時,分鐘,秒鐘的C語言程序
  4. 程序版本:V1.0
  5. 調試狀態:成功
  6. 調試時間:2014.10.10
  7. 定時器初值計算方法:【16進制】65535-[(晶振頻率/12)/(1秒/定時的時間)]
  8. **********************************************************************************************************************/
  9. #include<reg52.h>
  10. #include<absacc.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int

  13. /*********************************************************************************************************************/
  14. //函數申明        
  15. void data_deal();  //數據處理函數
  16. void delay(uchar timer);//延時函數
  17. void   H_M_S_circle();//時鐘時分秒循環函數
  18. void display();//送顯示函數
  19. /*********************************************************************************************************************/
  20. unsigned char code table[]={
  21.   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
  22. //  0    1    2    3    4    5    6    7    8    9   
  23. };
  24. /*********************************************************************************************************************/
  25. //全局變量申明
  26. uchar time_flag;
  27. uchar Hour=0,Min=0,second=0;
  28. uchar DispBuf[8];        //定義顯示緩沖區——待顯示的數據(由定時中斷程序自動掃描),全局變量
  29. /*********************************************************************************************************************/
  30. void main()
  31. {
  32.         //啟動定時器
  33.         TMOD |= 0x01; //選擇定時器的工作方式(00表示13位定時計數器,01表示16位定時計數器,10表示8位定時計數器,11停止工作)
  34.         TH0 = 0xDC; //裝載定時器初值高八位(此初值表示定時器定時為10ms)
  35.         TL0 = 0x00; //裝載定時器初值低八位(此初值表示定時器定時為10ms)

  36.         EA = 1;         //開啟總中斷
  37.         ET0 = 1; //開啟定時器中斷允許位
  38.         TR0 = 1; //開啟定時器中斷

  39.         //時鐘顯示
  40.         while(1)
  41.         {
  42.                 data_deal();//調用數據處理函數,提取處理后的數據
  43.                 display(); //調用顯示函數,顯示處理好的數據
  44.         }
  45. }
  46. /*********************************************************************************************************************
  47. 函數名稱:delay(uchar timer)
  48. 函數功能:延時
  49. **********************************************************************************************************************/
  50. void delay(uchar timer)
  51. {
  52.         uchar i,j;
  53.         for(i=0;i<114;i++)
  54.         for(j=0;j<timer;j++)
  55.         ;
  56. }

  57. /*********************************************************************************************************************
  58. 函數名稱:T1IN_time()
  59. 函數功能:利用定時器中斷開啟定時,并計算出1秒鐘
  60. **********************************************************************************************************************/
  61. void T1IN_time() interrupt 1 //(1表示中斷號,0表示外部中斷0,1表示定時器T0,2表示外部中斷1,3表示定時器T1)
  62. {
  63.          uchar count;//申明定時器變量
  64.          TH0 = 0xDC; //裝載定時器初值高八位(此初值表示定時器定時為10ms)
  65.          TL0 = 0x00; //裝載定時器初值低八位(此初值表示定時器定時為10ms)

  66.          count ++; //定時器變量自加1
  67.          if(count == 100) //count自加100次,定時器運行100次初值的時間,即10ms *100 = 1s(1秒鐘)
  68.          {
  69.                  count = 0; //count歸零,等待下一次定時
  70.                 time_flag = 1; //定時器標志位為1,啟動時鐘時分秒循環程序
  71.          }
  72. }
  73. /*********************************************************************************************************************
  74. 函數名稱:H_M_S_circle()
  75. 函數功能:時分秒循環
  76. *************************************************************************************/
  77. void   H_M_S_circle()
  78. {
  79.         if(time_flag == 1)//當定時器標志位為1時,表示時間為1秒
  80.         {
  81.                 time_flag = 0;//標志位歸零
  82.                 second++;          //秒鐘自加1
  83.         }
  84.         if(second == 60) //當秒鐘自加1到60時
  85.         {
  86.                 second = 0; //秒鐘歸零
  87.                 Min ++;                //分鐘自加1
  88.         }
  89.         if(Min == 60) //當分鐘自加1到60時
  90.         {
  91.                 Min = 0; //分鐘歸零
  92.                 Hour ++; //小時自加1
  93.         }
  94.         if(Hour == 24) //當小時自加1到24時
  95.         {
  96.                 Hour = 0; //小時歸零
  97.                 Min = 0;  //分鐘歸零
  98.                 second = 0; //秒鐘歸零
  99.         }        
  100. }
  101. /********************************************************************************
  102. 函數名稱:data_deal()
  103. 函數功能:對數碼管將要顯示的數據進行拆分
  104. **********************************************************************************/
  105. void data_deal()
  106. {
  107.          H_M_S_circle(); //調用時鐘時分秒循環程序,取出時,分。秒的值
  108.          DispBuf[7] = Hour /10; //小時十位
  109.          DispBuf[6] = Hour %10; //小時個位
  110.          DispBuf[5] = 8; //顯示“-”
  111.          DispBuf[4] = Min /10; //分鐘十位
  112.          DispBuf[3] = Min %10; //分鐘個位
  113.          DispBuf[2] = 8; //顯示“-”
  114.          DispBuf[1] = second /10; //秒鐘十位
  115.          DispBuf[0] = second %10; //秒鐘個位
  116. }

  117. void display()
  118. {
  119.         uchar i;
  120.         code unsigned char com[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


  121.         for(i=0;i<8;i++)
  122.         {
  123.                 P0 =com[i]; //i=0表示數碼管的最低位
  124.                 P2        =table[DispBuf[i]];//DispBuf[i]表示拆分后的數據,i表示需要顯示的動態數據
  125.                 delay(1);
  126.         }        P0 = 0x00; //關閉所有數碼管顯示
  127. }
  128. /***************************************END********************************************/
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:275826 發表于 2020-3-24 15:36 | 只看該作者
DispBuf[2] = 8; //顯示“-” 怎么會是顯示“-”,肯定顯示“8”
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产激情一区二区三区 | 免费黄色的视频 | 欧美日韩在线一区二区 | 精品视频一区二区三区 | 免费观看色 | 亚洲国产成人精品女人久久久 | 午夜影院官网 | 99国产在线 | 国内精品视频免费观看 | 国产馆| 国产精品久久精品 | 国产欧美一区二区三区久久手机版 | 中文字幕在线视频免费视频 | 91久久精品国产91久久性色tv | 精品在线一区 | 日韩欧美在线免费观看 | 久久精品视频播放 | 精品国产一区探花在线观看 | 中文字幕视频在线观看 | 精品成人佐山爱一区二区 | 日本欧美在线 | 中文字幕亚洲欧美日韩在线不卡 | 99re在线播放 | 日本在线网站 | 91国内在线观看 | 日韩欧美一区在线 | 99小视频 | 国产一区二区久久 | 久久久久久亚洲国产精品 | 黄色一级特级片 | 在线免费看毛片 | 日韩福利| 国产一区二区精品在线观看 | 逼逼视频 | 精品国产一区二区三区观看不卡 | 免费a级毛片在线播放 | 精品国产一区二区三区成人影院 | 日本一区二区三区四区 | 成人av一区 | 精品亚洲一区二区三区 | 国产在线色 |