一、实验内容
在大板上编程实现8*8点阵的显示
二、实验原理
一个字符是由一个个点亮的LED构成,点亮点阵的一个发光二极管的条件是:对应的行为高电平,对应的列为低电平。如果在很短的时间内依次点亮很多发光二极管,LED点阵就可以显示一个稳定的字符,数字或其他图形。控制LED点阵显示器的显示,实质上就是控制加到行线和列线上的编码来控制点亮某些发光二极管,从而显示有不同的发光点,从而显示出由不同发光的点组成的各种字符。
三、实验步骤
1、确定汉字点阵
2、用keil进行编码,并生成HEX文件
3、连接单片机,安装USB驱动,烧录程序。
四、程序
1、确定汉字点阵
2、编写程序
···
#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,0xc0,0xc0,0xff,0xff,0xc0,0xc0,0x00};//某一列的某一个灯亮
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//某一列
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函数名 : Hc595SendByte(u8 dat)
* 函数功能 : 向74HC595发送一个字节的数据
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
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;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
u8 i;
while(1)
{
P0=0x7f;
for(i=0;i<8;i++)
{
P0=ledwei[i]; //位选
Hc595SendByte(ledduan[i]); //发送段选数据
delay(100); //延时
Hc595SendByte(0x00); //消隐
}
}
}
···
3、运行结果
五、错误
1、
错误原因:没有将JOE短接片短接到GND端
2、
错误原因:更改代码时将分号为中文的分号
六、注意
1、如何生成hex文件
project->options for target->output
网友评论