一、设计目的
- 掌握I/O以及LED点阵显示的基本原理;
- 掌握一个完整的C语言程序结构;
- 熟悉LED点阵显示方式的编程。
二、实验环境
- Keil开发uVision开发环境
- Proteus软件。
三、实验设计及调试
(1) 实验内容
- 令8*8位LED点阵显示2;
- 循环显示1-8。
(2) 实验硬件电路
88LED点阵,AT89C51单片机,120欧姆电阻,数据总线,复位电路与晶振电路。
(3) 设计过程及调试关键步骤
首先对88LED点阵的行与列通过高低电平进行检测,将行与列的显示条件检测完毕后,将电路在proteus软件上画好。其次根据其行与列的高低电平特性进行逐行点亮并循环在点阵上显示所需数字,根据显示的间隔调整显示的间隔时间,使显示更为清晰,快捷。
四、设计结果与分析
- 程序
(1)
#include<reg52.h>
#define uchar unsigned char
uchar hang[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar two[]={0x81,0xfd,0xfd,0x81,0xbf,0xbf,0xbf,0x81};
void delay(){
uchar i,j;
for(i=0;i<100;i++)
for(j=0;j<5;j++);}
void main(){
uchar i;
while(1){
for(i=0;i<8;i++){
P3=hang[i];
P1=two[i];
delay();}
}}
(2)
#include<reg52.h>
#define uchar unsigned char
uchar hang[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar one[]={0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7,0xf7};
uchar two[]={0x81,0xfd,0xfd,0x81,0xbf,0xbf,0xbf,0x81};
uchar three[]={0x81,0xfd,0xfd,0x81,0xfd,0xfd,0xfd,0x81};
uchar four[]={0xbd,0xbd,0xbd,0x81,0xfd,0xfd,0xfd,0xfd};
uchar five[]={0x81,0xbf,0xbf,0x81,0xfd,0xfd,0xfd,0x81};
uchar six[]={0xbf,0xbf,0xbf,0x81,0xbd,0xbd,0xbd,0x81};
uchar seven[]={0x81,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd};
uchar eight[]={0x81,0xbd,0xbd,0x81,0xbd,0xbd,0xbd,0x81};
void delay(uchar n){
uchar i,j;
for(i=0;i<100;i++)
for(j=0;j<n;j++);}
void main(){
uchar i,j;
while(1){
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=one[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=two[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=three[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=four[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=five[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=six[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=seven[i];
delay(5);}}
P1=0xff;
delay(255);
for(j=0;j<50;j++){
for(i=0;i<8;i++){
P3=hang[i];
P1=eight[i];
delay(5);}}
P1=0xff;
delay(255); }}
- 实现结果及现象
(1) 令8*8位LED点阵显示2
(2)在LED点阵上循环显示1-8
(3) 设计结果的分析与总结,有无改进方案?
设计结果分析和总结:最后按照一定的间隔在LED点阵上逐一循环显示1-8,显示时没有闪烁和鬼影,但是在数字的切换中应该更为圆滑,不显得突兀。
改进方案:对点阵上数字的显示加以限制,使数字切换时不显得突兀。