求一个八位数码管动态扫描的程序(用C编写的) !

2025年03月13日 01:29
有3个网友回答
网友(1):

显示程序在2.5ms中断中调用

#define dataport P0
#define comport P2
uchar data dis_buf[4]={16,16,16,16,16,16,16,16};//和对应的秒 分 时 星期 (逆序)
uchar sign[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//七段显示码
//0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, c, d, E, F, , -,
void display(void)
{
uchar temp;
dataport=0x00;
dataport=sign[dis_buf[dis_count]];
temp=1< comport=~temp;//^0xff;

dis_count++;
if(dis_count>7)
{
dis_count=0;
}
}

网友(2):

这位网友提供的是矩阵键盘程序。

网友(3):

#include

#define uchar unsigned char
/*uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};*/
uchar temp;
sbit P1_7=P1^7;

void dis(uchar num);
void delay();

void main()
{ P2=0x01;
P0=0xc0;
while(1)
{ //dis(0xf9);
P3=0xfe;//第一行为0
//delay();
temp=P3;
temp=temp&0xf0; //为什么一定要这步????
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: dis(0xf9); break;//第一行第一列
case 0xd0: dis(0xa4); break;//第一行第二列
case 0xb0: dis(0xb0); break;//第一行第三列
case 0x70: dis(0x99); break;//第一行第四列
}
}
P3=0xfd;//第二行为0
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: dis(0x92); break;//第一行第一列
case 0xd0: dis(0x82); break;//第一行第二列
case 0xb0: dis(0xf8); break;//第一行第三列
case 0x70: dis(0x80); break;//第一行第四列
}
}
P3=0xfb;//第三行为0
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: dis(0x90); break;//第一行第一列
case 0xd0: dis(0x99); break;//第一行第二列
case 0xb0: dis(0x99); break;//第一行第三列
case 0x70: dis(0x99); break;//第一行第四列
}
}

P3=0xf7;//第四行为0
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0: dis(0x99); break;//第一行第一列
case 0xd0: dis(0x99); break;//第一行第二列
case 0xb0: dis(0x99); break;//第一行第三列
case 0x70: dis(0x99); break;//第一行第四列
}
}
}

}

void dis(uchar num)
{
//P2=0x01;
P0=num;

}
void delay()
{
int a,b;
for(a=10;a>0;a--)
for(b=250;b>0;b--) ;
}
这是我以前写的。