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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3119|回復(fù): 2
收起左側(cè)

關(guān)于單片機(jī)秒表的一個(gè)程序,但是數(shù)碼管只顯示一個(gè)0

[復(fù)制鏈接]
ID:309719 發(fā)表于 2018-5-26 13:32 | 顯示全部樓層 |閱讀模式

關(guān)于秒表的一個(gè)程序,但是數(shù)碼管只顯示一個(gè)0,求各位幫忙看一下。

單片機(jī)源碼:
  1. #include<reg51.h>

  2. sbit K1 = P1^0;
  3. sbit K2 = P1^1;
  4. sbit K3 = P1^2;
  5. sbit K4 = P1^3;

  6. unsigned char code LedChar[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. unsigned char LedBuff[] = {0x00,0x00,0x00,0x00,0x00,0x00};
  8. unsigned char KeySta[] = {1,1,1,1};

  9. bit StopwatchRunning = 0;
  10. bit StopwatchRefresh = 1;
  11. unsigned char DecimalPart = 0;
  12. unsigned int IntegerPart = 0;
  13. unsigned char T0RH = 0;
  14. unsigned char T0RL = 0;

  15. void ConfigTimer0(unsigned int ms);
  16. void StopwatchDisplay();
  17. void KeyDriver();

  18. void main()
  19. {
  20.         EA = 1;
  21.         P1 = 0xFE;
  22.         ConfigTimer0(2);

  23.         while(1)
  24.         {
  25.                 if(StopwatchRefresh)
  26.                 {
  27.                         StopwatchRefresh = 0;
  28.                         StopwatchDisplay();
  29.                 }
  30.                 KeyDriver();
  31.         }
  32. }
  33. void ConfigTimer0(unsigned int ms)
  34. {
  35.         unsigned long tmp;
  36.         
  37.         tmp = 11059200 / 12;
  38.         tmp = (tmp*ms) /1000;
  39.         tmp = 65536 -tmp;
  40.         tmp = tmp + 18;
  41.         T0RH = (unsigned char)(tmp>>8);
  42.         T0RL = (unsigned char)tmp;
  43.         TMOD &= 0xF0;
  44.         TMOD |= 0x01;
  45.         TH0 = T0RH;
  46.         TL0 = T0RL;
  47.         ET0 = 1;
  48.         TR0 = 1;
  49. }
  50. void StopwatchDisplay()
  51. {
  52.         signed char i;
  53.         unsigned char buf[6];

  54.         LedBuff[0] = LedChar[DecimalPart % 10];
  55.         LedBuff[1] = LedChar[DecimalPart / 10];
  56.         buf[0] = IntegerPart % 10;
  57.         buf[1] = (IntegerPart / 10) % 10;
  58.         buf[2] = (IntegerPart / 100) % 10;
  59.         buf[3] = (IntegerPart / 1000) % 10;
  60.         for(i = 3;i>=1;i--)
  61.         {
  62.                 if(buf[i] == 0)[/i][i]
  63.                         LedBuff[i+2] = 0x00;
  64.                 else
  65.                         break;
  66.         }
  67.         for(;i>=0;i--)
  68.         {
  69.                 LedBuff[i+2] = LedChar[buf[i]];[/i][i]
  70.         }
  71.         LedBuff[2] &= 0x80;
  72. }                          
  73. void StopwatchAction()
  74. {
  75.         if(StopwatchRunning)
  76.                 StopwatchRunning = 0;
  77.         else
  78.                 StopwatchRunning = 1;
  79. }
  80. void StopwatchReset()
  81. {
  82.         StopwatchRunning = 0;
  83.         DecimalPart = 0;
  84.         IntegerPart = 0;
  85.         StopwatchRefresh = 1;
  86. }
  87. void KeyDriver()
  88. {
  89.         unsigned char i;
  90.         static unsigned char backup[4] = {1,1,1,1};

  91.         for(i=0;i<4;i++)
  92.         {
  93.                 if(backup[i] != KeySta[i])[/i][/i][i][i]
  94.                 {
  95.                         if(backup[i] != 0)[/i][i]
  96.                         {
  97.                                 if(i == 1)
  98.                                         StopwatchReset();
  99.                                 else if(i == 2)
  100.                                         StopwatchReset();
  101.                         }
  102.                 }
  103.                 backup[i] = KeySta[i];[/i][/i][i][i]
  104.         }
  105. }
  106. void KeyScan()
  107. {
  108.         unsigned char i;
  109.         static unsigned char keybuf[] = {0x00,0x00,0x00,0x00};

  110.         keybuf[0] = (keybuf[0]<<1) | K1;
  111.         keybuf[1] = (keybuf[1]<<1) | K2;
  112.         keybuf[2] = (keybuf[2]<<1) | K3;
  113.         keybuf[3] = (keybuf[3]<<1) | K4;
  114.         for(i = 0;i<4;i++)
  115.         {
  116.                 if(keybuf[i] == 0x00)[/i][i]
  117.                 {
  118.                         KeySta[i] = 0;[/i][i]
  119.                 }
  120.                 else if(keybuf[i] == 0xff)[/i][i]
  121.                 {
  122.                         KeySta[i] =1;[/i][i]
  123.                 }
  124.         }
  125. }
  126. void LedScan()
  127. {
  128.         static unsigned char i = 0;

  129.         P0 =0X00;
  130.         P2 = (P2 &0xF8) | i;
  131.         P0 = LedBuff[i];[/i][i]
  132.         if(i<5)
  133.                 i++;
  134.         else
  135.                 i = 0;
  136. }
  137. void StopwatchCount()
  138. {
  139.         if(StopwatchRunning)
  140.         {
  141.                 DecimalPart++;
  142.                 if(DecimalPart >= 100)
  143.                 {
  144.                         DecimalPart = 0;
  145.                         IntegerPart++;
  146.                         if(IntegerPart >= 10000)
  147.                         {
  148.                                  IntegerPart = 0;
  149.                         }
  150.                 }
  151.                 StopwatchRefresh = 1;
  152.         }
  153. }
  154. void InterruptTimer0() interrupt 1
  155. {
  156.         static unsigned char tmr10ms = 0;

  157.         TH0 = T0RH;
  158.         TL0 = T0RL;
  159.         LedScan();
  160.         KeyScan();

  161.         tmr10ms++;
  162.         if(tmr10ms >= 5)
  163.         {
  164.                 tmr10ms = 0;
  165.                 StopwatchCount();
  166.         }
  167. }
復(fù)制代碼

回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-5-26 18:26 | 顯示全部樓層
本帖最后由 zl2168 于 2018-5-26 18:28 編輯

給你介紹一個(gè)正確有效看得懂的案例,自己對照查錯(cuò)吧!
實(shí)例93  99.9秒秒表
實(shí)例95 99.9秒秒表.rar (38.86 KB, 下載次數(shù): 6)
Proteus仿真一下,確認(rèn)有效。 99.9秒秒表.jpg
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,書中電路和程序設(shè)計(jì)有詳細(xì)說明,電路與程序真實(shí)可靠可信可行,程序語句條條有注解。若需99.99秒,硬件電路增加一位595。軟件程序增加0.01s10ms計(jì)數(shù)器,并修改相應(yīng)計(jì)數(shù)顯示程序。
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-5-26 18:29 | 顯示全部樓層
本帖最后由 zl2168 于 2018-5-26 18:35 編輯

實(shí)例96  能預(yù)置初值的倒計(jì)時(shí)秒表
Proteus仿真一下,確認(rèn)有效。
實(shí)例96 能設(shè)置初值的倒計(jì)時(shí)秒表.rar (40 KB, 下載次數(shù): 5)
能預(yù)置初值的倒計(jì)時(shí)秒表.jpg
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,書中電路和程序設(shè)計(jì)有詳細(xì)說明,電路與程序真實(shí)可靠可信可行,程序語句條條有注解。
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 成人天堂 | 天天操夜夜拍 | 亚洲精品区 | 免费的色网站 | 99热精品在线观看 | 91一区二区三区在线观看 | 久久精品无码一区二区三区 | 深夜福利亚洲 | 国产在线97 | 欧美日韩一区不卡 | 久久久www成人免费无遮挡大片 | 亚洲一二三区在线观看 | 成人免费在线 | 亚洲精品黄 | 黄色毛片免费视频 | 一本大道久久a久久精二百 国产成人免费在线 | 美女逼网站| 一区二区三区国产精品 | 91麻豆精品国产91久久久更新资源速度超快 | 九色网址 | 午夜ww| 亚洲国产欧美在线 | 91精品国产乱码久久久久久久 | 国产sm主人调教女m视频 | 亚洲五码久久 | 欧美一区二区三区在线 | 欧美成人手机视频 | 精品久久久久香蕉网 | 国产欧美在线播放 | 国产成人久久av免费高清密臂 | 国产欧美精品一区二区三区 | 99久久精品免费看国产免费软件 | 日韩一区二区三区四区五区六区 | 国产精品国色综合久久 | 奇米av | 国产一级毛片精品完整视频版 | 午夜国产一级 | 欧美三级在线 | 亚洲在线一区 | 久久在看 | 操久久 |