马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Mike_python小 于 2023-1-17 08:20 编辑
51单片机第一节
点亮Led灯并实现跑马灯
首先我们要知道led灯的引脚(我这里是P2
0(低电平)控制led灯开启
1(高电平)控制led灯关闭
我也不知道为啥
我们总共有8个led灯,用二进制全部点亮的话就是这样:0000 0000
但是直接写上0000 0000会被机器识别成10进制
所以需要转换成16进制也就是0x00
还需要在后面接上一个循环,来确保程序不会向下走
总体代码就是
#include <8052.h>
void main() {
P2 = 0x00;// 0000 0000
while (1)
{
}
}
接下来就是烧录了
使用指令查看端口~
然后切换至程序文件夹使用sdcc编译stcgal -P stc89 -p /dev/tty.wchusbserial11140 main.ihx
最后使用stcgal烧录进去就ok啦~
看效果:
OHHHHHHHHHHHHH!!
别问为啥数码管为啥也亮了,问就是冲突了
接下来就可以实现更伟大的操作~~~~跑马灯
在编写跑马灯的时候我发现了一个问题:无法使用Sleep啊!
然后我就自己编写了一个sleep函数.......
void Sleep(unsigned int xms)
{
unsigned char i, j;
while (xms)
{
i = 2;
j = 239;
do {
while (--j);
} while(--i);
xms--;
}
// _nop_();
}
接下来就是跑马灯的代码~
#include <8052.h>
// #include <intrins.h>
void Sleep(unsigned int xms)
{
unsigned char i, j;
while (xms)
{
i = 2;
j = 239;
do {
while (--j);
} while(--i);
xms--;
}
// _nop_();
}
void main() {
P2 = 0x00;// 1111 1110
// P2 = 0xFF
while (1)
{
P2 = 0xFE;
Sleep(1);
P2 = 0xFD;
Sleep(1);
P2 = 0xFB;
Sleep(1);
P2 = 0xF7;
Sleep(1);
P2 = 0xEF;
Sleep(1);
P2 = 0xDF;
Sleep(1);
P2 = 0xBF;
Sleep(1);
P2 = 0x7F;
Sleep(1);
}
}
是不是很简单!
需要注意的事项
sdcc于keil部分操作不一样,见下表
如解释错误,请指出
也可以到我的博客里看哦:https://cxwindlight.online/ |