用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)
前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!
今天又找到一些时间来更新,废话不多说, 来🙂☞
三、8*8共阳极点阵屏
原理图:
(1)点阵屏一个点(第一个点)
程序总结:
1、发送一个点只是帮助理解点阵屏发送数据的原理,实际上并不需要自己一个一点的找数据,可用取模软件直接给我们数据
2、记住传送点阵屏数据的方法
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
sbit DIO = P3^4; //数据输入IO口
sbit SCLK = P3^5;// 移位寄存器时钟
sbit RCLK = P3^6;//输出锁存器时钟
//row 0x80 ,cov 0xfe
void main ()
{
uchar i,dat;
dat = 0xfe;
for(i=0;i<8;i++)
{
SCLK = 0;
RCLK = 0;
if(dat & 0x01)//dat的最低位为1时就输出1
DIO = 1;
else
DIO = 0;
SCLK = 1;//拉高发送数据
dat >>= 1;//数据左移
SCLK = 0;//恢复(为下一次发送做准备)
}
dat = 0x80;
for(i=0;i<8;i++)
{
SCLK = 0;
RCLK = 0;
if(dat & 0x01)//dat的最低位为1时就输出1
DIO = 1;
else
DIO = 0;
SCLK = 1;
dat >>= 1;
SCLK = 0;
}
RCLK = 1;
while(1);
}
(2)显示字( “生日快乐!”)
程序总结:
1、记住发送数据的函数用法
2、显示多个点的原理同数码管的动态显示差不多,都是程序快速运行的结果
#include <reg52.h>
#include <intrins.h>
sbit DIO = P3^4;
sbit SCLK = P3^5;
sbit RCLK = P3^6;
unsigned char code tabel[5][8] ={
0xFF,0x80,0xF7,0xC1,0x77,0x81,0xD7,0xEF,//生
0xFF,0xC3,0xDB,0xDB,0xC3,0xDB,0xC3,0xFF,//日
0xDE,0xAD,0xB3,0x80,0x35,0xA1,0x97,0xBF,//快
0xFF,0xE7,0xD5,0xF7,0xC1,0xD7,0xC3,0xFF,//乐
0xFF,0xE7,0xFF,0xE7,0xE7,0xE7,0xE7,0xFF,//!
};
void S_byte (unsigned char dat) //发送字节函数(一个字节)
{
unsigned char i;
SCLK = 0;
RCLK = 0;
for(i=0 ;i<8; i++)
{
if(dat & 0x01)//若dat最后一位是1则发送1
DIO = 1;
else
DIO = 0;
dat >>= 1;
SCLK = 1;
SCLK = 0;
}
}
void main ()
{
unsigned char i,j,ROW;
int k;
while(1)//循环显示
{
for(i=0;i<5;i++)//【5】【8】,对应其中【5】
{
for(k=0;k<1000;k++)//增加循环次数,使程序不用运行过快
{
ROW = 0x80; //行选的初值
for(j=0;j<8;j++)
{
S_byte(tabel[i][j]);//先发送列选值
S_byte(ROW);//再发送行选值
RCLK = 1; //拉高输出锁存器(发送数据)
RCLK = 0; //拉低输出锁存器
ROW =_cror_(ROW,1);//发送下一行的数据
}
}
}
}
}
本文详细介绍了使用STC89C52芯片的51单片机进行8*8共阳极点阵屏编程的过程。从单个点的显示到“生日快乐!”字符的动态显示,通过具体的C代码示例,讲解了点阵屏数据发送原理及动态显示技巧。
1万+

被折叠的 条评论
为什么被折叠?



