4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3....C、D、E、F,重复。
/*********************************************************/ #include
#include
sbit dula=P2^6; //数码管段选锁存端 sbit wela=P2^7; ////数码管位选锁存端 uchar num,tt; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void main() { num=0;
tt=0;
TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;//开总中断
ET0=1;//开定时器0中断 TR0=1;//启动定时器0 dula=1;
P0=0x3f; //给段开始送显示0。
dula=0;//关闭段选锁存端,防止开始时出现乱码。 wela=1;//11101010
P0=0xc0; // 打开六个数码管位选 wela=0; while(1) {
if(tt==10) //每进入10次中断即为500ms,执行一次显示变化。 {
}
tt=0; num++; if(num==16) num=0; dula=1; P0=table[num]; dula=0;
}
}
void exter0() interrupt 1 // 定时器0中断 { }
TH0=(65536-50000)/256; TL0=(65536-50000)%6; tt++;
Lesson4
1、利用动态扫描方法在六位数码管上显示出稳定的654321.
/*********************************************************/ #include
#include
0x39,0x5e,0x79,0x71};
void display(uchar,uchar,uchar,uchar,uchar,uchar); //函数声明 void delay(uint); void main() {
while(1) { display(6,5,4,3,2,1); //始终显示 }
}
void display(uchar one,uchar two,uchar three,uchar four,uchar five,uchar six) {
dula=1; P0=table[one]; //送段数据
dula=0;
P0=0xff; //送位数据前关闭所有显示防止打开位选锁存后段选数据通过位选锁存器 wela=1; P0=0xfe; wela=0; delay(1);
dula=1; P0=table[two];
dula=0; P0=0xff; wela=1; P0=0xfd; wela=0;
delay(1); dula=1;
P0=table[three]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); dula=1; P0=table[four]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); dula=1; P0=table[five]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); dula=1; P0=table[six]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(1);
}
void delay(uint z) //延时子函数 { }
uint x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--);
2、用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即最后一位显示1%秒,一直循环下去
/*********************************************************/ #include
#include
sbit dula=P2^6; //数码管段选锁存端 sbit wela=P2^7; ////数码管位选锁存端 uchar ge,shi,bai; uint tt;
uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void display(uchar,uchar,uchar); //函数声明 void delay(uint); void main() { }
TMOD=0x10;//设置定时器1为工作方式1 TH1=(65536-10000)/256; TL1=(65536-10000)%6; EA=1;//开总中断 ET1=1;//开定时器1中断 TR1=1;//启动定时器1 while(1) { display(bai,shi,ge); }
void exter0() interrupt 3 // 定时器1中断 { }
TH1=(65536-10000)/256; TL1=(65536-10000)%6; tt++;
if(tt==1000) tt=0;
bai=tt/100; shi=tt0/10; ge=tt;