i++;
TH0=(65536-2000)/256; if(i==100) TL0=(65536-2000)%6; { } i=0; else F0=1;
{
flag=~flag; TH0=(65536-1000)/256; }
TL0=(65536-1000)%6; if(flag==1) } { }
8.答:因为晶振频率为24MHz,所以机器周期为0.5μs。
6
#include
EA=1; ET1=1; TMOD=0x50;
TH1=(65536-100)/256; TL1=(65536-100)%6; TR1=1; F0=1; while(1); }
void timer(void) interrupt 1 using 1 {
flag=~flag; if(flag==1) {
TMOD=0x01; P37=1;
TH1=(65536-10000*2)/256; TL1=(65536-10000*2)%6; } else {
TMOD=0x50; P37=0;
TH1=(65536-100)/256; TL1=(65536-100)%6; } }
第五 习题与思考题
1.简要叙述LED数码管的结构和分类。
2.解释下列术语:(1)静态显示(2)动态显示(3)位选,段选。 3.按下列要求编制数字0-9的LED数码管8段字段码表。 (1)共阴极逆序,小数点亮(即a高位); (2)共阳极逆序,小数点亮(即a高位)。
4.已知数字0-9存在数组a[10]中,现要求将数组a[10]中的数字依次转换成ASCII码之后
7
送LED数码管显示,请画出电路图并编写程序。
5.用89C2051设计接有5个共阴极数码管的动态显示接口电路,用BCD7段译码器CD4511作为LED数码管的字段控制,阴极用非门74LS04反向门驱动,字型选择由P1口提供,位选择由P3口控制。P1.7接开关,当开关拨向位置“1”时,显示“12345”字样,当开关拨向位置“2”时,显示“HELLO”字样,画出电路原理图并编写程序。
6.设计一60秒倒计时时钟电路,时间到,P3.7输出报警,画出电路原理图并编写程序。
习题与思考题
1、解释下列术语:(1)静态显示(2)动态显示(3)位选,段选。
答:(1)静态显示:静态显示方式是将各位的位选段连在一起接低电平(或高电平), 段选线分别与8位的锁存器相连。各位在显示时相互独立,而且每一位的显示字符一经确定,则相应的锁存器进行输出锁存,直到想显示另一个字符为止。
(2)动态显示:所谓的动态显示是 采用分时的方法,轮流控制各个显示器的COM端,使各个显示器轮流点亮。
(3)位选是每个显示器的公共极COM(位选线)是各自独立地受I/0线独立控制,实现各个分时选通。
段选是把所有显示器的8个笔画段a-h同名端并联在一起,由一个8位I/O口控制,形成段选线的多路复用。
2、用89C2051设计接有5个共阴极数码管的动态显示接口电路,用74LS373接成直通方式作为驱动电路,阴极用非门74LS04反向门驱动,字型选择由P1口提供,位选择由P3口控制。P1.7接开关,当开关拨向位置“1”时,显示“12345”字样,当开关拨向位置“2”时,显示“HELLO”字样,画出电路原理图并编写程序。 答:#include
#define uchar unsigned char sbit P17=P1^7; main() {
uchar code tabl[5]={0x86,0xdb,0xef,0xe6,0xed}; uchar code tab2[5]={0xf8,0xf9,0xb8,0xb8,0xbf}; uchar i; uint j; while(1) {
8
P3=0x01; for(i=0;i<5;i++) {
if(P17==1) P1=tab1[i]; else P1=tab2[i]; P3<<=1;
for(j=0;j<=25000;j++); } } }
3、设计一60秒倒计时时钟电路,时间到,P3.7输出报警,画出电路原理图并编写程序。 答: #include
sbit P17=P1^7;
unsigned char a[]={0x3f,0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06}; unsigned char i,j,k,m,n; unsigned char count1,count2; void Timer(void) interrupt 1 {
count1++; if(count1==20) { i++; count2++; count1=0; }
if(count2==10) { i=0;
9
count2=0; } if(i==1) { j++; }
if((i==1)&&(j==10)) { j=0; }
if((j==0)&&(i==0)) {
for(k=0;k<20000:k++) { P37=0;
for(m=0;m<100;m++); P37=1;
for(n=0;n<100;n++); }
TH0=(65536-50000)/256;TL0=(65536-50000)%6;} Main() { P37=1; EA=1; ET0=1; TR0=1; TMOD=0X01;
TH0=(65536-50000)/256; TL0=(65536-50000)%6 While(1) { P1=a[i];
10