STC8G1K08A求助大佬帮写个简单的闪灯程序入行小白学习参考用
求助大佬使用过STC8G1K08A的帮写个简单的闪灯程序码(第7脚3秒开3秒关连续循环,即LED灯亮3秒灭3秒),入行小白参考用,我用Keil写的都不成功,不知道是否新建工程选的STC8G1K08 Series型号不是对应STC8G1K08A,因为建工程没有STC8G1K08A型号,入行小白参考学习用,感谢! 不对应没关系,可以用AT89S53 用 STC8G1K08 肯定可以的。你确认“下载”成功了吗?另外先别急着闪,先让一个脚固定输出 1 或者 0,用万用表量一下,确认下载并运行成功。
https://bbs.21ic.com/icview-3447578-1-1.html 这么简单的自己搞定,如果连这都不想弄,那不要学单片机了 估计是个学生,要参加电子竟赛的选拔吧。 送你一程,以下为参考 1s 一次状态改变:
//========================================================================
// 头文件
//========================================================================
#include "type_def.h"
#include "STC8G.H"
#include <intrins.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//========================================================================
// 主时钟定义
//========================================================================
#define MAIN_Fosc 24000000L //定义主时钟
//定时器0做16位自动重装, 中断频率为1000HZ,1ms
#define T0_1mS (65536UL - (MAIN_Fosc / 1000UL)) //初值
u8 ucT0_1MS=0; // 10ms计时
//========================================================================
// 函数: Timer0_ISR_Handler
// 描述: Timer0中断函数.
// 参数: none.
// 返回: none.
//========================================================================
void Timer0_ISR_Handler (void) interrupt 1 //进中断时已经清除标志
{//1ms
// TODO: 在此处添加用户代码
ucT0_1MS++; // 10ms计时
}
void main(void)
{
u8 uc1s=0;
// IO
P3_MODE_IO_PU(GPIO_Pin_1|GPIO_Pin_2); //P3.1,P3.2 设置为准双向口
// 定时器
AUXR=0xC0; // 设置为 1T模式
//定时器0做16位自动重装, 中断频率为1000HZ,1ms
TMOD=0x00;
TL0=T0_1mS; // 初值
TH0=(T0_1mS)>>8; // 初值
TR0=1;
ET0=1;
EA = 1;
while(1)
{
if(ucT0_1MS>=10)
{
ucT0_1MS=0; // 10ms定时
uc1s++; // 1s 计时
}
if(uc1s>=100) // 1s
{
uc1s=0;
P31 =~P31;//测试点
P32 = ~P32; // 此处为1s/次,请根据自己的需求修改
}
}
} 先去下例程看看啊 本帖最后由 coody 于 2025-4-21 11:40 编辑
但凡花点时间学习,都能很容易实现:
main:
将P3.2设设置为输出;
while(1)
{
P32 = ~P32;
延时3秒;
}
我笑了,现在不是吹AI吗,这么容易和事AI就给你办了。
#include <STC8G.H>
sbit LED = P3^0;// 第7脚对应P3.0
void Delay3000ms() {// @11.0592MHz
unsigned int i, j;
for (i = 0; i < 3000; i++)
for (j = 0; j < 1000; j++);
}
void main() {
P3M0 = 0x00; // 准双向模式
P3M1 = 0x00;
LED = 0; // 初始亮
while(1) {
LED = ~LED; // 翻转状态
Delay3000ms();
}
} #include <STC8G.H>
sbit LED = P3^0;// 假设第7脚对应P3.0(需根据实际封装确认引脚映射)^^
// 定时器初始化
void Timer0_Init() {
TMOD = 0x01; // 定时器0工作模式1(16位定时)
TH0 = 0xD8; // 初始值设置(11.0592MHz下50ms中断一次)^^
TL0 = 0xF0;
ET0 = 1; // 允许定时器0中断
EA = 1; // 全局中断使能
TR0 = 1; // 启动定时器0
}
volatile unsigned int count = 0; // 中断计数
void main() {
P3M0 = 0x00; // 配置P3为准双向模式^^
P3M1 = 0x00;
LED = 0; // 初始状态为亮
Timer0_Init();
while(1);
}
// 定时器0中断服务函数
void Timer0_ISR() interrupt 1 {
TH0 = 0xD8; // 重新加载初值
TL0 = 0xF0;
if (++count >= 60) {// 50ms*60=3秒
count = 0;
LED = ~LED; // 翻转LED状态
}
} 最好是自己看看STC-ISP提供的范例,学一下定时器计时或延时程序,先试一下LED引脚翻转能不能实现,再依次填充
页:
[1]