本帖最后由 房一鹏 于 2022-1-8 22:41 编辑
数码管只显示有效位(只有程序)
#include<reg52.h>
sbit ENLED=P1^1;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
unsigned char ledchar[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
};
unsigned char ledbuff[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
void main ()
{
unsigned int cnt=0;
unsigned long sec=0;
unsigned char i=0;
ENLED=0;
TMOD=0x01;
TH0=0xF5;
TL0=0x55;
TR0=1;
while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xF5;
TL0=0x55;
cnt++;
if(cnt>=1000)
{
cnt=0;
sec++;
if(sec>=0){ledbuff[0]=ledchar[sec%10];}
if(sec>=10){ledbuff[1]=ledchar[sec/10%10];}
if(sec>=100){ledbuff[2]=ledchar[sec/100%10];}
if(sec>=1000){ledbuff[3]=ledchar[sec/1000%10];}
if(sec>=10000){ledbuff[4]=ledchar[sec/10000%10];}
if(sec>=100000){ledbuff[5]=ledchar[sec/100000%10];}
}
P0=0xFF;
switch(i)
{
case 0:
P20=1; P21=0; P22=1; i++; P0=ledbuff[0]; break;
case 1:
P20=0; P21=0; P22=1; i++; P0=ledbuff[1]; break;
case 2:
P20=1; P21=1; P22=0; i++; P0=ledbuff[2]; break;
case 3:
P20=0; P21=1; P22=0; i++; P0=ledbuff[3]; break;
case 4:
P20=1; P21=0; P22=0; i++; P0=ledbuff[4]; break;
case 5:
P20=0; P21=0; P22=0; i=0; P0=ledbuff[5]; break;
default: break;
}
}
}
}
利用了中断之后的程序
#include<reg52.h>
sbit ENLED=P1^1;
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
unsigned char ledchar[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,
};
unsigned char ledbuff[]={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
};
unsigned int cnt=0;
unsigned char i=0;
unsigned char flag1s=0;
void main ()
{
unsigned long sec=0;
ENLED=0;
TMOD=0x01;
TH0=0xF5;
TL0=0x55;
TR0=1;
EA=1;
ET0=1;
while(1)
{
if(flag1s==1)
{
flag1s=0;
sec++;
if(sec>=0){ledbuff[0]=ledchar[sec%10];}
if(sec>=10){ledbuff[1]=ledchar[sec/10%10];}
if(sec>=100){ledbuff[2]=ledchar[sec/100%10];}
if(sec>=1000){ledbuff[3]=ledchar[sec/1000%10];}
if(sec>=10000){ledbuff[4]=ledchar[sec/10000%10];}
if(sec>=100000){ledbuff[5]=ledchar[sec/100000%10];}
}
}
}
void interruptTime() interrupt 1
{
TH0=0xF5;
TL0=0x55;
cnt++;
if(cnt>=1000)
{
cnt=0;
flag1s=1;
}
P0=0xFF;
switch(i)
{
case 0:
P20=1; P21=0; P22=1; i++; P0=ledbuff[0];break;
case 1:
P20=0; P21=0; P22=1; i++; P0=ledbuff[1];break;
case 2:
P20=1; P21=1; P22=0; i++; P0=ledbuff[2];break;
case 3:
P20=0; P21=1; P22=0; i++; P0=ledbuff[3];break;
case 4:
P20=1; P21=0; P22=0; i++; P0=ledbuff[4];break;
case 5:
P20=0; P21=0; P22=0; i=0; P0=ledbuff[5];break;
default: break;
}
}关于金沙滩课后作业:
数码管从999999开始倒计时很简单,只需对之前写的程序改写就可以实现(sec=999999;之后的sec++改为sec--)即可。
采用定时器1,和采用定时器0一样,没有不同。
|