Day2 2025.8.7
配置vscode实现51单片机开发
- 安装EIDE拓展
- 配置EIDE使用keil5作为编译器
- pip安装serial,不然不能烧录
按钮控制LED灯
#include <Atmel/REGX52.H>void Delay(unsigned int xms)
{unsigned char i, j;while (xms--) {i = 2;j = 239;do {while (--j);} while (--i);}
}/* void main()
{while (1) { //按下开,再按下关if (P3_1 == 0) {Delay(20); // 消除按键抖动while (P3_1 == 0);Delay(20);P2_0 = ~P2_0;}}
} *//* void main()
{unsigned char LEDNum = 0; // 占八位,正好对应一个八位寄存器while (1) {if (P3_1 == 0) { // 实现二进制计数Delay(20);while (P3_1 == 0);Delay(20);LEDNum++;P2 = ~LEDNum; // 取反}}
} */void main()
{unsigned char LedNum = 0;P2 = ~(0x01 << LedNum);while (1) { if (P3_1 == 0) {Delay(20);if (LedNum >= 7) {LedNum = 0;} else {LedNum++;}P2 = ~(0x01 << LedNum);while (P3_1 == 0);Delay(20);} else if (P3_0 == 0) {Delay(20);if (LedNum <= 0) {LedNum = 7;} else {LedNum--;}P2 = ~(0x01 << LedNum);while (P3_0 == 0);Delay(20);}}
}
数码管控制
静态显示
数码管分为供阴极&供阳极,阳极1亮0灭,阴极相反。
#include <Atmel/REGX52.H>
//数码管段码表
unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};void Nixie(unsigned char Location,Number) //Location表示第几个,Number表示显示几
{switch (Location) {case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break;case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break;case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break;case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break;case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break;case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break;case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break;case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break;}P0 = NixieTable[Number];
}// 静态数码管
void main()
{Nixie(2,3);while (1) {}
}
动态显示
#include <Atmel/REGX52.H>
//数码管段码表
unsigned char NixieTable[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number); //数码管显示
void Delay(unsigned char xms); //延迟void main()
{while (1) {Nixie(1,1);Nixie(2,2);Nixie(3,3);Nixie(4,4);Nixie(5,5);Nixie(6,6);Nixie(7,7);Nixie(8,8);}
}void Nixie(unsigned char Location,Number)
{switch (Location) {case 1: P2_4 = 1; P2_3 = 1; P2_2 = 1; break;case 2: P2_4 = 1; P2_3 = 1; P2_2 = 0; break;case 3: P2_4 = 1; P2_3 = 0; P2_2 = 1; break;case 4: P2_4 = 1; P2_3 = 0; P2_2 = 0; break;case 5: P2_4 = 0; P2_3 = 1; P2_2 = 1; break;case 6: P2_4 = 0; P2_3 = 1; P2_2 = 0; break;case 7: P2_4 = 0; P2_3 = 0; P2_2 = 1; break;case 8: P2_4 = 0; P2_3 = 0; P2_2 = 0; break;}P0 = NixieTable[Number];Delay(200); //消影:解决数码管串位问题P0 = 0x00;
}
void Delay(unsigned char xms)
{unsigned char i, j;while (xms--) {i = 2;j = 239;do {while (--j);} while (--i);}
}