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

標題: 單片機倒計時秒表系統實驗程序Proteus仿真 [打印本頁]

作者: 934609429    時間: 2020-12-19 11:12
標題: 單片機倒計時秒表系統實驗程序Proteus仿真
電路圖如圖1所示,通過51單片機的P1作為段口,P0作為位口構成2位LED動態顯示的硬件電路。P2.0、P2.1連接兩個按鍵K0、K1分別用于調整初始時間的+1和-1,P3.0連接LED燈,P3.2連接復位按鍵,P3.3連接啟動按鍵。
要求實現一倒計時秒表,啟動后顯示初始時間20,可以調整初始時間。調整結束后按下啟動鍵,開始倒計時。在倒計時過程中調整初始時間按鍵無效。倒計時時間到,顯示00,并且LED燈亮。整個過程中都可以復位,復位后顯示初始時間,LED燈滅。圖1  倒計時秒表的電路原理圖

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg51.h>
  2. unsigned  char code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共陰數碼管 0-9
  3. sbit led=P3^0;
  4. sbit s1=P0^0;
  5. sbit s2=P0^1;
  6. sbit k0=P2^0;
  7. sbit k1=P2^1;
  8. int sec=0,i,a,b=20,key1;
  9. /*-----延遲函數-------*/
  10. void delay(int z)
  11. {
  12.         while(z-->0);
  13. }
  14. /*-----顯示函數-------*/
  15. void display(int n)
  16. {
  17.         if(n>0)
  18.         {
  19.         s2=1;s1=0;          //顯示十位
  20.         P1=tab[n/10];  //除10,取十位數值
  21.         delay(100);           //延遲顯示
  22.         s1=1;s2=0;           //顯示個位
  23.         P1=tab[n%10];  //求余,取個位數值
  24.         delay(100);           //延遲
  25.         }
  26.         else
  27.         {                                //當輸入值小于0,顯示0
  28.         s2=1;s1=0;            //顯示十位
  29.         P1=tab[0];            //除10,取十位數值
  30.         delay(100);            //延遲
  31.         s1=1;s2=0;            //顯示個位
  32.         P1=tab[0];                //求余,取個位數值
  33.         delay(100);            //延遲顯示
  34.         }                          
  35. }
  36. /*-----外部中斷0中斷服務函數----------*/
  37. void RESET() interrupt        0
  38. {
  39.         sec=0;         //恢復初始值
  40.         b=20;         //恢復初始值
  41.         TR0=0;         //關閉定時器
  42.        
  43. }
  44. /*-----外部中斷1中斷服務函數----------*/
  45. void START() interrupt        2
  46. {
  47.         TR0=1;        //打開定時器
  48. }
  49. /*-----定時器T0服務函數,計時功能----------*/
  50. void timer0() interrupt 1
  51. {
  52.         i--;   //50ms時間到
  53.         TH0=(65536-50000)/256;        //存放高8位,50ms
  54.         TL0=(65536-50000)%256;          //存放低8位
  55.         if(i==0)
  56.         {
  57.         i=20;            //1s計數
  58.         sec++;                        //軟件計數1s
  59.         }
  60. }
  61. /*------鍵值掃描函數----------*/
  62. void key()
  63. {       
  64.         k0=1;k1=1;                    //讀按鍵
  65.         key1=P2;                //將P2的值賦值給key1
  66.         key1=key1&0x03;                //屏蔽高6位,保留k0,k1的值
  67.         while(key1!=0x03)   //判斷是否有按鍵按下
  68.         {
  69.         delay(600);                        //消抖動
  70.         key1=P2;
  71.         key1=key1&0X03;
  72.         while(key1!=0x03)         //當有按鍵按下時
  73.         {
  74.         if(k0==0) b=b+1;            //按下k0按鍵時,初始值加1
  75.         else b=b-1;                         //按下k1按鍵時,初始值減1
  76.         k0=1;k1=1;                   //判斷按鍵是否抬起
  77.         key1=P2;                  //重新將P2的值賦值給key1
  78.         key1=key1&0x03;
  79.         while(key1!=0x03)  //判斷是否有按鍵按下
  80.         {
  81.         key1=P2;
  82.         key1=key1&0x03;
  83.         }
  84.         }
  85.         }
  86. }
  87. /*------主函數----------*/
  88. void main()
  89. {
  90.         TMOD=0X01;                           //設定定時器0工作,工作方式1
  91.         TH0=(65536-50000)/256;         //存放高8位,50ms
  92.         TL0=(65536-50000)%256;         //存放低8位
  93.         IT0=1;IT1=1;                 //外部中斷選擇下降沿觸發
  94.         IE=0X87;                         //開啟INT0,INT1,T0
  95.         PX0=1;                            //設定INT0為高優先級
  96.         led=1;                                //初始燈熄滅
  97.         TR0=0;                                //初始計數停止
  98.         i=2;
  99.         while(1)
  100.         {
  101.         a=b-sec;                         //將增計時變為減計時
  102.         if(TR0==0)                         //當定時器關閉時開啟鍵值掃描
  103.         {key();}
  104.         display(a);                         //顯示函數
  105.         if(a<=0)                                       
  106.         {                                         
  107.         led=0;                                 //當減計時為0時,報警燈點亮
  108.         }
  109.         else
  110.         {
  111.         led=1;                                //當減計時不為0時,報警燈熄滅
  112.         }
  113.         }

  114. }
復制代碼

所有資料51hei提供下載:
單片機系統實驗.rar (41.61 KB, 下載次數: 62)






歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久性色精品国产免费观看 | 国产一区| 91久久久久久久久久久久久 | 欧美日韩在线一区二区 | 亚洲高清在线 | 精品福利视频一区二区三区 | 午夜精品久久久久久久久久久久久 | 欧美精品一区二区三区在线 | 韩日一区二区 | 亚洲网址 | 欧美日韩黄 | 精品国产乱码久久久久久蜜退臀 | 日本不卡视频在线播放 | 亚洲精品欧洲 | 成人精品啪啪欧美成 | 精品视频一区二区三区 | 午夜激情影院 | 精品视频一区二区三区在线观看 | 国产在线一区二区三区 | 99视频在线 | 国产精品视频免费观看 | 伊人伊人 | 精产国产伦理一二三区 | 国产精品日日做人人爱 | 国产精品日本一区二区不卡视频 | 色网站视频 | 日韩综合在线视频 | 国产一区91精品张津瑜 | 国产精品亚洲片在线播放 | 成人自拍av| 国精品一区二区 | 九九热在线视频免费观看 | 超碰精品在线 | 欧美精品在线观看 | 4h影视| 在线播放中文字幕 | 精品一区二区三区在线视频 | 亚洲成人精品在线 | 成人精品一区二区三区 | 欧美成人一区二区 | 国产一级视频 |