找回密码
 立即注册
查看: 858|回复: 3

跟冲哥学习STC单片机心得

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:450
  • 最近打卡:2025-05-09 09:31:28

9

主题

85

回帖

1674

积分

金牌会员

积分
1674
发表于 2024-1-27 17:38:24 | 显示全部楼层 |阅读模式

之前接触过ESP8266开发板,自己尝试做过一些物联网的小物件,是使用Arduino开发环境为编程的,这个软件是基于C语言,所以在学物联网知识的时候,学习了一下C语言,各种关键字如if,while,for等都跟keil开发软件也能兼容,所以直接从arduino转到keil来对我来说不是特别困难。但是Arduino是开源的,网上有很多开发者做的库,直接调用里面的库函数就可以完成驱动一个LCD或伺服马达等硬件,只要能掌握他库里面定义的函数用法,有些函数必须带固定类型的参数。所以没学到最底层的东西,比如说用ESP8266开发板来驱动显示LCD1602就是几个函数就行了,他这个库函数也是类似于冲哥讲的模块化编程,把1个个功能用单独的.h和.c编写好,直接在main里引用调用就可以。所以在听冲哥讲到模块化编程时,这里我对应上了arduino,其实发现,哦,这2个开发环境都是挺像的。说到底ESP8266开发板也是一种类型的MCU,我们各种电子物件都是通过IO去驱动,只是通过软件编程改变IO切换的频率与次数,因为计算机都只能识别0和1嘛。从学单片机开始,我发现就像打开了一扇新大门,从这里我是接触到最基本的1和0,通过对1和0的切换可以实现各种功能,不论1个软件有多高大上,他的底层都是由1和0组成的,比如说LED点灯和数码管的显示,通过对1和0的时机组合,我们可以让数码管显示我们想要的字符。学以致用是关键,学这个东西肯定是自己有这方面的需求,只有有兴趣了,自己想用单片机来做个什么好玩的东西或者项目,才会有学习的动力,从23年10月份开始,自己开始断断续续学习,因为工作的原因。在这里也要劝告下在上大学的朋友,如果大学有时间有兴趣可以学下单片机,因为在工作中发现自己接触单片机也比较多,完成可以用单片机自己来设计治具或小机台之类。
未来,希望自己可以不断学习进步,同时也祝STC越来越好,真是我们国产的骄傲。

下面几张图片是跟着冲哥学习数码管显示,自己手搓的数码管线路板,因为我没有实验箱,是用追风剑来制作的。后面继续学习矩阵按键。
学习理论知识了还要多动动手,这样才是真的掌握了。

8键矩阵键盘正面

8键矩阵键盘正面

8键矩阵键盘背面

8键矩阵键盘背面

4位共阴极数码管正面

4位共阴极数码管正面

4位共阴极数码管背面

4位共阴极数码管背面

实际显示效果图1

实际显示效果图1

实际显示效果图2

实际显示效果图2
永远相信美好的事情即将发生!
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-10-6 22:54:21 | 显示全部楼层
dum*** 发表于 2024-1-27 17:42
#include

// '段码'数组,以P2.7~P2.0表示A/B/C/D/E/F/G/D/P 8段LED,0~9不带小数点和0~9带小数点字符, ...

加油
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:189
  • 最近打卡:2025-05-09 08:55:50

5

主题

37

回帖

511

积分

高级会员

积分
511
发表于 2024-9-1 22:55:30 | 显示全部楼层
我也觉得arduino比较简单,大部分应用场景都可以调用库函数的实现,且有大量的例程可以参考,不用去了解很多底层怎么设计
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:450
  • 最近打卡:2025-05-09 09:31:28

9

主题

85

回帖

1674

积分

金牌会员

积分
1674
发表于 2024-1-27 17:42:58 | 显示全部楼层

#include <STC32G.H>

// '段码'数组,以P2.7~P2.0表示A/B/C/D/E/F/G/D/P 8段LED,0~9不带小数点和0~9带小数点字符,
unsigned char segCode[21] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xFD,0x61,0xDB,0xF3,0x67,0xB7,0xBF,0xE1,0xFF,0xF7,0x02,};
// '位码‘数组,以P0.7~P2.0表示第1位~第8位数码管,这里使用共阴极3461AS数码管,位码低电平有效,段码高电平有效。
unsigned char digCode[4]  = {0x7F,0xBF,0xDF,0xEF,};

unsigned char displayDigital[4] = {2,0,0,5,};        // 数码管显示的4位字符数组
unsigned char numDigital = 0 ;                        // 控制数码管位数移动变量
unsigned int countTime = 10 ;                // 时间计数变量
       
void Delay1ms()                //@11.0592MHz
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 2763UL;
        while (i) i--;
}       

void Delay2270us()                //@11.0592MHz        约2270us,这个延时刚好间隔1s更新计时显示
{
        unsigned long edata i;

        _nop_();
        _nop_();
        i = 6279UL;
        while (i) i--;
}
       
void main()
{
        P0M1= 0x00;   P0M0 = 0x00;
    P1M1= 0x00;   P1M0 = 0x00;
    P2M1= 0x00;   P2M0 = 0x00;
        while(1)
        {
        displayDigital[0] = (countTime/10000%10);       
        displayDigital[1] = (countTime/1000%10)        ;
        displayDigital[2] = (countTime/100)%10        ;
        displayDigital[3] = (countTime/10)%10         ;
       
        while(numDigital <4)
        {
                P0 = digCode[numDigital] ;
                P2 = segCode[ displayDigital[numDigital] ] ;
                Delay1ms();
               
                numDigital++;
        }
        if(numDigital >3)
        {
                numDigital = 0;
        }
        Delay2270us();
        countTime++;
        if(countTime == 9999) countTime = 0;

        }
}
永远相信美好的事情即将发生!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-9 09:52 , Processed in 0.115577 second(s), 74 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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