您的当前位置:首页正文

时钟显示实验

2021-12-06 来源:个人技术集锦


一、实验内容:

(1)在实验箱上完成:

编写程序,用定时器产生0.1S定时中断,对时钟计数器计数,并将数值实时地送数码管显示(左边2个数码管显示“时”,中间2个显示“分”,右边2个显示“秒”)。

(2)用Proteus软件参照实验电路连线并仿真运行,得出与实验箱上相同的软件仿真结果。

所用元器件:单片机AT89C51、8位锁存器74LS273或74LS373、3-8译码器74LS138、排阻或电阻RESPACK-8(RES)、或非门74LS02、共阳极六合一数码管7SEG-MPX6-CA

二、实验电路及功能说明

1.数码显示电路:

①电路组成:6个共阳极数码管、2个74LS273锁存器 ②端口地址:

字型口(段码锁存器)——FFDCH 字位口(位码锁存器)——FFDDH

2.动态显示:

每次只有一个数码管显示其相应字符,并且从左往右反复快速扫描,利用人眼的“视觉滞留”效益实现“同时”显示不同字符的工作方式。

3.字型码表:(共阳极)

0~9:0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90

三、实验程序流程图:

主程序:

子程序:

四、实验结果分析

五、心得体会

通过实验让我进一步了解、熟练掌握单片机定时器的编程技巧;同时掌握八段数码LED显示器的工作原理和编程方法。使我对c51有了更深的了解和学习的兴趣。

六、程序清单

#include #include

#define ZX XBYTE[0xffdc] #define ZW XBYTE[0xffdd]

unsigned

char

hour=12,

min=59,sec=50; unsigned

a1,a2,a3,a4,a5,a6;

char

unsigned ,9}; unsigned

char

code char

unsigned char num=0;

void delay();

void main()

{

,0x92,0x82,0xF8,0x80,0

TMOD=0X01;

TH0=(65536-5000)/256; TL0=(65536-5000)%256;

buffer[]={0,1,2,3,4,5,6,7,8

table[]={0xC0,0xF9,0xA4,0xB0,0x99

x90};

EA=1; ET0=1; TR0=1; while(1) {

if(num==10) { num=0; sec++; if(sec==60) { sec=0;

min++;

if(min==60)

{

hour++;

min=0;

if(hour==24)

{

hour=0;

}

}

}

}

a1=hour/10; a2=hour%10; a3=min/10; a4=min%10; a5=sec/10;

a6=sec%10;

ZX=table[buffer[a6]]; ZW=0x01; delay();

ZW=0; ZX=table[buffer[a5]]; ZW=0x02; delay();

ZW=0;

ZX=table[buffer[a4]]; ZW=0x04; delay();

ZW=0;

ZX=table[buffer[a3]]; ZW=0x08;

delay();

ZW=0;

ZX=table[buffer[a2]]; ZW=0x10; delay();

ZW=0;

ZX=table[buffer[a1]]; ZW=0x20; delay(); ZW=0;

}

}

void delay() { int i;

for(i=0;i<100;i++);

}

void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; num++;

}

因篇幅问题不能全部显示,请点此查看更多更全内容