数码管依次显示23-59-50
#include<stc15f2k60s2.h>
#define uchar unsigned char
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
uchar yi,er,san,si,wu,liu,qi,ba;
void Delayms(int ms);
void Allinit(void);
void Display1(uchar yi,uchar er);
void Display2(uchar san,uchar si);
void Display3(uchar wu,uchar liu);
void Display4(uchar qi,uchar ba);
void main(void)
{
Allinit();
while(1)
{
yi=2;er=3;san=10;si=5;wu=9;liu=10;qi=5;ba=0;
Display1(yi,er);
Display2(san,si);
Display3(wu,liu);
Display4(qi,ba);
}
}
//延时函数
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
//初始化函数
void Allinit(void)
{
P2=0XA0;
P0=0X00; //关蜂鸣器继电器
P2=0XC0;
P0=0XFF;
P2=0XE0;
P0=0XFF; //关数码管
P2=0X80;
P0=0XFF; //关LED
}
//数码管显示函数
void Display1(uchar yi,uchar er)
{
//1
P2=0XC0;
P0=0X01;
P2=0XE0;
P0=tab[yi];
Delayms(1);
//2
P2=0XC0;
P0=0X02;
P2=0XE0;
P0=tab[er];
Delayms(1);
}
void Display2(uchar san,uchar si)
{
//3
P2=0XC0;
P0=0X04;
P2=0XE0;
P0=tab[san];
Delayms(1);
//4
P2=0XC0;
P0=0X08;
P2=0XE0;
P0=tab[si];
Delayms(1);
}
void Display3(uchar wu,uchar liu)
{
//5
P2=0XC0;
P0=0X10;
P2=0XE0;
P0=tab[wu];
Delayms(1);
//6
P2=0XC0;
P0=0X20;
P2=0XE0;
P0=tab[liu];
Delayms(1);
}
void Display4(uchar qi,uchar ba)
{
//7
P2=0XC0;
P0=0X40;
P2=0XE0;
P0=tab[qi];
Delayms(1);
//8
P2=0XC0;
P0=0X80;
P2=0XE0;
P0=tab[ba];
Delayms(1);
}
开发板上电数码管显示999秒倒计时程序,偶数秒L1灯点亮(其他保持熄灭),奇数秒L1熄灭(其他依然保持熄灭),按下S4按键数码管000秒开始正计时
#include<stc15f2k60s2.h>
#define uchar unsigned char
#define uint unsigned int
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};
uchar yi,er,san,si,wu,liu,qi,ba;
uint num=999;
uint i=0;
uint j=0;
uchar zheng=0;
void Delayms(int ms);
void Allinit(void);
void Display1(uchar yi,uchar er);
void Display2(uchar san,uchar si);
void Display3(uchar wu,uchar liu);
void Display4(uchar qi,uchar ba);
void KEY_Scan(void);
void main(void)
{
Allinit();
while(1)
{
KEY_Scan();
if(zheng==0)
{
yi=num/100;er=num%100/10;san=num%100%10;si=11;wu=11;liu=11;qi=11;ba=11;
Display1(yi,er);
Display2(san,si);
Display3(wu,liu);
Display4(qi,ba);
i++;
if(i==125)
{
i=0;
if(num==0)num=1000;
num--;
}
}
else if(zheng==1)
{
yi=num/100;er=num%100/10;san=num%100%10;si=11;wu=11;liu=11;qi=11;ba=11;
Display1(yi,er);
Display2(san,si);
Display3(wu,liu);
Display4(qi,ba);
j++;
if(j==125)
{
j=0;
num++;
if(num==1000)num=0;
}
}
if(num%2==0) //偶数秒亮
{
P2=0X80;
P0=0XFE;
}
else if(num%2==1) //奇数秒灭
{
P2=0X80;
P0=0XFF;
}
}
}
//延时函数
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
//初始化函数
void Allinit(void)
{
P2=0XA0;
P0=0X00; //关蜂鸣器继电器
P2=0XC0;
P0=0XFF;
P2=0XE0;
P0=0XFF; //关数码管
P2=0X80;
P0=0XFF; //关LED
}
//数码管显示函数
void Display1(uchar yi,uchar er)
{
P2=0XC0;
P0=0X01;
P2=0XE0;
P0=tab[yi];
Delayms(1);
P2=0XC0;
P0=0X02;
P2=0XE0;
P0=tab[er];
Delayms(1);
}
void Display2(uchar san,uchar si)
{
P2=0XC0;
P0=0X04;
P2=0XE0;
P0=tab[san];
Delayms(1);
P2=0XC0;
P0=0X08;
P2=0XE0;
P0=tab[si];
Delayms(1);
}
void Display3(uchar wu,uchar liu)
{
P2=0XC0;
P0=0X10;
P2=0XE0;
P0=tab[wu];
Delayms(1);
P2=0XC0;
P0=0X20;
P2=0XE0;
P0=tab[liu];
Delayms(1);
}
void Display4(uchar qi,uchar ba)
{
P2=0XC0;
P0=0X40;
P2=0XE0;
P0=tab[qi];
Delayms(1);
P2=0XC0;
P0=0X80;
P2=0XE0;
P0=tab[ba];
Delayms(1);
}
//独立按键程序
void KEY_Scan(void)
{
if(P33==0) //S4
{
Delayms(5); //消抖
if(P33==0)
{
zheng=1;
num=0; //正计时,num归0
}
while(!P33);
}
else if(P32==0) //S5
{
Delayms(5); //消抖
if(P32==0)
{
zheng=0;
num=999; //倒计时,num归999
}
while(!P32);
}
else if(P31==0) //S6
{
Delayms(5); //消抖
if(P31==0)
{
zheng=0;
num=999; //倒计时,num归999
}
while(!P31);
}
else if(P30==0) //S7
{
Delayms(5); //消抖
if(P30==0)
{
zheng=0;
num=999; //倒计时,num归999
}
while(!P30);
}
}