用C51系列的单片机控制 在6位数码管动态显示秒表 要c语言版程序 谢谢

如题所述

第1个回答  2011-09-18
/////////////////////////////////////////////////////////////////////////////////////////////////
//程序功能:0到9999加一显示
//MCU:STC89C52
//硬件连接:P0接数据口,P1.0接段码锁存信号,P1.1接位码锁存信号。
//位码和段码各有一片573做驱动(可显示8位数码管)
//晶振大小:12MHZ
///////////////////////////////////////////////////////////////////////////////////////////////
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei=P1^0;
sbit duan=P1^1;
uint cont,qian,bai,shi,ge,bt;//bt为一秒内循环次数标志位
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};//共ying的代码
void init()
{
cont=9987;
//qian=3;
//bai=2;
//shi=1;
//ge=0;
}
/////////////////////////延时函数/////////////////////////////////////////////////////////
void delay(uchar z)
{
uchar x,y;
for(x=0;x<=z;x++)
for(y=0;y<=110;y++);
}
////////////////////////消影函数/////////////////////////////////////////////////////
void xiaoying()
{
P2=0x00;
duan=1;
duan=0;

}
///////////////显示函数//////////////////////////////////////////////////////////////
void display()
{
P2=0x7f; //显示个位
wei=1;
wei=0;
P2=tab[ge];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数

P2=0xbf; //显示十位
wei=1;
wei=0;
P2=tab[shi];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数

P2=0xdf; //显示百位
wei=1;
wei=0;
P2=tab[bai];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数

P2=0xef; //显示千位
wei=1;
wei=0;
P2=tab[qian];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数

}
/////////////////////////数据处理函数/////////////////////////////////////////////
void chuli()
{
qian=cont/1000;
bai=cont/100%10;
shi=cont/10%10;
ge=cont%10;
}
/////////////////////主函数///////////////////////////////////////////////////////////
void main()
{
init();

while(1)
{
while(bt!=250)
{
chuli();
display();
bt++;
}
bt=0;
cont++;
if(cont==10000)
cont=0;
}
}追问

请问什么叫段码和位码锁存信号 还有消影函数的作用是什么 因为我刚刚学这个一周 很多都不懂 谢谢了

追答

位码和段码的数据信号时接在一组IO口上的,输出位码到位573上时,给位码锁存信号,数据就锁存在573上啦,再在数据口输出段码,就可以有数据显示啦,
消影函数就是在锁存段码的573上还有上次的数据时,你去开下一组位码时,这样在数码管上就有一点阴影显示出来。

追问

这样的设置能做出来秒表的效果吗?

追答

也可以!!!在修改一下程序就差不多啦!!!不够你仿真是一定要接实际电路相应的的,例如:单片机最小系统一定要接!!!
你的数码管也一定要接驱动!!!

本回答被提问者采纳
相似回答