神农鼎 发表于 2022-12-23 11:15:10

https://www.stcaimcu.com/data/attachment/forum/202212/23/102957wljpz5otlpvgznok.png
要提前打开内部上拉的 4K 电阻

千年老姚 发表于 2022-12-23 12:22:46

已收到姚总配发的STC全家福!接下来我会将之前的作业一些效果图以及视频发于此。
也请姚总帮我提高等级,以便让我上传视频!

神农鼎 发表于 2022-12-23 13:22:00

您已是金牌会员

神农鼎 发表于 2022-12-23 13:27:08

“开源广场及教学视频交流”版块已开通上传播放视频功能
【新提醒】论坛上传视频方法介绍 - 开源广场及教学视频交流 国芯论坛 (stcaimcu.com)

千年老姚 发表于 2022-12-24 19:58:30

本帖最后由 千年老姚 于 2023-1-4 19:23 编辑

各位晚上好!今天是2023考研第一天
听说英一特别难?:dizzy:
政治肖秀荣发挥依旧稳定:lol
刚才看完了第十二集,以下为简略版笔记
若笔记有误,请各位指正
第九章:数码管的静态使用
一.认识数码管
数码管为LED数码管,内部是由多个发光二极管封装在一起组成。
本质都是点亮内部LED来显示的,只要面板做好了,理论可以显示任意的字符或者图案。
开发板中带了两个四位数码管。
按发光二极管单元连接方式可以分为共阳极数码管和共阴极数码管,尾缀A标识共阳,K表示共阴。
共阳接通:某管给低电平
共阴接通:某管给高电平
开发板上:共阳数码管/
二.控制原理
今日任务:点亮最后一位8
使用P6和COM0即可点亮LED
COM0——P7.0
码表

P67P66P65P64P63P62P61P60十进制16进制
dpgfedcba
011000000192C0
111111001249F9
210100100164A4
310110000176B0
41001100115399
51001001014692
61000001013082
711111000248F8
81000000012880
91001000014490

三.数码管实现0-9的显示
1.用数组定义0-9的内码
2.尝试用延时实现0-9的循环显示
3.用按键控制数字的加或者减。
代码如下(省略部分头文件)
u8 SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
void main()
{
num = 0;
while(1)
{
P70 = 0 ;//开启一个数码管
P6 = SEG_Tab;//该数码管输出段码
num++;
delay_ms(1000);
if (num>9)
num = 0;
}
}

3.按键加减
#define KEY1 P32
#define KEY2 P33
#define BEEP P54
......
u8 SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
void main()
{
num = 0;
while(1)
{
P70 = 0 ;//开启一个数码管
P6 = SEG_Tab;//该数码管输出段码
if (KEY1 == 0)
{
delay_ms(10);
if (KEY1 == 0)
{
BEEP = 0;
delay_ms(10);
BEEP = 1;
while(KEY1 == 0)
if (num < 9)
{
num++;
}
}
}
if (KEY1 == 0)
{
delay_ms(10);
if (KEY2 == 0)
{
BEEP = 0;
delay_ms(10);
BEEP = 1;
while (KEY2 == 0)
if (num > 0)
{
num--;
}
}
}
}
}

自己需要学会取码,后期学习LCD会运用到。
总结:
1.了解数码管的数字内码的由来
2.学会数码管通过数组的方式获取数值。
课后练习:1.尝试使用数码管显示-   HJ    L   N   oP   Utr 等字母或符号。
2.通过一个按键设置数码管显示数字0-9循环,在按一下另一个按键的时候,数码管上显示的数字几,蜂鸣器就响几声。

千年老姚 发表于 2022-12-26 20:13:54

本帖最后由 千年老姚 于 2023-1-4 19:26 编辑

各位晚上好!
刚才看完了第十三集,以下为简略版笔记
若笔记有误,请各位指正
第十章:数码管的动态显示
1.数码管动态刷新的原理
后面附图
2.控制原理
注意:延时不能太短,人眼难以分辨50hz以上动态刷新
3.八位数码管的同时点亮
1.在上一节课的基础上,新增一个位码选择的数组
数组
P77      P76      P75      P74      P73      P72      P71      P70
1      2      3      4      5      6      7      8      十六进制
点1                0      1      1      1      1      1      1      1      7F
点2                1      0      1      1      1      1      1      1      BF      
点3                1      1      0      1      1      1      1      1      DF
点4                1      1      1      0      1      1      1      1      EF
点5                1      1      1      1      0      1      1      1      F7
点6                1      1      1      1      1      0      1      1      FB
点7                1      1      1      1      1      1      0      1      FD
点8                1      1      1      1      1      1      1      0      FE


2.调用数组选择位码

//以下省略部分头文件
u8 SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
u8 COM_Tab= {0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE} //点亮某个数码管
void main()
{
while(1)
{
P7 = COM_Tab;
P6 = SEG_Tab;
delay_ms(200);
P7 = COM_Tab;
P6 = SEG_Tab;
delay_ms(200);
P7 = COM_Tab;
P6 = SEG_Tab;
delay_ms(200);
P7 = COM_Tab;
P6 = SEG_Tab;
delay_ms(200);//显示0123
}
}

简略写法(省去部分头文件,函数定义):
while(1)
{
P7 = COM_Tab;
P6 = SEG_Tab;
delay_ms(200);
num++;
if(num > 7)
num = 0;
}

3.新建一个数组选择每个位需要显示的内容
//以下省略部分头文件
u8 SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
u8 COM_Tab= {0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE} //点亮某个数码管
u8 Show_Tab =
void main()
{
while(1)
{
P7 = COM_Tab;//位码的选择
P6 = SEG_Tab]; //需要显示数字的内码 赋给 P6
//num = 0 —> Show_Tab = 1 —> P6 = 0xF9
P6 = SEG_Tab;
delay_ms(200);
num++;
if(num > 7)
num = 0;
}
}

实战小练:简易10秒免单计数器
1.在前四位数码管上显示目标时间,即“ 10. 00 ”表示定时时间10秒钟
2.后四位显示当前的计时00.00,最小单位为10ms.
3.按下开始按钮后,每10ms最末尾的数字+1;直到按下结束按钮后停止计数。

//以下省略部分头文件
//u8 SEG_Tab = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9,参照上方码表
//带小数点段码:最高位- 0x80就可以
u8 SEG_Tab = { 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
u8 COM_Tab= {0X7F,0XBF,0XDF,0XEF,0XF7,0XFB,0XFD,0XFE}; //点亮某个数码管
u8 Show_Tab = {0,0,0,0,10,0,0,0};
u32 TimCount = 0;//计数单位1ms
bit RUN_State = 0 //开始运行/结束运行
void main()
{
while(1)
{

Show_Tab = 1;
Show_Tab = 10;
Show_Tab = 0;
Show_Tab = 0;


P7 = COM_Tab;//位码的选择
P6 = SEG_Tab]; //需要显示数字的内码 赋给 P6
//num = 0 —> Show_Tab = 1 —> P6 = 0xF9
P6 = SEG_Tab;
delay_ms(200);

if (RUN_State == 1)
{
TimCount++;
Show_Tab = TimCount/1000%10;
Show_Tab = TimCount/1000%10;//显示小数点和千位
Show_Tab = TimCount/100%10;   //取百位
Show_Tab = TimCount/10%10;//取十位

}

num++;
if(num > 7)
num = 0;

if (KEY1 == 0)
{
delay_ms(10);
if (KEY1 == 0)
{
BEEP = 0;
delay_ms(10);
BEEP = 1;
while(KEY1 == 0)
{
P7 = COM_Tab;
P6 = SEG_Tab];
delay_ms(200);
num++;
if(num > 7)
num = 0;
}
if (RUN_State == 0)
RUN_State = !RUN_State;
}
}

}
}

总结:
1.了解数码管怎么实现的动态显示。
2.学会每一位的数码管的任意内容的显示。
课后练习:
一、做一个简易时钟,功能如下
1.初始状态显示 00 - 00 - 00,分别作为时,分,秒
2.每隔一秒钟,秒+1,一分钟,分+1,以此类推
3.时间到达00 - 00 - 30的时候,蜂鸣响3秒钟表示闹钟

千年老姚 发表于 2022-12-26 20:50:45

这几天有点累 笔记质量有些下降。
我这周主要任务是上传作业视频给各位 以供各位参考。
今年考研数学太难了 我看的都头晕:dizzy:

千年老姚 发表于 2022-12-29 20:27:44

各位 我最终还是羊了 大家要注意身体

神农鼎 发表于 2022-12-29 21:13:46



【新提醒】STC89C516RD+ 40I-LQFP44复位管脚电压异常如何解决? - 电源/复位/省电模式/外部晶振内部时钟/PLL 国芯论坛 (stcaimcu.com)
发现都是相通的,保重,躺平

千年老姚 发表于 2023-1-1 18:34:22

昨天测得 还没好 继续养身体
页: 1 2 3 [4] 5
查看完整版本: 接下来我在这个帖子里准备发对冲哥视频做的笔记