Albsm 发表于 2023-7-1 15:24:14


2023年7月1日 15:24:27

第12期主要讲了共阴极共阳极数码管的驱动方式,其中提到了段码数组,这个数组可以保存下来留作复用
一位数码管有8个主要引脚用于驱动其完成主要功能,二位,四位或更多位数的数码管的引脚也是可以复用的,通过导通不同的共阴极或共阳极来达成点亮指定位置数码管的效果

Albsm 发表于 2023-7-1 21:28:12

第13期主要讲了数码管的动态与静态显示,由于还没学习到定时器,一些功能无法更精简地实现。
本人的开发板上使用的是74138译码器和两组四码共阴数码管,所以代码部分稍显复杂
#include <STC89C5xRC.H>
#include <intrins.h>

unsigned char code smg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //共阴数码管段码
unsigned char code ls138[]={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c};        //74138真值表

void Delay1ms();
void main(){
        unsigned char seg7 = 0;
        unsigned char ls38 = 0;
        unsigned char l;
        while(1){
               
                for(seg7=0;seg7<10;seg7++){
                        for(l=0;l<50;l++){
                                for(ls38=0;ls38<8;ls38++){
                                        P2=ls138;
                                        P0=smg;
                                        Delay1ms();
                                        P0=0xff;
                                }
                        }
                }
        }
}
void Delay1ms()                //@11.0592MHz
{
        unsigned char data i, j;

        _nop_();
        i = 2;
        j = 199;
        do
        {
                while (--j);
        } while (--i);
}


实现了一个从0到9的循环显示,知识点和教程视频相差不大

Albsm 发表于 2023-7-1 23:37:25

2023年7月1日 23:36:22

14期教程讲解的是上一集的应用,没太大差别。

Albsm 发表于 2023-7-2 00:36:03

第15期主要讲了74hc595的使用。595属于移位寄存器,通过串行输入数据,锁存给高电平使输入数据从输出引脚输出。与38译码器不同的是,38译码器使用并行输入,并每次只从一个引脚输出高电平,而595可以使用串行输入信息,并可同时输出八位甚至通过级联达成更多引脚高电平同时输出,这免除了一部分不必要的刷新,降低程序的时间复杂度。

angmall 发表于 2023-7-2 15:35:08

5.生成hex文件,修改hex文件格式为386,此处是否因为cpu是32位,由于简中区的优秀索引机制我并没找到关于此问题的答案,铺天盖地都是【天晓得keil为什么不规整一下】最终在ARM社区找到了一个没有回答的提问给了我一点小启发,他提到“ As hex-386 is for 32-bit addressing and Hex-80 is 16 bit” 或许是此处设置为386的原因。希望有老ass帮忙答疑解惑。


Keil C251集成开发环境
设置编译环境
设置项目1:选择Target页,将CPU Mode项设为Source(251 native)。

设置项目2:选择Target页,将Memory Model项设为XSmall:near vars,far const,ptr-4,。

设置项目3:选择Target页,当程序大小不超过64K字节时,将Code Rom Size项设为Large:variables in XDATA;当程序大小超过64K字节时,将Code Rom Size项设为Huge:64K functions,16M progr,此时需要保证单个函数及单个文件的代码大小必须在 64K字节以内,并且单个表格的数据量也必须在64K字节以内,同时还需要设置External Memory。

设置项目4:选择Output页,若程序空间超过64K字节,则HEX format项必须设为HEX-386,只有当程序空间不超过64K字节时,此项才可设为HEX-80。

设置项目5:编译时创建hex文件。勾选“Create HEX File”选项。

Albsm 发表于 2023-7-2 15:57:48

angmall 发表于 2023-7-2 15:35
5.生成hex文件,修改hex文件格式为386,此处是否因为cpu是32位,由于简中区的优秀索引机制我并没找到关于此 ...

感谢答疑,也就是说hex386和80的选择与项目3设置的程序空间大小有关,但并不是完全关联,这个只与实际应用时的程序文件大小有关

angmall 发表于 2023-7-2 16:09:17

Albsm 发表于 2023-7-2 15:57
感谢答疑,也就是说hex386和80的选择与项目3设置的程序空间大小有关,但并不是完全关联,这个只与实际应 ...

就是说你的应用程序超过64k就要像这样子做。


STC32G12K128系列超64K程序演示
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1678&highlight=64K

jwd 发表于 2025-2-8 14:51:35

angmall 发表于 2023-7-2 15:35
5.生成hex文件,修改hex文件格式为386,此处是否因为cpu是32位,由于简中区的优秀索引机制我并没找到关于此 ...

请问4 byte interrupt frame Size,这个选项什么时候勾选,什么时候不勾选?

angmall 发表于 2025-2-8 15:08:03

jwd 发表于 2025-2-8 14:51
请问4 byte interrupt frame Size,这个选项什么时候勾选,什么时候不勾选?

4 byte interrupt frame Size,
因为cpu是32位,这个选项勾选

cpu是8位,这个选项不勾选

不过32g12k 是32位,这个选项勾选

jwd 发表于 2025-2-8 15:15:32

angmall 发表于 2025-2-8 15:08
4 byte interrupt frame Size,
因为cpu是32位,这个选项勾选



我看stc32的有些例程也没有勾选,自己下载下来后勾选反而有警告
页: 1 [2] 3
查看完整版本: #打卡学习贴 记录32g12k的学习研究过程