第一周单片机学习笔记及心得
本人呢 是23届机械电子工程专业的学生 对单片机的兴趣 是源于 C语言 对于编程有自己的执着与专注 对于大三的我来说与其迷茫于实习与找工作 不如真正找到点自己有信心 和有兴趣的事情做 偶然的机会下了解到博客以后就用博客记录下自己的学习历程
#include (REGX52.H) void main () { P2=0xFE; while (1) { }跟着B站学,点亮的第一个LED灯 !有一点点C语言基础简单程序还是看得懂的
第一个程序比较简单 总结一下;
首先用C语言编写单片机代码需要加入头文件 <REGX52.H> 代码中P2对应着单片机P2口 单片机中的cpu在对应寄存器中写值0或者1寄存器再通过驱动器放大信号控制P2口输出高低电平 LED灯正极接电源 P2口应该输出低电平 对P2口赋值 1111 1110 但是得用16进制 0x开头 下面while 循环体 为了控制 单片机进入循环 比喻开关灯 不能一直进行这个动作 以致LED 灯的受损(用于兜圈子)
第二个程序LED闪烁
#include <REGX52.H> #include <INTRINS.H> void Delay500ms() { unsigned char i,j,k; _nop_(); i=4; j=205; k=187; do { do { while(--k); } while(--j); }while(--i); } void main () { while(1) { P2=0xFE; Delay500ms (); P2=0xFF; Delay500ms (); } } 第二个代码基于第一个上 前面先是定义了延时子函数 后面在在主函数中循环体里调用 实现LED灯的闪烁
第三个代码流水灯:
#include <REGX52.H> #include <INTRINS.H> void Delay500ms() { unsigned char i,j,k; _nop_(); i=4; j=205; k=187; do { do { while(--k); } while(--j); }while(--i); } void main () { while(1) { P2=0xFE; Delay500ms (); P2=0xFD; Delay500ms (); P2=0xFB; Delay500ms (); P2=0xF7; Delay500ms (); P2=0xEF; Delay500ms (); P2=0xDF; Delay500ms (); P2=0xBF; Delay500ms (); P2=0x7F; Delay500ms (); } }流水灯代码前面延时子函数部分同上循环体里通过控制P2口 控制输出高低电频 配合延时函数实现流水灯效果
代码4独立按键控制LED :
#include <REGX52.H> void main() { while(1) { if(P3_0==0) { P2_0=0; } else { P2_0=1; } } }这个代码运用了if语句 P3_0 为独立按键口 且if函数整体都放在了while函数里 这里有个疑问 我用按钮控制的P3_ 0口 用P1口就不行。 P3_0 为位寄存器 代码中应该赋值0或1 P3 为 8位一体的寄存器 及字节寄存器
代码5独立按键消抖“起保停”:
#include <REGX52.H> void Delay (unsigned int xms) { unsigned char i,j; while (xms) { i=2; j=239; do { while (--j); }while (--i); xms--; } } void main () { while (1) { if(P3_0==0) { Delay(20); while (P3_0==0); Delay(20); P2_0=~P2_0; } } }程序前面为自定义延时函数 可以根据需要延时 while 循环体中 if 判断按键按下启动 delay延时 while 判断是否松手 类似于自锁 最后P2_0取反 实现 控制LED灯熄灭
代码6 独立按键实现二制
#include <REGX52.H> void Delay (unsigned int xms) { while (xms) { unsigned char i,j; i=2; j=239; do { while (--j); } while (--i); xms--; } } void main() { unsigned char LEDnum=0; while(1) { if(P3_0==0) { Delay (20); while (P3_0==0); Delay(20); LEDnum++; P2=~LEDnum; } } }代码 7 独立按键控制位移
#include <REGX52.H> void Delay(unsigned int xms); unsigned char LEDNum; void main() { P2=~0x01; //上电默认LED1点亮 while(1) { if(P3_1==0) //如果K1按键按下 { Delay(20); while(P3_1==0); Delay(20); LEDNum++; //LEDNum自增 if(LEDNum>=8) //限制LEDNum自增范围 LEDNum=0; P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮 } if(P3_0==0) //如果K2按键按下 { Delay(20); while(P3_0==0); Delay(20); if(LEDNum==0) //LEDNum减到0后变为7 LEDNum=7; else //LEDNum未减到0,自减 LEDNum--; P2=~(0x01<<LEDNum); //LED的第LEDNum位点亮 } } } void Delay(unsigned int xms) { unsigned char i, j; while(xms--) { i = 2; j = 239; do { while (--j); } while (--i); } }一周学习的代码哈哈有点少 后面会继续坚持的
