位段LED数码管动态扫描显示.doc
文本预览下载声明
项目名称:8位8段LED数码管动态扫描显示
班 级:09电二 姓 名:解健 学 号
一.实验目的
掌握数码管动态扫描显示原理及实现方法。
2.掌握动态扫描显示电路驱动程序的编写方法。
二.实验电路
三.元器件
元器件编号 元器件名称 说明 U2 7445 集电极开路的BCD十进制译码器/驱动器 U3 74HC245 8位总线驱动器 U1 AT89C52 AT89C52单片机 RP1 RESPACK8 具有公共端的排电阻 7SEG-MPX8-CC-BLUE 共阴极8位7段LED蓝色显示器 四.实验步骤
第一步:先在Proteus软件中设计仿真电路原理图。
第二步:再在Keil C51软件中编写且编译程序,程序后缀必须是.c。然后在打开的“Option for Target‘Target 1’”选项卡,“Target”标签下频率设置为“11.0592”, “Output”标签下,将“Creat HEX File”项打勾选中,设置生成一个.hex文件。
第三步:接着将.hex文件导入原理图中U1芯片。双击U1,打开Edit Component对话框,选择生成的hex文件。
第四步:最后观察设计的电路图是否能得到预想的效果,若不能,进行检查,找到毛病且纠正。
流程图
实验现象:
显示器点亮所有段,持续约1s,然后灭显示器,持续2s,最后显示“hello-93”,保持。
附:程序
#includeintrins.h
#includeREGX52.H
#define TRUE 1
#define dataPort P0
#define ledConPort P2
unsigned char code ch[8]={0x76,0x79,0x38,0x38,0x3f,0x40,0x6f,0x4f};
void time(unsigned int ucMs);
void main(void)
{unsigned char i,counter=0;
for(i=0;i30;i++){
for(counter=0;counter8;counter++) {
ledConPort=counter;
dataPort=0xff;
time(5);}}
ledConPort=0xff;
time(2000);
while(TRUE)
{for(counter=0;counter8;counter++){
ledConPort=counter;
dataPort=ch[counter];
time(5);}}}
void delay_5us(void)
{_nop_();
_nop_();}
void delay_50us(void)
{ unsigned char i;
for(i=0;i4;i++)
{delay_5us();}}
void delay_100us(void)
{delay_50us();
delay_50us();}
void time(unsigned int ucMs)
{unsigned char j;
while(ucMs0){
for(j=0;j10;j++) delay_100us();
ucMs--;}}
N
N
N
N
Y
Y
Y
Y
结束
停止
Counter8
延时
Counter++
Counter=0
按数值点亮位
选择段
延时
灭显示器
I30
I++
I=0
延时
Counter8
Counter++
Counter=0
点亮所有位
选择段
开始
显示全部