標(biāo)題: STC89C52單片機(jī)數(shù)碼管顯示00~99,間隔1S程序 [打印本頁]

作者: 金華千跡落竹    時間: 2020-11-13 13:16
標(biāo)題: STC89C52單片機(jī)數(shù)碼管顯示00~99,間隔1S程序
一、實(shí)驗(yàn)思路
動態(tài)數(shù)碼管就是我們的單片機(jī)運(yùn)行的太快,以至于我們的肉眼沒有辦法看到間隔,所以我們改一下數(shù)據(jù),就可以了,有時候我們用的就是人的視覺暫留,我們在使用數(shù)碼管時,得知道是共陰還是共陽,在這里,我使用的是共陰的數(shù)碼管,使用的是12Mhz的晶振,如果我們使用的是11.0592MHz,

這是我們數(shù)碼管的原理圖,數(shù)碼管其實(shí)就是發(fā)光二極管顯示,共陰,然后我們可以根據(jù)段碼計算出來的自己想要顯示的數(shù)字,這里有一些



二、代碼原理
我們用定時器顯示,如果我們定時器定時2ms,那么2ms就中斷一次,而我們在中斷里面定義一個 數(shù)字,當(dāng)達(dá)到500時,就是500×2ms=1S,然后使數(shù)據(jù)更新一邊,變成下一個數(shù)字,我們有倆個數(shù)組,一個是存放段碼的,另一個是存放實(shí)際值的,我們可以十位和各位分別顯示,存放到另一個數(shù)組里面,然后在經(jīng)過138譯碼器顯示出來。
三 、實(shí)驗(yàn)源碼


四、實(shí)驗(yàn)現(xiàn)象



還有一點(diǎn)就是那個消隱,P0=0x00;的那個就是消隱,如果沒有消隱,顯示的數(shù)字則會很不清晰;
可能代碼還存在點(diǎn)問題,希望大家能夠批評指正!
單片機(jī)源程序如下:
  1. /*************************************
  2. 本人用的是普中的開發(fā)板,然后138和數(shù)碼管的連接圖會貼貼出來,
  3. 芯片是stc89c52 ,晶振是12MHz,僅供交流使用
  4. *************************************/
  5. #include <reg52.h>
  6. typedef unsigned char u8;
  7. typedef unsigned int u16;
  8. #define TIME 500
  9. sbit LSA=P2^2;  //引腳的定義
  10. sbit LSB=P2^3;
  11. sbit LSC=P2^4;
  12. u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
  13.                                         0x7f,0x6f};//數(shù)碼管段碼,共陰極段碼
  14. u8 disbuff[2];//存放00~99的數(shù)組
  15. unsigned char t=0;//數(shù)值00~99
  16. /*****************************************************
  17. 函數(shù)名稱:void In0Init()
  18. 函數(shù)功能:定時器0初始化
  19. 輸入?yún)?shù):無
  20. 輸出參數(shù):無
  21. *****************************************************/
  22. void In0Init()
  23. {
  24.           TMOD = 0x01;                //開啟定時器0
  25.     TH0 = 0xF8;                        //賦初值
  26.     TL0 = 0x30;
  27.     EA = 1;                                        //開啟總中斷
  28.     ET0 = 1;                                //開啟定時器0的中斷
  29.     TR0 = 1;
  30. }
  31. /*****************************************************
  32. 函數(shù)名稱:void DigDisplay()
  33. 函數(shù)功能:數(shù)碼管顯示
  34. 輸入?yún)?shù):無
  35. 輸出參數(shù):無
  36. *****************************************************/
  37. void DigDisplay()
  38. {
  39. u8 i,j;
  40. for (i=0;i<2;i++)
  41.         {
  42.         switch(i)//位選,選擇哪一位亮
  43.                 {
  44.                 case(0): LSA=1;LSB=1;LSC=1;break;
  45.                 case(1): LSA=0;LSB=1;LSC=1;break;
  46.                
  47.                 }
  48.            P0=disbuff[i];
  49.                 j=10;                                        //消隱,要不然會很模糊
  50.                 while(j--);
  51.                 P0=0x00;
  52.         }
  53. }
  54. /*****************************************************
  55. 函數(shù)名稱:void DealNumber()
  56. 函數(shù)功能:處理數(shù)字,拆分一位一位的顯示
  57. 輸入?yún)?shù):無
  58. 輸出參數(shù):無
  59. *****************************************************/
  60. void DealNumber()
  61. {
  62.         disbuff[0]=smgduan[t/10];//處理十位
  63.         disbuff[1]=smgduan[t%10];//處理各位
  64. }
  65. /*****************************************************
  66. 函數(shù)名稱:void main ()
  67. *****************************************************/
  68. void main ()
  69. {
  70.         In0Init();
  71. while(1)
  72. {
  73.         DealNumber();
  74.         DigDisplay();
  75. }
  76. }
  77. /*****************************************************
  78. 函數(shù)名稱:void Timer0Interrupt(void) interrupt 1
  79. 函數(shù)功能:中斷服務(wù)函數(shù)
  80. 輸入?yún)?shù):無
  81. 輸出參數(shù):無
  82. *****************************************************/
  83. void Timer0Interrupt(void) interrupt 1
  84. {unsigned int n;
  85.     TH0 = 0xF8; //重新賦初值
  86.     TL0 = 0x30;
  87.            n++;                                //當(dāng)n==500時,則為1s
  88.           if(n==TIME)//TIME定義為500,用戶可以自己修改
  89.           {
  90.                         t++;                //實(shí)際的數(shù)值
  91.                         n=0;
  92.            }
  93.                 if(t==100)//如果t==99;然后重新顯示00
  94.                 {
  95.                 t=0;
  96.                 }
  97. }
復(fù)制代碼


全部資料51hei下載地址:
顯示00~99.7z (1.5 MB, 下載次數(shù): 16)






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1