標(biāo)題:
STC89C52RC數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù))源程序注釋很詳細(xì)
[打印本頁]
作者:
慢慢玩
時(shí)間:
2017-11-5 11:21
標(biāo)題:
STC89C52RC數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù))源程序注釋很詳細(xì)
STC 89C52RC 數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù))
單片機(jī)源程序如下:
/***************************************************************************
標(biāo)題: 數(shù)碼管的顯示
效果: 顯示00-99,動(dòng)態(tài)顯示+變化顯示
工作于:LY5A-L2A開發(fā)板
作者: 林洋電子吧
說明: 此例程將數(shù)碼管顯示內(nèi)容用一個(gè)函數(shù)打包,要顯示直接調(diào)用即可。
******************************************************************************/
//頭文件:
#include "reg51.h"
//變量定義:
unsigned int table[]=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//表:共陽數(shù)碼管 0-9
//引腳定義:
sbit SMG_q = P1^0; //定義數(shù)碼管陽級控制腳(千位)
sbit SMG_b = P1^1; //定義數(shù)碼管陽級控制腳(百位)
sbit SMG_s = P1^2; //定義數(shù)碼管陽級控制腳(十位)
sbit SMG_g = P1^3; //定義數(shù)碼管陽級控制腳(個(gè)位)
//函數(shù)聲明:
void display(unsigned int da);//定義顯示函數(shù),參數(shù)為顯示內(nèi)容,只顯示兩位數(shù)
void delay1(void);
//函數(shù)聲明:
void delay2(unsigned char tmp); //延時(shí)子函數(shù)
//數(shù)據(jù)定義:
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};
//定義數(shù)組常量,前面加"code"表示常量在程序代碼中存放,
//不占用RAM。該數(shù)組為發(fā)光二極管的輸出數(shù)據(jù)
//主函數(shù),C語言的入口函數(shù):
void main(void)
{
unsigned int i=0; //作為查表的索引號
unsigned int ldata; //變量用作0~9999計(jì)數(shù)
unsigned int j; //此變量作為計(jì)數(shù)跳變刷新時(shí)間
unsigned char k; //定義變量
//while(1)
// { //無限循環(huán)
// }
while(1)
{
j=800;
while(j--)
{
display(ldata); //刷新5000次,約1秒,注:在C語言里是沒有周期可計(jì)算的哦~~~
}
if(ldata<9999)
ldata++; //刷新完成約1秒,變量做加計(jì)數(shù)
else
ldata=0;
//for(k=0;i<50;k++)
// { //循環(huán)輸出40個(gè)數(shù)據(jù)
// P2=~tmpled[k]; //"~"這個(gè)符號是取反,因發(fā)光二極管采用共陽極,所以將數(shù)據(jù)取反再輸出
// delay2(100); //調(diào)用延時(shí)子函數(shù),改變參數(shù)大小,調(diào)整變化速度
// }
}
}
//顯示函數(shù),參數(shù)為顯示內(nèi)容,顯示四位數(shù)
void display(unsigned int da)
{
SMG_q=0; //選擇千位數(shù)碼管
P0=table[da/1000]; //獲取千位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
delay1(); //延時(shí)
P0=0XFF; //清除數(shù)碼管顯示,因是共陽型,所以不是0
SMG_q=1; //關(guān)閉千位數(shù)碼管
SMG_b=0; //選擇百位數(shù)碼管
P0=table[(da%1000)/100]; //獲取百位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
delay1(); //延時(shí)
P0=0XFF; //清除數(shù)碼管顯示,因是共陽型,所以不是0
SMG_b=1; //關(guān)閉百位數(shù)碼管
SMG_s=0; //選擇十位數(shù)碼管
P0=table[((da%1000)%100)/10]; //獲取十位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
delay1(); //延時(shí)
P0=0XFF; //清除數(shù)碼管顯示,因是共陽型,所以不是0
SMG_s=1; //關(guān)閉十位數(shù)碼管
SMG_g=0; //選擇個(gè)位數(shù)碼管
P0=table[((da%1000)%100)%10]; //獲取個(gè)位值,查表輸出定義好的數(shù)碼管段值與P0口,顯示相應(yīng)的0-9
delay1(); //延時(shí)
P0=0XFF; //清除數(shù)碼管顯示,因是共陽型,所以不是0
SMG_g=1; //關(guān)閉個(gè)位數(shù)碼管
}
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
STC 89C52RC 數(shù)碼管LED顯示動(dòng)態(tài)2(0-99計(jì)數(shù)).rar
(17.51 KB, 下載次數(shù): 37)
2017-11-5 11:21 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1