显示程序和硬件关联,如驱动方式、位数等,所以没有统一的程序,假定动态显示,大概思路如下:
1、设置定时中断,定时中断时间是5毫秒;
2、中断程序完成秒计时,秒数发生变化时,要将秒数对应的显示码放到显示缓冲区;
3、每次中断循环显示一位数码管;
下面是我曾经写的一个显示程序(显示缓冲区G_Disp_Buf):
#define PIN_SDIN P0_0
#define PIN_ST P0_1
#define PIN_SH P0_2
#define LOC_D1 0x08
void Display(void)
{
unsigned char i,ch,loc;
if(g_disp_location>3) g_disp_location=0; // display one digit every time, total 4 digits.
ch=G_Disp_Buf[g_disp_location];
loc=LOC_D1; // D1 position,P0_3-P0_6 located D1-D4
for(i=0;i
PIN_ST=0;
for(i=0;i<=7;i++) // output one character
{
PIN_SH=0;
if((ch&0x80)==0) PIN_SDIN=0;
else PIN_SDIN=1;
ch <<=1;
PIN_SH =1;
}
PIN_ST=1; // character ready
P0 |=loc; // set D1,D2,D3 or D4 ,enable display
g_disp_location++;
}
LZ很多东西没讲明白:
1.晶振多大?
2.数码管类型,共阳?共阴?
3.数码管段选,即数据接口在哪里?
4.数码管位选接口在哪里?低电平选通 还是 高电平选通?
5.八位数码管,仅显示秒表?秒表就是说,全是秒,高位表示 几万 或 几千 秒,而不是分。