欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

4位共陰極數碼管秒表設計仿真與程序

  [復制鏈接]
跳轉到指定樓層
樓主
單片機課設,數字秒表設計,計時9:59:9
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"

  3. #define GPIO_DIG   P2                           //數據端

  4. #define uchar unsigned char                   //重命名關鍵字
  5. #define uint unsigned int                   //重命名關鍵字

  6. sbit K1=P3^0;                //開始
  7. sbit K2=P3^1;                //暫停
  8. sbit K3=P3^2;                //復位

  9. sbit L1=P1^4;                //數碼管1位選
  10. sbit L2=P1^5;                //數碼管2位選
  11. sbit L3=P1^6;                //數碼管3位選
  12. sbit L4=P1^7;                //數碼管4位選

  13. sbit beep=P1^0;

  14. unsigned char code DIG_CODE[10] = {
  15. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  16. 0x7f,0x6f};
  17. //0、1、2、3、4、5、6、7、8、9的顯示碼
  18. unsigned char code DIG_CODE2[10] = {
  19. 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,
  20. 0xff,0xef};
  21. //0、1、2、3、4、5、6、7、8、9帶小數點的顯示碼
  22. unsigned char DisplayData[4];
  23. //用來存放要顯示的8位數的值

  24. uchar i,m;           //定義變量
  25. uchar min=0;
  26. long int k=0;
  27. uint Second_Counts;                   //定義變量

  28. void DigDisplay()                   //數碼管顯示子函數
  29. {
  30.         unsigned int j;                   //定義變量

  31.         L1=0;                          //位選
  32.         L2=1;
  33.         L3=1;
  34.         L4=1;
  35.         GPIO_DIG = DisplayData[0];     //發送段碼
  36.         j = 1000;                                                   //掃描間隔時間設定
  37.         while(j--);       
  38.         L1=1;                           //消隱
  39.         L2=1;
  40.         L3=1;
  41.         L4=1;               

  42.         L1=1;
  43.         L2=0;                          //位選
  44.         L3=1;
  45.         L4=1;
  46.         GPIO_DIG = DisplayData[1];     //發送段碼
  47.         j = 1000;                                                   //掃描間隔時間設定
  48.         while(j--);       
  49.         L1=1;                           //消隱
  50.         L2=1;
  51.         L3=1;
  52.         L4=1;      

  53.         L1=1;
  54.         L2=1;
  55.         L3=0;                           //位選
  56.         L4=1;
  57.         GPIO_DIG = DisplayData[2];     //發送段碼
  58.         j = 1000;                                                   //掃描間隔時間設定
  59.         while(j--);       
  60.         L1=1;                           //消隱
  61.         L2=1;
  62.         L3=1;
  63.         L4=1;      

  64.         L1=1;
  65.         L2=1;
  66.         L3=1;
  67.         L4=0;                           //位選
  68.         GPIO_DIG = DisplayData[3];     //發送段碼
  69.         j = 1000;                                                   //掃描間隔時間設定
  70.         while(j--);       
  71.         L1=1;                           //消隱
  72.         L2=1;
  73.         L3=1;
  74.         L4=1;      
  75.        
  76. }

  77. void main()
  78. {
  79. //        Second_Counts=570;
  80. //        min=9;
  81.         GPIO_DIG = 0x00;                 //初始化數據口
  82.    
  83.         TMOD=0x01;                                //定時器0方式1
  84.         TH0=(65536-50000)/256;                //定時器0:50ms
  85.         TL0=(65536-50000)%256;
  86.         TH1=(65536-2000)/256;               
  87.         TL1=(65536-2000)%256;
  88.         EA=1;   
  89. //        ET1=1;
  90. //        TR1=1;         
  91.     while (1)
  92.     {
  93.                 if(K1==0)
  94.                 {
  95.                         ET0=1;
  96.                         TR0=1;                //開啟定時器
  97.                 }
  98.                 if(K2==0)
  99.                 {
  100.                         ET0=0;
  101.                         TR0=0;                //關閉定時器
  102.                 }
  103.                 if(K3==0)                                                 //復位按鍵按下時
  104.                 {
  105.                         ET0=0;
  106.                         TR0=0;                //關閉定時器
  107.                         DisplayData[0] = DIG_CODE2[0];          //清零顯示
  108.                         DisplayData[1] = DIG_CODE[0];          //清零顯示
  109.                         DisplayData[2] = DIG_CODE2[0];          //清零顯示
  110.                         DisplayData[3] = DIG_CODE[0];          //清零顯示
  111.                         i=0;                                                          //清零計數
  112.                         Second_Counts=0;                                  //清零秒
  113.                 }

  114.                 if((Second_Counts>0)&&(m==0))
  115.                 {
  116.                         ET1=1;
  117.                         TR1=1;   
  118.                 }

  119.                 if((min==9)&&(Second_Counts==599))
  120.                 {
  121.                         ET0=0;
  122.                         TR0=0;                //關閉定時器
  123.                         ET1=1;
  124.                         TR1=1;
  125.                 }

  126.                 DigDisplay();                 //執行數碼管顯示函數
  127.     }
  128. }


  129. //T0中斷函數
  130. void DSY_Refresh() interrupt 1
  131. {
  132.         TH0=(65536-50000)/256;                //恢復定時器0初值
  133.         TL0=(65536-50000)%256;
  134.         i++;
  135.         m++;
  136.         if(m>=20)
  137.         {
  138.                 m=0;
  139.         }
  140.         if(i==2)                                //50ms*2=0.1s轉換狀態
  141.         {
  142.                 i=0;
  143.                 Second_Counts++;
  144.                 if(Second_Counts>=600)
  145.                 {
  146.                         Second_Counts=0;
  147.                         min++;
  148.                 }

  149.                 DisplayData[0] = DIG_CODE2[min%10];          //顯示百位
  150.                 DisplayData[1] = DIG_CODE[Second_Counts/100%10];          //顯示十位
  151.                 DisplayData[2] = DIG_CODE2[Second_Counts/10%10];          //顯示個位
  152.                 DisplayData[3] = DIG_CODE[Second_Counts%10];                  //顯示小數點后一位
  153. //                if(Second_Counts==10000) Second_Counts=0;                          //當秒計數到1000秒又變為0
  154. ……………………

  155. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
4位共陰極數碼管秒表hangqunli.zip (131.85 KB, 下載次數: 416)


評分

參與人數 2黑幣 +51 收起 理由
簡——亦 + 1 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏13 分享淘帖 頂4 踩
回復

使用道具 舉報

沙發
ID:242057 發表于 2018-1-9 09:33 | 只看該作者
要用Proteus7.5才能成功

51hei.png (12.26 KB, 下載次數: 92)

51hei.png
回復

使用道具 舉報

無效樓層,該帖已經被刪除
地板
ID:601025 發表于 2019-8-17 11:10 | 只看該作者
不錯,正好有用
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
6#
ID:616844 發表于 2019-9-26 18:56 | 只看該作者
有用~~
回復

使用道具 舉報

7#
ID:616962 發表于 2019-11-10 12:04 | 只看該作者
我想問一下作者,P0口來輸出段碼可以嗎
回復

使用道具 舉報

8#
ID:641049 發表于 2019-11-13 11:32 | 只看該作者
我為什么用protus打不開
回復

使用道具 舉報

9#
ID:142270 發表于 2019-11-13 14:33 | 只看該作者
很厲害呀
回復

使用道具 舉報

10#
無效樓層,該帖已經被刪除
11#
ID:622056 發表于 2020-1-6 18:12 | 只看該作者
卑微的我,想知道共陽極的加上能夠記錄歷史數據的,大佬能不能幫幫我
回復

使用道具 舉報

12#
ID:436945 發表于 2020-1-7 15:57 | 只看該作者
樓主真厲害,思路奇特,程序優美,電路簡潔。
回復

使用道具 舉報

13#
ID:681573 發表于 2020-4-16 11:55 | 只看該作者
算法簡單易懂,很不錯
回復

使用道具 舉報

14#
ID:761075 發表于 2020-5-25 20:48 | 只看該作者
很厲害棒棒的
回復

使用道具 舉報

15#
ID:716999 發表于 2020-6-14 15:20 | 只看該作者
為什么我的運行出來不對呀
回復

使用道具 舉報

16#
無效樓層,該帖已經被刪除
17#
無效樓層,該帖已經被刪除
18#
無效樓層,該帖已經被刪除
19#
ID:853485 發表于 2020-12-2 23:12 | 只看該作者
牛逼很不錯,太好用了
回復

使用道具 舉報

20#
無效樓層,該帖已經被刪除
21#
無效樓層,該帖已經被刪除
22#
ID:315554 發表于 2020-12-15 09:42 | 只看該作者
學習了,謝謝分享,很詳細的程序
回復

使用道具 舉報

23#
無效樓層,該帖已經被刪除
24#
無效樓層,該帖已經被刪除
25#
ID:120677 發表于 2021-1-7 08:42 | 只看該作者
代碼寫得規范哦  參考參考
回復

使用道具 舉報

26#
無效樓層,該帖已經被刪除
27#
無效樓層,該帖已經被刪除
28#
無效樓層,該帖已經被刪除
29#
無效樓層,該帖已經被刪除
30#
ID:236933 發表于 2022-6-3 10:46 | 只看該作者
程序重新編譯,仿真無法運行,程序是有問題的
回復

使用道具 舉報

31#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表