找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

自己寫的數(shù)碼管可調(diào)電子鐘有點(diǎn)問題,大家一起看看

查看數(shù): 4239 | 評論數(shù): 6 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時(shí)間: 2017-12-13 18:09

正文摘要:

#include <reg52.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int uchar DSY_play[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};     ...

回復(fù)

ID:155507 發(fā)表于 2017-12-14 23:20
試試看

  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar DSY_play[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};                         //從1到九對應(yīng)的十六進(jìn)制代碼
  6. uchar DSY_buffer[]={0,0,0xbf,0,0,0xbf,0,0};      //顯示緩沖區(qū)
  7. uchar DSY_IDX;                 //索引
  8. uchar key_state;   //按鍵狀態(tài)
  9. uchar DSY_wei;    //位碼,用于數(shù)碼管動(dòng)態(tài)掃描
  10. uchar miao;
  11. uchar fen;
  12. uchar hour;
  13. void fens();
  14. void hours();


  15. void shumaguan(void)  interrupt 1 using 1        //  數(shù)碼管動(dòng)態(tài)掃描
  16. {
  17.         TH0=(65536-10000)/256;
  18.         TL0=(65536-10000)%256;
  19.         P2=DSY_wei;                 //位選                                                                                    
  20.         P0=DSY_buffer[DSY_IDX];               //段選
  21.         DSY_wei=_crol_(DSY_wei,1);
  22.         DSY_IDX=(DSY_IDX+1)%8;

  23. }

  24. void  display(void)  interrupt 3 using 1
  25. {
  26.         uchar count=1;
  27.         TH1=(65536-50000)/256;
  28.         TL1=(65536-50000)%256;
  29.         if(count<20)
  30.         {
  31.                 count++;
  32.                 return;

  33.         }
  34.         miao++;
  35.         if(miao>=60)
  36.         {
  37.                 miao=0;
  38.                 fens();
  39.         }
  40.         DSY_buffer[7]=DSY_play[miao%10];
  41.         DSY_buffer[6]=DSY_play[miao/10];
  42.        
  43. }



  44. void fens()
  45. {
  46.        
  47.         {
  48.                 fen++;

  49.         }  //while(fen!=60);
  50.         if(fen>=60)
  51.         {
  52.                 fen=0;
  53.                 hours();
  54.         }

  55.         DSY_buffer[4]=DSY_play[fen%10];
  56.         DSY_buffer[3]=DSY_play[fen/10];

  57. }

  58. void     hours()
  59. {
  60.        
  61.         {
  62.                 hour++;
  63.         } //while(hour!=24);
  64.         if(hour>=24)
  65.         {
  66.                 hour=0;
  67.         }
  68.         DSY_buffer[1]=DSY_play[hour/10];
  69.         DSY_buffer[0]=DSY_play[hour%10];

  70. }

  71. void main()
  72. {
  73.         uchar x,y;
  74.        
  75.         TMOD|=0X11;  //使用模式1,16位定時(shí)器,使用"|"符號可以在使用多個(gè)定時(shí)器時(shí)不受影響
  76.         TH0=(65536-1000)/256;
  77.         TL0=(65536-1000)%256;
  78.         TH1=(65536-50000)/256;
  79.         TL1=(65536-50000)%256;
  80.         //TCON=0x01;
  81.         EA=1; //總中斷打開
  82.         ET0=1;           //定時(shí)器中斷打開
  83.         ET1=1;           //定時(shí)器中斷打開
  84.        
  85.         DSY_wei=0xfe;
  86.         DSY_IDX=0;
  87.         miao=10;
  88.         fen=20;
  89.         hour=20;
  90.        
  91.         DSY_buffer[7]=DSY_play[miao%10];
  92.         DSY_buffer[6]=DSY_play[miao/10];           //初始化時(shí)間為 20-20-10  
  93.         DSY_buffer[4]=DSY_play[fen%10];
  94.         DSY_buffer[3]=DSY_play[fen/10];
  95.         DSY_buffer[1]=DSY_play[hour%10];
  96.         DSY_buffer[0]=DSY_play[hour/10];
  97.         TR0=1;          //定時(shí)器開關(guān)打開
  98.         TR1=1;          //定時(shí)器開關(guān)打開
  99.        
  100.         while(1)
  101.         {
  102.                
  103.                 key_state=0xff;
  104.                 if(P1&0xff!=0xff)
  105.                 {
  106.                         for(x=110;x>0;x--)
  107.                         for(y=110;y>0;y--);

  108.                 }
  109.                 if(P1&0xff!=0xff)
  110.                 {
  111.                         key_state=P1;
  112.                         EA=0;
  113.                         if(key_state&0xfe==0xfe)
  114.                         {
  115.                                 fen++;
  116.                                 DSY_buffer[4]=DSY_play[fen%10];
  117.                                 DSY_buffer[3]=DSY_play[fen/10];

  118.                         }
  119.                         else if(P1&0xfd)
  120.                         {
  121.                                 hours();
  122.                         }

  123.                 }
  124.         }
  125. }
復(fù)制代碼
ID:261803 發(fā)表于 2017-12-14 23:01
加油!我也正在研究這個(gè),研究出來一起分享
ID:259741 發(fā)表于 2017-12-14 22:45
發(fā)現(xiàn)代碼運(yùn)行出現(xiàn)錯(cuò)誤,嘗試找出原因有點(diǎn)難,謝謝分享
ID:111634 發(fā)表于 2017-12-14 20:55
本帖最后由 zl2168 于 2017-12-14 20:56 編輯
周鑫鑫鑫666 發(fā)表于 2017-12-13 20:05
我就是學(xué)習(xí)了這個(gè)之后,自己動(dòng)手寫的。。找了很久的錯(cuò)誤還是找不到。不會找很久的話,我也不想發(fā)帖

你讀懂了那個(gè)案例的程序了嗎?哪里不懂可問我,我給你解答!
ID:253022 發(fā)表于 2017-12-13 20:05
zl2168 發(fā)表于 2017-12-13 19:08
冗長的程序一般是沒人看的,給你介紹一個(gè)正確有效看得懂的案例,自己對照查錯(cuò)吧!
實(shí)例93  具有校正功能的 ...

我就是學(xué)習(xí)了這個(gè)之后,自己動(dòng)手寫的。。找了很久的錯(cuò)誤還是找不到。不會找很久的話,我也不想發(fā)帖
ID:111634 發(fā)表于 2017-12-13 19:08
本帖最后由 zl2168 于 2017-12-13 19:11 編輯

冗長的程序一般是沒人看的,給你介紹一個(gè)正確有效看得懂的案例,自己對照查錯(cuò)吧!
實(shí)例93  具有校正功能的時(shí)鐘1302LED數(shù)碼管顯示)
實(shí)例93 帶校正時(shí)分秒的時(shí)鐘1302(6位LED數(shù)碼管顯示).rar (732.75 KB, 下載次數(shù): 10)

Proteus仿真一下,確認(rèn)有效。
以上摘自張志良編著《80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil CProteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行。仿真電路和Hex文件能在清華出版社網(wǎng)站免費(fèi)下載,程序源代碼只能到書上看了。到圖書館借,或到新華書店翻閱,或到網(wǎng)上書店打折購買。

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

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

快速回復(fù) 返回頂部 返回列表