1、数码管前三位显示一个跑表,从000到999之间以1%秒速度运行,当按下一个独立键盘时跑表停止,松开手后跑表继续运行。(用定时器设计表)。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6; //声明U1锁存器的锁存端
sbit wela=P2^7; //声明U2锁存器的锁存端
sbit key1=P3^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint num,bai,shi,ge,t;
void delay(uint z) //延时子函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display(uint num) //显示子函数
{
bai=num/100; /*分离百位、十位、个位以便显示*/
shi=num%100/10;
ge=num%10;
dula=1;
P0=table[bai]; //送百位段选数据
dula=0;
P0=0xff; /*送位选数据前关闭所有显示,防止打开位选锁存时,原来
wela=1; 的段选数据通过位选锁存器造成混乱*/
P0=0xfe;
wela=0;
delay(5);
dula=1;
P0=table[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(5);
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(5);
}
void init() //初始化函数
{
TMOD=0x01; //设置定时器0工作方式1(0000 0001)
TH0=(65536-4587)/256; //装初值5ms一次中断
TL0=(65536-4587)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
}
void keyscan() //键盘扫描子函数
{
if(key1==0) //检测按键是否按下
{
delay(10);