一、实验目标
在大板8*8 LED点阵上显示“O(哦)”“心形”“U”
二.实验器材
keil软件,普中烧录软件,单片机
三.实验原理
8*8点阵由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,点亮点阵中的一个发光二极管的条件是:对应的行为高电平,对应列为低电平。显示的实质就是控制加到行线和列线上的编码来控制点亮某些发光二极管,从而显示出不同发光点组成的各种字符。
四.实验过程及结果
实验一 崔倩倩 0227 实验一 崔倩倩 0227实验一 崔倩倩 0227
编码如下: # include <reg51.h>
#include typedef unsigned int u16;
typedef unsigned char u8;
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
unsigned char code TAB[8]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE};
unsigned char code char code {3}{8}=
{0x00,0x00,0x7E,0x42,0x42,0x42,0x7E,0x00;//O(哦)
0x00,0x1C,0x22,0x11,0x04,0x12,0x24,0x18;//心形
0x00,0x00,0x00,0x3C,0x02,0x3c,0x00,0x00;//U
}
/*******************************************************************************
*函 数 名 : 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); //消隐
}
}
}
结果如下:
实验一 崔倩倩 0227 实验一 崔倩倩 0227 实验一 崔倩倩 0227
网友评论