STC 89C52RC 數碼管LED顯示動態2(0-99計數)
單片機源程序如下:
- /***************************************************************************
- 標題: 數碼管的顯示
- 效果: 顯示00-99,動態顯示+變化顯示
- 工作于:LY5A-L2A開發板
- 作者: 林洋電子吧
- 說明: 此例程將數碼管顯示內容用一個函數打包,要顯示直接調用即可。
- ******************************************************************************/
- //頭文件:
- #include "reg51.h"
- //變量定義:
- unsigned int table[]=
- {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- //表:共陽數碼管 0-9
- //引腳定義:
- sbit SMG_q = P1^0; //定義數碼管陽級控制腳(千位)
- sbit SMG_b = P1^1; //定義數碼管陽級控制腳(百位)
- sbit SMG_s = P1^2; //定義數碼管陽級控制腳(十位)
- sbit SMG_g = P1^3; //定義數碼管陽級控制腳(個位)
- //函數聲明:
- void display(unsigned int da);//定義顯示函數,參數為顯示內容,只顯示兩位數
- void delay1(void);
- //函數聲明:
- void delay2(unsigned char tmp); //延時子函數
- //數據定義:
- code unsigned char tmpled[50]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,
- 0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,
- 0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,
- 0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00};
- //定義數組常量,前面加"code"表示常量在程序代碼中存放,
- //不占用RAM。該數組為發光二極管的輸出數據
- //主函數,C語言的入口函數:
- void main(void)
- {
- unsigned int i=0; //作為查表的索引號
- unsigned int ldata; //變量用作0~9999計數
- unsigned int j; //此變量作為計數跳變刷新時間
- unsigned char k; //定義變量
-
- //while(1)
- // { //無限循環
- // }
-
- while(1)
- {
- j=800;
- while(j--)
- {
- display(ldata); //刷新5000次,約1秒,注:在C語言里是沒有周期可計算的哦~~~
- }
- if(ldata<9999)
- ldata++; //刷新完成約1秒,變量做加計數
- else
- ldata=0;
-
- //for(k=0;i<50;k++)
- // { //循環輸出40個數據
- // P2=~tmpled[k]; //"~"這個符號是取反,因發光二極管采用共陽極,所以將數據取反再輸出
- // delay2(100); //調用延時子函數,改變參數大小,調整變化速度
- // }
- }
- }
- //顯示函數,參數為顯示內容,顯示四位數
- void display(unsigned int da)
- {
- SMG_q=0; //選擇千位數碼管
- P0=table[da/1000]; //獲取千位值,查表輸出定義好的數碼管段值與P0口,顯示相應的0-9
- delay1(); //延時
- P0=0XFF; //清除數碼管顯示,因是共陽型,所以不是0
- SMG_q=1; //關閉千位數碼管
-
- SMG_b=0; //選擇百位數碼管
- P0=table[(da%1000)/100]; //獲取百位值,查表輸出定義好的數碼管段值與P0口,顯示相應的0-9
- delay1(); //延時
- P0=0XFF; //清除數碼管顯示,因是共陽型,所以不是0
- SMG_b=1; //關閉百位數碼管
-
- SMG_s=0; //選擇十位數碼管
- P0=table[((da%1000)%100)/10]; //獲取十位值,查表輸出定義好的數碼管段值與P0口,顯示相應的0-9
- delay1(); //延時
- P0=0XFF; //清除數碼管顯示,因是共陽型,所以不是0
- SMG_s=1; //關閉十位數碼管
- SMG_g=0; //選擇個位數碼管
- P0=table[((da%1000)%100)%10]; //獲取個位值,查表輸出定義好的數碼管段值與P0口,顯示相應的0-9
- delay1(); //延時
- P0=0XFF; //清除數碼管顯示,因是共陽型,所以不是0
- SMG_g=1; //關閉個位數碼管
-
- }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
STC 89C52RC 數碼管LED顯示動態2(0-99計數).rar
(17.51 KB, 下載次數: 37)
2017-11-5 11:21 上傳
點擊文件名下載附件
|