鱼C论坛

 找回密码
 立即注册
查看: 2089|回复: 21

[技术交流] 51单片机第一节~

[复制链接]
发表于 2023-1-17 07:46:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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
  1. P2 = 0x00
复制代码


还需要在后面接上一个循环,来确保程序不会向下走

总体代码就是

  1. #include <8052.h>

  2. void main() {
  3.     P2 = 0x00;// 0000 0000
  4.     while (1)
  5.     {
  6.         
  7.     }
  8.    
  9. }
复制代码

接下来就是烧录了
使用
  1. ls /dev/tty.wchusbser*
复制代码

指令查看端口~
然后切换至程序文件夹
  1. sdcc main.c
复制代码

使用sdcc编译
  1. stcgal -P stc89 -p /dev/tty.wchusbserial11140 main.ihx
复制代码

最后使用stcgal烧录进去就ok啦~

看效果: WechatIMG190.jpeg

OHHHHHHHHHHHHH!!

别问为啥数码管为啥也亮了,问就是冲突了

接下来就可以实现更伟大的操作~~~~跑马灯

在编写跑马灯的时候我发现了一个问题:无法使用Sleep啊!
然后我就自己编写了一个sleep函数.......

  1. void Sleep(unsigned int xms)
  2. {
  3.     unsigned char i, j;

  4.     while (xms)
  5.     {
  6.         i = 2;
  7.         j = 239;

  8.         do {
  9.             while (--j);
  10.         } while(--i);
  11.         xms--;
  12.     }

  13.     // _nop_();


  14. }

复制代码

接下来就是跑马灯的代码~

  1. #include <8052.h>
  2. // #include <intrins.h>


  3. void Sleep(unsigned int xms)
  4. {
  5.     unsigned char i, j;

  6.     while (xms)
  7.     {
  8.         i = 2;
  9.         j = 239;

  10.         do {
  11.             while (--j);
  12.         } while(--i);
  13.         xms--;
  14.     }

  15.     // _nop_();


  16. }


  17. void main() {
  18.     P2 = 0x00;// 1111 1110
  19.     // P2 = 0xFF
  20.     while (1)
  21.     {   
  22.         P2 = 0xFE;
  23.         Sleep(1);

  24.         P2 = 0xFD;
  25.         Sleep(1);

  26.         P2 = 0xFB;
  27.         Sleep(1);   

  28.         P2 = 0xF7;
  29.         Sleep(1);            

  30.         P2 = 0xEF;
  31.         Sleep(1);            

  32.         P2 = 0xDF;
  33.         Sleep(1);            

  34.         P2 = 0xBF;
  35.         Sleep(1);   

  36.         P2 = 0x7F;
  37.         Sleep(1);
  38.     }
  39.    
  40. }
复制代码


是不是很简单!

需要注意的事项
sdcc于keil部分操作不一样,见下表

截屏2023-01-15 11.02.31.png

如解释错误,请指出

也可以到我的博客里看哦:https://cxwindlight.online/

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
liuhongrun2022 + 2 + 2 加油!!!!!!!!!!!!!!!!!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-1-17 07:53:33 | 显示全部楼层
支持楼主!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2023-1-17 07:53:51 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 07:54:07 | 显示全部楼层
Python_tkinter 发表于 2023-1-17 07:53
楼主你能做我男朋友吗

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 08:36:59 | 显示全部楼层
哇!好想学学呀
羡慕才华

评分

参与人数 1贡献 +3 收起 理由
hveagle + 3 同感

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 08:40:41 | 显示全部楼层
高山 发表于 2023-1-17 08:36
哇!好想学学呀
羡慕才华

60多块说实话真不贵
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 08:40:58 | 显示全部楼层
高山 发表于 2023-1-17 08:36
哇!好想学学呀
羡慕才华

买个当新年礼物了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 08:41:24 | 显示全部楼层

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 08:45:50 | 显示全部楼层
信息技术贴分享。
有学习兴趣
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 09:21:57 | 显示全部楼层
加油更下去~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 09:26:30 | 显示全部楼层
眼睛:我记住了!!!

脑子:什么玩意“唰”一声过去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 09:31:58 | 显示全部楼层

动态数码管给我看懵了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 10:53:26 | 显示全部楼层
顶(虽然啊我看不懂)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-17 18:25:15 | 显示全部楼层
如果不加 while (1) 循环会怎么样?是不是 main() 里的都执行完了就待机了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-17 18:39:35 | 显示全部楼层
虚无→与→飘渺 发表于 2023-1-17 18:25
如果不加 while (1) 循环会怎么样?是不是 main() 里的都执行完了就待机了?

是的,这只是一个简单的程序,所以加不加都一样,更高级的就不一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-18 23:06:08 | 显示全部楼层
我以前玩arduino的时候一直有一个疑惑,比如说我想让一个灯A亮5分钟然后灭5分钟,循环,这样的话一般就是【灯A亮; delay5分钟; 灯A灭; delay5分钟;】,但是如果我想同时实现一个 “按住一个按钮灯B亮,松开灯B灭” 的功能,刚才的 delay5分钟 命令会让整个程序挂起,我灯B的功能就实现不了了,请问这样的问题应该怎么解决?
我当时第一反应是上多线程,但是这种小单片机都不支持多线程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-19 07:49:41 | 显示全部楼层
虚无→与→飘渺 发表于 2023-1-18 23:06
我以前玩arduino的时候一直有一个疑惑,比如说我想让一个灯A亮5分钟然后灭5分钟,循环,这样的话一般就是【 ...

看我的第二节,里面有讲
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-19 17:48:18 | 显示全部楼层
Mike_python小 发表于 2023-1-19 07:49
看我的第二节,里面有讲

第二节是哪个?矩阵键盘,输入密码还是数码管?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-19 17:54:54 | 显示全部楼层
虚无→与→飘渺 发表于 2023-1-19 17:48
第二节是哪个?矩阵键盘,输入密码还是数码管?

按照我发布的顺序,第二节是独立按键与矩阵键盘
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-3-14 20:55:36 | 显示全部楼层
楼主,你的博客进不去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 22:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表