找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7468|回復(fù): 0
收起左側(cè)

STC89C52RC數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù))源程序注釋很詳細(xì)

[復(fù)制鏈接]
ID:246182 發(fā)表于 2017-11-5 11:21 | 顯示全部樓層 |閱讀模式
STC 89C52RC 數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù))

單片機(jī)源程序如下:
  1. /***************************************************************************
  2. 標(biāo)題:        數(shù)碼管的顯示
  3. 效果:        顯示00-99,動(dòng)態(tài)顯示+變化顯示
  4. 工作于:LY5A-L2A開發(fā)板
  5. 作者:        林洋電子吧
  6. 說(shuō)明:        此例程將數(shù)碼管顯示內(nèi)容用一個(gè)函數(shù)打包,要顯示直接調(diào)用即可。
  7. ******************************************************************************/
  8. //頭文件:
  9. #include "reg51.h"

  10. //變量定義:
  11. unsigned int table[]=
  12.                         {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  13.                                         //表:共陽(yáng)數(shù)碼管 0-9
  14. //引腳定義:               
  15. sbit SMG_q = P1^0;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(千位)
  16. sbit SMG_b = P1^1;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(百位)
  17. sbit SMG_s = P1^2;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(十位)
  18. sbit SMG_g = P1^3;        //定義數(shù)碼管陽(yáng)級(jí)控制腳(個(gè)位)

  19. //函數(shù)聲明:
  20. void display(unsigned int da);//定義顯示函數(shù),參數(shù)為顯示內(nèi)容,只顯示兩位數(shù)
  21. void delay1(void);
  22. //函數(shù)聲明:
  23. void delay2(unsigned char tmp);        //延時(shí)子函數(shù)
  24. //數(shù)據(jù)定義:
  25. code unsigned char tmpled[50]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,
  26.                                                                 0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,
  27.                                                                 0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,
  28.                                                                 0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00};
  29.                                                                         //定義數(shù)組常量,前面加"code"表示常量在程序代碼中存放,
  30.                                                                         //不占用RAM。該數(shù)組為發(fā)光二極管的輸出數(shù)據(jù)

  31. //主函數(shù),C語(yǔ)言的入口函數(shù):                        
  32. void main(void)  
  33. {
  34.         unsigned int i=0;                //作為查表的索引號(hào)
  35.         unsigned int ldata;        //變量用作0~9999計(jì)數(shù)
  36.         unsigned int j;                        //此變量作為計(jì)數(shù)跳變刷新時(shí)間
  37.         unsigned char k;                                //定義變量
  38.         
  39.         //while(1)
  40.         //        {                                                          //無(wú)限循環(huán)

  41. //          }
  42.         
  43.         while(1)
  44.         {        
  45.                 j=800;                        
  46.                 while(j--)
  47.                         {               
  48.                         display(ldata);        //刷新5000次,約1秒,注:在C語(yǔ)言里是沒(méi)有周期可計(jì)算的哦~~~
  49.                   }                                                
  50.                 if(ldata<9999)
  51.                         ldata++;                //刷新完成約1秒,變量做加計(jì)數(shù)
  52.                 else
  53.                         ldata=0;
  54.                
  55.                 //for(k=0;i<50;k++)
  56.                 //        {                                      //循環(huán)輸出40個(gè)數(shù)據(jù)
  57.                 //        P2=~tmpled[k];                        //"~"這個(gè)符號(hào)是取反,因發(fā)光二極管采用共陽(yáng)極,所以將數(shù)據(jù)取反再輸出
  58.                 //        delay2(100);                                //調(diào)用延時(shí)子函數(shù),改變參數(shù)大小,調(diào)整變化速度
  59.                 //  }
  60.         }
  61. }

  62. //顯示函數(shù),參數(shù)為顯示內(nèi)容,顯示四位數(shù)
  63. void display(unsigned int da)
  64. {
  65.         SMG_q=0;                        //選擇千位數(shù)碼管
  66.         P0=table[da/1000];        //獲取千位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
  67.         delay1();                        //延時(shí)
  68.         P0=0XFF;                        //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  69.         SMG_q=1;                        //關(guān)閉千位數(shù)碼管
  70.         
  71.         SMG_b=0;                        //選擇百位數(shù)碼管
  72.         P0=table[(da%1000)/100];        //獲取百位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
  73.         delay1();                        //延時(shí)
  74.         P0=0XFF;                        //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  75.         SMG_b=1;                        //關(guān)閉百位數(shù)碼管
  76.         
  77.         SMG_s=0;                        //選擇十位數(shù)碼管
  78.         P0=table[((da%1000)%100)/10];        //獲取十位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
  79.         delay1();                        //延時(shí)
  80.         P0=0XFF;                        //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  81.         SMG_s=1;                        //關(guān)閉十位數(shù)碼管

  82.         SMG_g=0;                        //選擇個(gè)位數(shù)碼管
  83.         P0=table[((da%1000)%100)%10];        //獲取個(gè)位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
  84.         delay1();                        //延時(shí)
  85.         P0=0XFF;                        //清除數(shù)碼管顯示,因是共陽(yáng)型,所以不是0
  86.         SMG_g=1;                        //關(guān)閉個(gè)位數(shù)碼管
  87.                
  88. }

  89. ……………………

  90. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
STC 89C52RC 數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù)).rar (17.51 KB, 下載次數(shù): 37)


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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