实验目的:为了进一步掌握单片机(大板的使用),理解单片机的工作原理,实现在单片机上实现显示
实验器材:keil、单片机(大板)、PZ-ISP普中自动下载软件。
实验原理:8*8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线上的交叉点上,当对应的某一行置高电平,某一列置低电平是,相应的二极管就会发亮。
实验步骤:
1.在keil中新建工程,编写.c文件。
2.编译调试文件,修改错误及警告。
3.生成.hex文件。
4.在烧录软件中下载生成的.hex软件。
程序编写:
#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[]={0x04,0x24,0x24,0x24,0x24,0x24,0x24,0x04};//二
u8 ledwei[]={0x38f,0x44,0x42,0x21,0x21,0x42,0x44,0x38};//心
/*******************************************************************************
*函 数 名 : 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); //消隐
}
}
}
结果: