小涵子爸爸 发表于 2023-12-28 19:25:01

立创EDA很简单的,一学就会

Crystalline 发表于 2023-12-28 20:13:00

第九集
静态数码管的使用

数码管可以分为共阴和共阳两种,本质上就是多段LED灯




P67P66P65P64P63P62P61P60

dpgfedcba
011000000
111111100
210100100
310110000
410011001
510010010
610000010
711111000

8 1 00 0 0 0 0 0
9 1 0 0 0 1 0 0 0
这是共阳极数码管段码表,共阴极就是按位取反
给要显示的位选口赋1,把上表的二进制数转化成16进制或10进制存放在数组里面,赋值给P6口就可以让数码管显示相应的数字了!




Crystalline 发表于 2023-12-29 13:30:19

第十集

数码管的动态显示
数码管动态显示的原理就是利用人眼分辨不出50HZ以上的刷新率

只要让相邻两个数码管亮的间隔为1ms,在我们视角里它就是同时点亮的。
同时点亮八个数码管,逻辑就是:位选——段选——1ms延时——位选....
有一点我不明白,能不能让这个数码管亮的间隔更小呢?1us可以吗?

后面冲哥又以免单计数器给我们实战演练了一下动态数码管的应用,学一个东西马上就去实践它,好的教学!!!




Crystalline 发表于 2023-12-29 14:50:10

第十一集

定时器的使用




delay函数占用CPU大量时间,利用定时器中断可以定时进中断,提高CPU的运行效率
冲哥举了一个很形象的例子,主程序:你在背书 中断:妈妈让你5min后去看看锅里的汤有没有烧干
而如果不用中断表示的话,那就是 主程序:你在背书,过5min后再去看看锅里的汤有没有烧干
很明显你背书的时间是不确定的,中断可以打断你的背书,5min后立马去看看水有没有烧干,再回来继续背
而如果不用中断,你就要等背完书再去看看水有没有烧干,说不定那个时候水已经烧干了呢?




使用定时器0定时要把TMOD中的清零,分频与不分频取决于T0x12,计数值相差12倍





定时时间计算方法:




配置定时器0进行1ms定时,定时器0中断号为1,中断处理函数要加上interrupt 1,函数名可以随便起
这样就配置好了1ms的定时器中断
计算定时长度太麻烦的话可以使用stc-isp软件






神农鼎 发表于 2023-12-29 14:54:05

建议立即 【免费+包邮送】实验箱,提高学习效率


深圳国芯人工智能有限公司-工具软件 (stcai.com)



lzl1okOK 发表于 2023-12-29 15:55:11

rengran 发表于 2023-12-28 10:54
图1




我的板子在定时器里调用printf可以使用,但是在主函数里会卡在哪里是咋回事?

rengran 发表于 2023-12-29 16:29:00

lzl1okOK 发表于 2023-12-29 15:55
我的板子在定时器里调用printf可以使用,但是在主函数里会卡在哪里是咋回事? ...

你把你的主程序和定时器的程序贴上来看看才能分析一下,不然看见你的问题有点蒙

lzl1okOK 发表于 2023-12-29 16:34:18

在外面等下回去就贴上来一起研究下

Crystalline 发表于 2023-12-30 16:56:52

本帖最后由 Crystalline 于 2023-12-30 16:57 编辑

感谢STC!实验箱已经在路上了!如此良心!不愧是国产单片机/MCU的领航者,1T 8051单片机的领导者,32位8051单片机的领导者!
第十二集
计数器的使用
上一节课用的是定时器0作为定时器的模式,这节课是作为计数器的模式




定时器是系统内部时钟进行计数
计数器就是通过外部引脚输入的脉冲信号计数,可以借助编码器用于电机测速
冲哥利用了按键模拟脉冲信号,要配置内部引脚的上拉电阻才可以做到电平从高到低的转变
stc-isp软件中有快速配置的方法


看冲哥视频,是脉冲下降沿计数,按键按下,电平由高-低-高,有一个下降沿
计数溢出产生中断,在中断中把LED引脚电平取反
但是如果实际中要用到上升沿或者双边沿计数怎么办?怎么配置呢?想请教一下各位
手上有一个旋转编码器,就只能用编码器测试一下了
这里用的是定时器1作为串口1的波特率发生器,定时器0计数,不断向串口发送当前计数值
给大家看一下

Crystalline 发表于 2023-12-30 17:02:00

Crystalline 发表于 2023-12-30 16:56
感谢STC!实验箱已经在路上了!如此良心!不愧是国产单片机/MCU的领航者,1T 8051单片机的领导者,32位8051 ...
#include <STC32G.H>
#include <stdio.h>
unsigned int count = 0;

void System_Init()
{
      EAXFR = 1;
      CKCON = 0x00;
      WTST = 0x00;
      //高阻输入模式
      P3M0 = 0x00; P3M1 = 0x10;
      EA = 1;
}
void Uart1Init(void)                //9600bps@24.000MHz
{
      SCON = 0x50;                //8位数据,可变波特率
      AUXR |= 0x40;                //定时器时钟1T模式
      AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
      TMOD &= 0x0F;                //设置定时器模式
      TL1 = 0x8F;                        //设置定时初始值
      TH1 = 0xFD;                        //设置定时初始值
      ET1 = 0;                        //禁止定时器中断
      TR1 = 1;                        //定时器1开始计时
}
void Timer0_Count()
{
      TMOD = TMOD|0x04; // 16位计数模式
      TL0 = 0xff;
      TH0 = 0xff;
      ET0 = 1;
      TR0 = 1;
}
void Timer0_handler() interrupt 1
{
      count++;
}
void UART_SendByte(unsigned char Byte)
{
      SBUF = Byte;
      while(!TI);
      TI = 0;
}
void main()
{
      System_Init();
      Uart1Init();
      Timer0_Count();
      while(1)
      {
                UART_SendByte((unsigned char)(count>>8));
                UART_SendByte((unsigned char)count);               
      }
}
页: 1 2 [3] 4
查看完整版本: STC32单片机学习记录 | 建议立即 【免费+包邮送】实验箱,提高学习效率