基于51单片机的I/O以及LED点阵显示实验

一、设计目的

  1. 掌握I/O以及LED点阵显示的基本原理;
  2. 掌握一个完整的C语言程序结构;
  3. 熟悉LED点阵显示方式的编程。

二、实验环境

  1. Keil开发uVision开发环境
  2. Proteus软件。

三、实验设计及调试
(1) 实验内容

  1. 令8*8位LED点阵显示2;
  2. 循环显示1-8。

(2) 实验硬件电路在这里插入图片描述
88LED点阵,AT89C51单片机,120欧姆电阻,数据总线,复位电路与晶振电路。
(3) 设计过程及调试关键步骤
首先对8
8LED点阵的行与列通过高低电平进行检测,将行与列的显示条件检测完毕后,将电路在proteus软件上画好。其次根据其行与列的高低电平特性进行逐行点亮并循环在点阵上显示所需数字,根据显示的间隔调整显示的间隔时间,使显示更为清晰,快捷。

四、设计结果与分析

  1. 程序

(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. 实现结果及现象
    (1) 令8*8位LED点阵显示2
    在这里插入图片描述
    (2)在LED点阵上循环显示1-8
    在这里插入图片描述
    在这里插入图片描述
    (3) 设计结果的分析与总结,有无改进方案?
    设计结果分析和总结:最后按照一定的间隔在LED点阵上逐一循环显示1-8,显示时没有闪烁和鬼影,但是在数字的切换中应该更为圆滑,不显得突兀。
    改进方案:对点阵上数字的显示加以限制,使数字切换时不显得突兀。
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Is_LiuYiZheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值