用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)
前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!
Hello!又到周末了,是时候来更新了!🤭
二、数码管(P0口输入)
(1)数码管静态显示
程序说明:使用一位数码管显示数字“3”
程序总结:
1、熟悉使用16进制和二进制
2、 (用二进制数选择,显示的位置和图案)
位选 (选数码管位置):为1—— 关 为0——选它
段选 (选发光二极管):为1——选它 为0——关
#include <reg52.h>
sbit DU = P2^6;//段选
sbit WE = P2^7;//位选
void main()
{
WE = 0;//其实与程序思路无过大关联,
DU = 0;//是为了确保使用前关闭,以防一些不可预测的干扰
WE = 1; //打开位选锁存器
P0 = 0xfd;//选择第二个(左二)数码管 1111 1101
WE = 0; //锁住位选锁存器
DU = 1; //打开段选锁存器
P0 = 0x4f;//显示数字“3” 0100 1111
DU = 0; //锁住段选锁存器
while(1);//锁住程序,是程序一直
}
(2)数码管动态显示
解释:动态显示不是指同时显示所有数字,而是指☞单片机用很快的速度一个一个去显示每一位数字,以致于人眼无法区分(人眼具有延时保留图像的特点,闪动得太快,就会有几位数字同时出现的错觉)。
废话不宜过多,上实例 ☞ :
程序总结:
1、与静态显示差不多,只是显示多位数字
2、每显示一位数字后要延时,不延时将因运行过快而看不见数字
(具体看程序注释)
#include <reg52.h>
sbit DU = P2^6;
sbit WE = P2^7;
void delay(unsigned int z)//毫秒级延时
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void main()
{
while(1)
{
/*第一个数字“1”*/
WE = 1; //打开位选锁存器
P0 = 0xfe;//选择第一个(左一)数码管 1111 1110
WE = 0; //锁住位选锁存器
DU = 1; //打开段选锁存器
P0 = 0x06;//显示数字“1” 0000 0110
DU = 0; //锁住段选锁存器
delay(5);//延时,不让刷新过快,如果不延时将无法显示该位数字
/*第二个数字显示“2”*/
WE = 1; //打开位选锁存器
P0 = 0xfd;//选择第二个(左二)数码管 1111 1101
WE = 0; //锁住位选锁存器
DU = 1; //打开段选锁存器
P0 = 0x5b;//显示数字“2” 0101 1011
DU = 0; //锁住段选锁存器
delay(5);//延时
/*第三个数字显示“3”*/
WE = 1; //打开位选锁存器
P0 = 0xfb;//选择第二个(左二)数码管 1111 1011
WE = 0; //锁住位选锁存器
DU = 1; //打开段选锁存器
P0 = 0x4f;//显示数字“3” 0100 1111
DU = 0; //锁住段选锁存器
delay(5);//延时,如果都不使用延时将会显示混乱
}
}
~~ ~~