一、实验内容
在大板上编程实现8x8点阵的显示
二、实验原理
8X8点阵由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,点亮点阵中的一个发光二极管的条件是:对应的行为高电平,对应列为低电平。显示的实质就是控制加到行线和列线上的编码来控制点亮某些发光二极管,从而显示出不同发光点组成的各种字符。
三、实验步骤
1.用keil进行实验代码的编程,调试,并生成hex文件。
2.安装驱动,连接单片机,用烧录软件对hex文件进行程序的烧录。
3.单片机LED点阵显示66字样。
四、确定汉字点阵
五、程序
#include "reg51.h"//定义单片机的一些特殊功能寄存器
#includetypedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
sbit SRCLK=P3^6; //移位时钟控制
sbit RCLK=P3^5; //并行输出控制
sbit SER=P3^4; //串行数据输入控制
u8 ledduan[]={0x00,0x7e,0x52,0x5e,0x00,0x7e,0x52,0x5e}; //每一列的数值,改变数字使矩阵上的点位置发生改变以得到想要显示的数字
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe }; //每一行低电平有效
void delay(u16 i)
{
while(i--);
} /*空循环实现延时,以毫秒为单位*/
void Hc595SendByte(u8 dat) //向74HC595发送一个字节的数据
{
u8 a;
SRCLK=0;
RCLK=0; //时钟控制和输出控制置零
for(a=0;a<8;a++)
{
SER=dat>>7; //
dat<<=1; //
SRCLK=1;
_nop_();
_nop_(); //
SRCLK=0; //
}
RCLK=1;
_nop_();
_nop_();
RCLK=0; //输入控制周期为两个机器周期
}
void main()
{
u8 i;
while(1)
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=ledwei[i]; //位选
Hc595SendByte(ledduan[i]); //发送段选数据
delay(10); //延时
Hc595SendByte(0x00); //消隐
}
}
}
六、运行结果
七、出现的问题及解决方法
最开始在程序实验步骤方面有好多不懂的,先自己去看了视频教程然后又问了同学才有了思路。在进行烧录时由于芯片类型没有选对,一直显示“写芯片超时”。改对以后才能顺利完成实验。