carsontang 发表于 2025-4-19 11:31

STC8G1K08A求助大佬帮写个简单的闪灯程序入行小白学习参考用

求助大佬使用过STC8G1K08A的帮写个简单的闪灯程序码(第7脚3秒开3秒关连续循环,即LED灯亮3秒灭3秒),入行小白参考用,我用Keil写的都不成功,不知道是否新建工程选的STC8G1K08 Series型号不是对应STC8G1K08A,因为建工程没有STC8G1K08A型号,入行小白参考学习用,感谢!

LcwSwust 发表于 2025-4-19 14:14

不对应没关系,可以用AT89S53

情场探花 发表于 2025-4-19 22:27

用 STC8G1K08 肯定可以的。你确认“下载”成功了吗?
另外先别急着闪,先让一个脚固定输出 1 或者 0,用万用表量一下,确认下载并运行成功。

丙丁先生 发表于 2025-4-20 08:47

https://bbs.21ic.com/icview-3447578-1-1.html

kxc2008 发表于 2025-4-21 08:14

这么简单的自己搞定,如果连这都不想弄,那不要学单片机了

bzxc41408 发表于 2025-4-21 09:23

估计是个学生,要参加电子竟赛的选拔吧。 送你一程,以下为参考 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/次,请根据自己的需求修改
                          }       
        }
}

zjk103 发表于 2025-4-21 10:29

先去下例程看看啊

coody 发表于 2025-4-21 11:37

本帖最后由 coody 于 2025-4-21 11:40 编辑

但凡花点时间学习,都能很容易实现:
main:
将P3.2设设置为输出;
while(1)
{
    P32 = ~P32;
    延时3秒;
}

mwxpk 发表于 2025-4-25 12:06

我笑了,现在不是吹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();
    }
}

mwxpk 发表于 2025-4-25 12:08

        #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状态
    }
}

咕咕呱呱孤寡 发表于 2025-4-25 14:51

最好是自己看看STC-ISP提供的范例,学一下定时器计时或延时程序,先试一下LED引脚翻转能不能实现,再依次填充
页: [1]
查看完整版本: STC8G1K08A求助大佬帮写个简单的闪灯程序入行小白学习参考用