????????作为从FPGA转行来单片机的初学者,我学到这里已经会自己找一些常见的逻辑和语法的错误啦!今天有很大进步奥~
????????不多说,直接放代码+效果图。
?ps: 上传的代码的数字部分想要有高亮,在代码类型中选python
#include "reg51.h" //用"reg52.h"的话RCLK会报错:redefine
#include "intrins.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit SRCLK=P3^6;//管脚11,595移位寄存器时钟
sbit RCLK=P3^5;//管脚12,595存储寄存器时钟;
sbit SER=P3^4;//管脚14,串行数据输入
/*
//字母D
u8 led_duan[]={0x00,0xff,0x81,0x81,0x42,0x3c,0x00,0x00};//共阴
u8 led_wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
*/
/*
//实心形
u8 led_duan[] ={0x10,0x38,0x3c,0x1e,0x1e,0x3c,0x38,0x10};//共阴
u8 led_wei[] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
*/
//空心形
u8 led_duan[]={0x38,0x44,0x42,0x21,0x42,0x44,0x38,0x00};//共阴
u8 led_wei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* 函 数 名 : Hc595SendByte(u8 dat1,u8 dat2)
* 函数功能 : 产生心形图案(实心或空心),或者数字
* 注 意 : 发送(写)操作时,移位(dat<<=1)要放在运算(SER=dat>>7)后面
*******************************************************************************/
void Hc595_SendByte(u8 dat1)
{
u8 a;
SRCLK = 0;//此时拉低拉高无所谓,因为没有产生上升沿,数据不传送。
RCLK = 0;
//dat1
for(a=0;a<8;a++)//发送8位数
{
SER=dat1>>7;//从最高位开始发送
dat1<<=1;//左移位
SRCLK=0;//发送时序(移位寄存器)
_nop_();//1个机器周期
_nop_();
SRCLK=1;
}
RCLK=0;//发送时序(存储寄存器)
_nop_();
_nop_();
RCLK=1;
}
void main()
{
u8 i;
P0=0x7f;//赋初值,
while(1)
{
for(i=0;i<8;i++)
{
P0=led_wei[i];
Hc595_SendByte(led_duan[i]);
delay(100); //常用延时1ms
Hc595_SendByte(0x00); //消隐 LED点阵共阴
}
}
}
|