|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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/ |
评分
-
查看全部评分
|