任务:用C语言设计程序,完成8个数码管的显示控制

51单片机
当按下INT按钮时,数码管开始快速计时,高五位为秒数,低三位为ms数,每10ms刷新一次显示内容。当再次按下INT按钮时,停止计数。

第1个回答  2019-08-13
假设8个数码管公共端均接地,同时显示1-9
#include
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
dsy_code[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff
};
void
delayms(uint
x)
{
uchar
t;
while(x--)
for(t=120;t>0;t--);
}
void
main()
{
uchar
i=0;
p0=0x00;
while(1)
{
p0=~dsy_code[i];
i=(i+1)%10;/*显示0-9*/
delayms(200);
}
}
下面程序从左到右显示
#include
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
code
dsy_code[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void
delayms(uint
x)
{
uchar
i;
while(x--)
{
for(i=200;i>0;i--);
}
}
void
main()
{
uchar
i,k=0x80;
while(1)
{
for(i=8;i>0;i--)
{
p2=0xff;
k=_crol_(k,1);
p0=dsy_code[8-i];
p2=k;
delayms(3);
}
}
}
第2个回答  2010-04-10
你很幸运,抽到这么简单的任务论文。
第3个回答  2010-04-10
#include"at89x52.h"
#include "numled.h"
void NUMLEDOPEN(unsigned char i);
void main(){
char numbers[11]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x7,0x7f,0x6f,0x00};
unsigned long i = 0, j, zeros = 10000000, inc = 1;

while(1){
if(inc == 1)
i++;

zeros=10000000;
j = i;
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(1);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(2);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(3);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(4);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(5);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(6);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(7);
if(i>zeros)dat_in(numbers[i/zeros]);
else{dat_in(numbers[10]);}i=i%zeros;zeros=zeros/10;
NUMLEDOPEN(8);
i = j;
delay(1);
if(P3_3 == 0){
if(inc == 0)
inc = 1;
else
inc = 0;
while(1)
{
if(P3_3 == 1)
break;
}
}
}
}
void dat_in(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SCLK=0;
if((dat&0X80)!=0)SDI=1;
else SDI=0;
dat<<=1;
SCLK=1;
}
RCLK=0; //dat_out
RCLK=1;
}

void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<1;j++);
}
void NUMLEDOPEN(unsigned char i)
{
if(i==1)
{NUMLED1OPEN();}
if(i==2)
{NUMLED2OPEN();}
if(i==3)
{NUMLED3OPEN();}
if(i==4)
{NUMLED4OPEN();}
if(i==5)
{NUMLED5OPEN();}
if(i==6)
{NUMLED6OPEN();}
if(i==7)
{NUMLED7OPEN();}
if(i==8)
{NUMLED8OPEN();}
else return ;
}

采用的是按键查询 INT就是P3.3本回答被提问者采纳
相似回答