|
程序如下
/**************************************************************************************
实验现象:下载程序后,LED点阵显示数字0
接线说明: (具体接线图可见开发攻略对应实验的“实验现象”章节)
注意事项:
***************************************************************************************/
#include "reg51.h" //此文件中定义了单片机的一些特殊功能寄存器
#include "intrins.h"
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
//--定义使用的IO口--//
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
u8 wo[]={0x01,0x81,0x81,0xFF,0xFF,0x81,0x81,0x01}; //("I")类似于动态数码管的段选,8*8中是DPa-DPh的控制的行,该数据传入HC595
u8 wo1[]={0x03,0xC3,0xC3,0xFF,0xFF,0xC3,0xC3,0x03}; //("I"宽体)
u8 xin[]={0x38,0x7C,0x7E,0x3F,0x3F,0x7E,0x7C,0x38}; //(爱心)
u8 y[]={0x80,0xC0,0x60,0x3F,0x3F,0x60,0xC0,0x80}; //"Y"
/*取模要先上下颠倒*/
u8 ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //类似于动态数码管的位选
/*******************************************************************************
* 函 数 名 : delay
* 函数功能 : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
void LED1(u8 dat1)
{
P0=dat1;
}
/*******************************************************************************
* 函 数 名 : Hc595SendByte(u8 dat1,u8 dat2)
* 函数功能 : 通过595发送2个字节的数据
* 输 入 : dat1:第2个595输出数值
* * dat2: 第1个595输出数值
* 输 出 : 无
*******************************************************************************/
void Hc595SendByte(u8 dat)
{
u8 a;
SRCLK = 1;
RCLK = 1;
for(a=0;a<8;a++) //发送8位数
{
SER = dat >> 7; //从最高位开始发送
dat <<= 1;
SRCLK = 0; //发送时序
_nop_();
_nop_();
SRCLK = 1;
}
RCLK = 0;
_nop_();
_nop_();
RCLK = 1;
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
u8 i=0;
u8 n,m,v;
/* while(1)
{
for(i=0;i<8;i++)
{
Hc595SendByte(wo1[i]);
LED1(ledwei[i]);
delay(10);
}
delay(50000);
for(i=0;i<8;i++)
{
Hc595SendByte(xin[i]);
LED1(ledwei[i]);
delay(10);
}
delay(50000);
for(i=0;i<8;i++)
{
Hc595SendByte(y[i]);
LED1(ledwei[i]);
delay(10);
}
delay(50000);
}
*/
while(1)
{
for(n=0;n<500;n++)
{
for(i=0;i<8;i++)
{
Hc595SendByte(wo1[i]);
LED1(ledwei[i]);
delay(10);
}
}
for(m=0;m<500;m++)
{
for(i=0;i<8;i++)
{
Hc595SendByte(xin[i]);
LED1(ledwei[i]);
delay(10);
}
}
for(v=0;v<500;v++)
{
for(i=0;i<8;i++)
{
Hc595SendByte(y[i]);
LED1(ledwei[i]);
delay(10);
}
}
}
} |
|