用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)
前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!
一、LED
——其实LED可以 X 很多东西,例如:闪烁、流水灯、X蜂鸣器 的边闪边鸣、X按键 的选择灯色、X点阵屏 和定时器 的提醒功能等
老多了!嘿嘿, 🤭
(1)LED闪烁(初学可看)
#include<reg52.h>
void main ()
{
int i;
i=65535;
while(i--);//延时(占用CPU时间)
P1 = 0;
while(i--);
P1 = 1;
while(1);// 用于锁定程序于这里,不再让程序重复运行
}
(2)LED流水灯 X 独立按键(需学到按键)
小总结:1、按键要消抖,要做松手检测;
消抖时长可能与代码长度有关,代长延长;
2、写完程序后多用硬件调试,总能学到许多其他东西
#include<reg52.h>
#include<intrins.h>
sbit s2 = P3^0;
sbit s3 = P3^1;
sbit s4 = P3^2;
void delay(unsigned int i)//毫秒级延时函数
{
unsigned int x,y;
for(x=i;x>0;x--)
for(y=114;y>0;y--);
}
void main ()
{
unsigned char i1 = 0xfe;
while (1)
{
if( s2 == 0 )
{
delay(20);//消抖
if( s2 == 0 )
{
while(s2 != 0);//松手检测
while(1)
{
i1 = _crol_(i1,1); //第一种花样
P1 = i1;
delay(100);
if( s4 == 0 )
{
delay(60);
if( s4 == 0 )
{
while(s4 != 0);
P1 = 0xff;//清屏
delay(2);
break;
}
}
}
}
}
if( s3 ==0 ) //第二种花样
{
delay(20);
if( s3 == 0 )
{
while(s3 != 0);
while(1)
{
P1 = 0xff-16;
delay(190);
P1 = 0xff-8;
delay(190);
P1 = 0xff-32;
delay(190);
P1 = 0xff-4;
delay(190);
P1 = 0xff-64;
delay(190);
P1 = 0xff-2;
delay(200);
P1 = 0xff128;
delay(200);
P1 = 0xff-1;
delay(200);
P1 = 0xff;
delay(200);
if( s4 == 0 )
{
delay(80); //循环中代码越长,延时越长
if( s4 == 0 )
{
while(s4 != 0);
P1 = 0xff;
delay(2);
break;
}
}
}
}
}
}
}
(3)LED X 蜂鸣器(初学可看)
小总结:蜂鸣器和LED的使用类似
#include<reg52.h>
#include<intrins.h>//库函数头文件
#define uint unsigned int
sbit beep =P2^3;
void delay(uint i)//毫秒级延时函数
{
uint x,y;
for(x=i;x>0;x--)
for(y=114;y>0;y--);
}
void main()
{ uint temp;
temp = 0xfe;
delay(100);
while(1)
{
temp = _crol_(temp,1);//调用库函数,循环左移,记忆看最后字母
P1 = temp;
beep = ~beep;
delay(100);//延时实现闪烁
}
}