Mike_python小 发表于 2023-1-17 07:46:22

51单片机第一节~

本帖最后由 Mike_python小 于 2023-1-17 08:20 编辑

51单片机第一节


点亮Led灯并实现跑马灯
首先我们要知道led灯的引脚(我这里是P2

0(低电平)控制led灯开启
1(高电平)控制led灯关闭
我也不知道为啥

我们总共有8个led灯,用二进制全部点亮的话就是这样:0000 0000

但是直接写上0000 0000会被机器识别成10进制

所以需要转换成16进制也就是0x00
P2 = 0x00

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

总体代码就是

#include <8052.h>

void main() {
    P2 = 0x00;// 0000 0000
    while (1)
    {
      
    }
   
}

接下来就是烧录了
使用
ls /dev/tty.wchusbser*
指令查看端口~
然后切换至程序文件夹
sdcc main.c
使用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/

MIke_python小小 发表于 2023-1-17 07:53:33

支持楼主!!!

Python_tkinter 发表于 2023-1-17 07:53:51

Mike_python小 发表于 2023-1-17 07:54:07

Python_tkinter 发表于 2023-1-17 07:53
楼主你能做我男朋友吗

{:5_92:}

高山 发表于 2023-1-17 08:36:59

哇!好想学学呀{:10_266:}
羡慕才华

Mike_python小 发表于 2023-1-17 08:40:41

高山 发表于 2023-1-17 08:36
哇!好想学学呀
羡慕才华

60多块说实话真不贵

Mike_python小 发表于 2023-1-17 08:40:58

高山 发表于 2023-1-17 08:36
哇!好想学学呀
羡慕才华

买个当新年礼物了{:10_256:}

高山 发表于 2023-1-17 08:41:24

Mike_python小 发表于 2023-1-17 08:40
买个当新年礼物了

{:10_256:}

tomok 发表于 2023-1-17 08:45:50

信息技术贴分享。
有学习兴趣

不二如是 发表于 2023-1-17 09:21:57

加油更下去~

tiger20100907 发表于 2023-1-17 09:26:30

眼睛:我记住了!!!

脑子:什么玩意“唰”一声过去了

Mike_python小 发表于 2023-1-17 09:31:58

不二如是 发表于 2023-1-17 09:21
加油更下去~

动态数码管给我看懵了{:10_266:}

额外减小 发表于 2023-1-17 10:53:26

顶(虽然啊我看不懂)

虚无→与→飘渺 发表于 2023-1-17 18:25:15

如果不加 while (1) 循环会怎么样?是不是 main() 里的都执行完了就待机了?

Mike_python小 发表于 2023-1-17 18:39:35

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

是的,这只是一个简单的程序,所以加不加都一样,更高级的就不一样了

虚无→与→飘渺 发表于 2023-1-18 23:06:08

我以前玩arduino的时候一直有一个疑惑,比如说我想让一个灯A亮5分钟然后灭5分钟,循环,这样的话一般就是【灯A亮; delay5分钟; 灯A灭; delay5分钟;】,但是如果我想同时实现一个 “按住一个按钮灯B亮,松开灯B灭” 的功能,刚才的 delay5分钟 命令会让整个程序挂起,我灯B的功能就实现不了了,请问这样的问题应该怎么解决?
我当时第一反应是上多线程,但是这种小单片机都不支持多线程

Mike_python小 发表于 2023-1-19 07:49:41

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

看我的第二节,里面有讲

虚无→与→飘渺 发表于 2023-1-19 17:48:18

Mike_python小 发表于 2023-1-19 07:49
看我的第二节,里面有讲

第二节是哪个?矩阵键盘,输入密码还是数码管?

Mike_python小 发表于 2023-1-19 17:54:54

虚无→与→飘渺 发表于 2023-1-19 17:48
第二节是哪个?矩阵键盘,输入密码还是数码管?

按照我发布的顺序,第二节是独立按键与矩阵键盘

亿壹粟 发表于 2024-3-14 20:55:36

楼主,你的博客进不去了
页: [1] 2
查看完整版本: 51单片机第一节~