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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

數碼管前三位顯示一個跑表,從000到999之間以1%秒速度運行

[復制鏈接]
跳轉到指定樓層
樓主
學習單片機的作業題源碼+PROTEUS仿真,歡迎下載。  
數碼管前三位顯示一個跑表,從000到999之間以1%秒速度運行,
    當按下一個獨立鍵盤時跑表停止,松開手后跑表繼續運行。
    (用定時器設計表)。用另外三個獨立鍵盤實現按下第一個時計時停
    按下第二個時計時開始,按下第三個是計數值清零從頭開始。


單片機源程序:
  1. /**************************************************
  2.                                 數碼管前三位顯示一個跑表,從000到
  3.                                 999之間以1%秒速度運行,當按下一個
  4.                                 獨立鍵盤時跑表停止,松開手后跑表
  5.                                 繼續運行。(用定時器設計表).
  6.                         
  7. **************************************************/
  8. #include <reg52.h>

  9. #define uchar unsigned char
  10. #define uint unsigned int

  11. uint bai,shi,ge,xx;
  12. uchar a;
  13. sbit du=P2^6;
  14. sbit we=P2^7;
  15. sbit k1=P3^4;
  16. sbit k2=P3^5;
  17. sbit k3=P3^6;
  18. sbit k4=P3^7;
  19. uchar code table[]={
  20. 0x3f,0x06,0x5b,0x4f,
  21. 0x66,0x6d,0x7d,0x07,
  22. 0x7f,0x6f,0x77,0x7c,
  23. 0x39,0x5e,0x79,0x71,
  24. 0x76,0x79,0x38,0x3f};

  25. /*****************************

  26.                                         T0定時器10ms

  27. ******************************/
  28. void ding()
  29. {
  30.         TMOD=0x01;
  31.         TH0=(65536-9216)/256;
  32.         TL0=(65536-9216)%256;
  33.         EA=1;
  34.         ET0=1;
  35.         TR0=1;
  36. }
  37. /*****************************
  38.                                                         
  39.                                         初始化函數

  40. ******************************/
  41. void chushihua()
  42. {
  43.         xx=0;
  44.         du=1;
  45.         P0=0xff;
  46.         du=0;
  47.         we=1;
  48.         P0=0xf8;
  49.         we=0;        
  50. }

  51. /*********************************
  52.                                        
  53.                         延時函數

  54. *********************************/
  55. void delayms(uint x)
  56. {
  57. uint i,j;
  58.     for(i=x;i>0;i--)
  59.     for(j=110;j>0;j--);
  60. }

  61. /**********************************************

  62.                                                         顯示函數

  63. **********************************************/
  64. void xianshi(uchar b,uchar s,uchar g)
  65. {
  66.         bai=xx/100;//百位運算
  67.         shi=xx%100/10;//十位運算
  68.         ge=xx%10;//個位運算
  69.         
  70.         we=1;
  71.         P0=0xfe;
  72.         we=0;
  73.         du=1;
  74.         P0=table[b];
  75.         du=0;
  76.         P0=0xff;//防止位未選數碼管隱約亮
  77.         delayms(5);
  78.         
  79.         we=1;
  80.         P0=0xfd;
  81.         we=0;
  82.         du=1;
  83.         P0=table[s];
  84.         du=0;
  85.         P0=0xff;
  86.         delayms(5);
  87.         
  88.         we=1;
  89.         P0=0xfb;
  90.         we=0;
  91.         du=1;
  92.         P0=table[g];
  93.         du=0;
  94.         P0=0xff;
  95.         delayms(5);
  96. }

  97. /*******************************

  98.           鍵盤掃描函數

  99. ********************************/
  100. void keyscan()
  101. {
  102.                 if(k1==0)
  103.                 {
  104.                         delayms(10);
  105.                         if(k1==0)                        
  106.                                 TR0=0;                                
  107.                         do
  108.                                 {
  109.                                         xianshi(bai,shi,ge);
  110.                                 }
  111.                                 while(!k1);
  112.                         
  113.                                 TH0=(65536-9216)/256;
  114.                                 TL0=(65536-9216)%256;//松開按鍵后定時器重裝初值
  115.                                 TR0=1;                                
  116.                 }
  117.                
  118.                
  119.                
  120.           if(k2==0)
  121.                         {
  122.                                 delayms(10);
  123.                                 if(k2==0);        
  124.                                         {
  125.                                    while(!k2)
  126.                                           {
  127.                                                   TR0=0;
  128.                                                         do
  129.                                                         {
  130.                                                    xianshi(bai,shi,ge);
  131.                                       }
  132.                                                         while(TR0==1);
  133.                                           }
  134.                                   }               
  135.                         }
  136.                         
  137.                         
  138.                         if(k3==0)
  139.                         {
  140.                                 delayms(10);
  141.                                 if(k3==0)
  142.                                 {        
  143.                                   while(!k3)
  144.                                         {                                                
  145.                                                 TH0=(65536-9216)/256;
  146.                                                 TL0=(65536-9216)%256;
  147.                                                 TR0=1;
  148.                                         }
  149.                           }        
  150.                         }
  151.                         if(TR0==0)
  152.                         {        
  153.                                         if(k4==0)
  154.                                         {
  155.                                                 delayms(10);
  156.                                                 if(k4==0)
  157.                                                 {        
  158.                                                         while(!k4)
  159.                                                         {                                                
  160.                                                                 xx=0;
  161.                                                         }
  162.                                                 }        
  163.                                         }
  164.                   }
  165. }
  166. /********************************
  167.          
  168.                                                 主函數

  169. ********************************/
  170. void main()
  171. {
  172.         ding();
  173.         chushihua();
  174.         while(1)
  175.          {        
  176.                   keyscan();
  177.                         xianshi(bai,shi,ge);


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

下載:
數碼管跑秒.rar (123.74 KB, 下載次數: 48)

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

使用道具 舉報

沙發
ID:340061 發表于 2018-5-28 19:54 | 只看該作者
謝謝樓主
回復

使用道具 舉報

板凳
ID:296837 發表于 2018-6-4 16:51 | 只看該作者
可以啊,這個思路是不是可以做一些其他的改進,可以回去試試。
回復

使用道具 舉報

地板
ID:420518 發表于 2018-11-4 15:12 | 只看該作者
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula = P2^6;
sbit wela = P2^7;
sbit key1 = P3^0;
sbit key2 = P3^1;
sbit key3 = P3^2;
sbit key4 = P3^3;

uchar tt,num,bai,shi,ge;
uchar code table[] = {
        0x3f,0x06,0x5b,0x4f,
        0x66,0x6d,0x7d,0x07,
        0x7f,0x6f,0x77,0x7c,
        0x39,0x5e,0x79,0x71
};
void init();
void keys();
void delay(uint z);
void display(uchar bai,uchar shi,uchar ge);


void main(){
        init();
        while(1);       
}


void init(){
        TMOD = 0x01;       
        TH0 = (65536 - 1000)/256;
        TL0 = (65536 - 1000)%256;       
        EA = 1;
        ET0 = 1;
        TR0 = 1;
        num = 0;
        tt = 0;
        bai = 0;
        shi = 0;
        ge = 0;
        wela = 1;
        P0 = 0xf8;
        wela = 0;
        P0 = 0xff;
        dula = 1;
        P0 = 0x3f;
        dula = 0;
        delay(5);
}



void time0() interrupt 1 {
        TH0 = (65536 - 1000)/256;
        TL0 = (65536 - 1000)%256;
        tt++;
               
        if(tt == 1) {  
                num++;
                if(num == 99)
                        bai++;
                if(bai == 10){bai = 0;}
                if(num == 100){
                        num = 0;
                }
                tt = 0;
            shi = num/10;
            ge = num%10;  
                display(bai,shi,ge);
                keys();       
        }  
}



void keys(){
   if(key1 == 0){
                delay(5);
                if(key1 == 0){     
                        TR0 = 0;
                        while(!key1)
                                display(bai,shi,ge);
                        delay(5);
                        if(key1 == 1){TR0 = 1;}
                        }
                }
        if(key2 == 0){
                delay(5);
                if(key2 == 0){
                        TR0 = 0;
                        while(!key2)
                                display(bai,shi,ge);
                        delay(5);
                        while(!key2);       
                                //display(bai,shi,ge);
                        while(key2!=0&&key3!=0)
                                display(bai,shi,ge);       
                }
        }
        if(key3 == 0){
                delay(5);
                if(key3 == 0){                          
                        display(bai,shi,ge);       
                        num = shi * 10 + ge;
                        TR0 = 1;
                        while(!key3)
                                display(bai,shi,ge);               
                        delay(5);
                        while(!key3);
                }
        }       

        if(key4 == 0){
                delay(5);
                if(key4 == 0){
                wela = 1;
                P0 = 0xf8;
                wela = 0;
                P0 = 0xff;
                dula = 1;
                P0 = 0x3f;
                dula = 0;
                delay(5);
                num = -1;
                bai = 0;
                while(!key4);
                delay(5);
                while(!key4);
                }
        }
}



void display(uchar bai,uchar shi,uchar ge){
        dula = 1;
        P0 = table[bai];
        dula = 0;       
        P0 = 0xff;
        wela = 1;
        P0 = 0xfe;
        wela = 0;
        delay(5);

        dula = 1;
        P0 = table[shi];
        dula = 0;       
        P0 = 0xff;
        wela = 1;
        P0 = 0xfd;
        wela = 0;
        delay(5);

        dula = 1;
        P0 = table[ge];
        dula = 0;       
        P0 = 0xff;
        wela = 1;
        P0 = 0xfb;
        wela = 0;
        delay(5);       
}  



void delay(uint z){
        uint x,y;
        for(x = z;x > 0;x--)
                for(y = 110; y > 0;y--);
}
回復

使用道具 舉報

5#
ID:399179 發表于 2018-11-4 18:20 來自手機 | 只看該作者
怎么做一個可預置計數器?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 免费九九视频 | 亚洲国产精品久久久 | 在线亚洲电影 | 黄色片亚洲 | 操久久 | 中文字幕av色 | av一区在线观看 | 久日精品 | 免费国产黄网站在线观看视频 | 亚洲精品视频免费观看 | 国产欧美一级 | 久久综合国产精品 | 欧美精品久久久 | 亚洲伊人久久综合 | 久久精品a | 国产四区| 一区二区三区成人 | 中文在线一区二区 | 一区二区精品 | 欧美黄色性生活视频 | 免费看黄视频网站 | av男人天堂影院 | 国产丝袜一区二区三区免费视频 | 欧美在线观看一区二区 | 中文字幕高清av | 一区二区三区精品视频 | 亚洲精品亚洲人成人网 | 欧美一级特黄aaa大片在线观看 | 激情毛片 | 精品国产1区2区3区 在线国产视频 | 午夜小电影 | 国产精品视频专区 | 二区av | 成人久久一区 | 精品国产乱码久久久久久果冻传媒 | 国产精品一区三区 | 成人免费精品视频 | 天天插天天干 | 夜夜草 | 免费在线观看91 | 久久精品综合 |