【STC8G1K08A - 点亮一颗LED灯 - A1- 2025/3/16】
这里需要注意的是:你必须去学习电路原理知识!否则,你很难理解程序的意思!这里简单说一下:我们常见的灯都是有正负极的!所以在两端给正-负就可以把灯点亮!(注意:LED灯所能承载的功率是有限的!如果,你还是不明白是什么意思!请学习这个链接:电路设计!1.看懂芯片手册GPIO寄存器的每个bit的作用!2.掌握GPIO寄存器配置输出模式,同样更换端口,也要掌握配置输出模式方法!温馨提示:下一站,将会讲解I
STC8G系列文章目录
提示:本内容仅供学习,切勿商用!
在学习STC8G1K08A单片机之前,环境搭建是必不可少的一步,这里不在赘述Keil软件、STC8G头文件安装、文件创建的过程!
本文主要内容:根据芯片手册、用户手册来掌握编程思路!
本人只是一个普通的嵌入式低级(初级)玩家,文章主要针对新手,所以大佬要是发现文中有何不妥之处,还请口下留情,若能指出,我一定虚心改正。
前言

一、点亮LED的原理?
这里需要注意的是:你必须去学习电路原理知识!否则,你很难理解程序的意思!
这里简单说一下:我们常见的灯都是有正负极的!所以在两端给正-负就可以把灯点亮!(注意:LED灯所能承载的功率是有限的!)
如果,你还是不明白是什么意思!
请学习这个链接: 电路设计 !
二、代码分析和手册查询
1.代码(已跑通)
代码如下:
#include <STC8G.H> //进入安装目录INC查询头文件
int t1 = 0;
void TM0_Isr() interrupt 1
{
t1++;
if(t1 == 1000)
{
P30=!P30;
t1= 0;
}
}
void main()
{
P3M0 = 0x93;
P3M1 = 0x94;
P5M0 = 0x00;
P5M1 = 0x00;
TMOD = 0x00;
TL0=0x66;
TH0=0xfc;
TR0=1;
ET0=1;
EA=1;
while (1);
}
代码数量不多,这里烧录过程,请学习这个链接: 博主:那些年的代码!
这段代码的主要功能是利用 STC8G 单片机的定时器 0(Timer 0)来产生一个周期性的信号,通过定时器中断实现每隔一定时间对 P3.0 引脚的电平进行翻转,从而在 P3.0 引脚上输出一个方波信号。
2.分析和查询
芯片的手册: STC8G1K08A !
STC8G1K08A 的管脚,如下图所示:

这里说明一下:上面代码是控制P3.0引脚输出高低电平,使得LED延时翻转,用到了定时器进行延时,具体延时多少,哈哈!你暂时不需要知道,等到后续文章及你的实力差不多了,自然就明白了!
我这里,想要把P3.0改为P3.2来控制LED的亮灭,需要看以下图片:

那么,根据图片可知,我只需要关心P3.2的寄存器P3M1和P3M0对应的位,进行操作就行!对应改为P3M1=0,P3M0=1。
原始的代码:
P3M0 = 0x93;
P3M1 = 0x94;
将它们十六进制转换为二进制:
P3M0 = 0x93 = 1001 0011B
P3M1 = 0x94 = 1001 0100B
低位对应P3.0,高位对应P3.7。
修改后的代码:
P3M0 = 0x04;// 0000 0100B
P3M1 = 0x00;// 0000 0000B
此时 P3M1 的第 2 位为 0,P3M0 的第 2 位为 1,满足推挽输出的模式设置要求,即 P3.2 引脚被设置为推挽输出模式。
总结
1.看懂芯片手册GPIO寄存器的每个bit的作用!2.掌握GPIO寄存器配置输出模式,同样更换端口,也要掌握配置输出模式方法!
温馨提示:下一站,将会讲解I/O口在芯片内部电路的构成,并介绍他们各自的作用!同时,讲解按键控制LED灯亮灭!
更多推荐



所有评论(0)