问答

汇集网友智慧,解决技术难题

21ic问答首页 - STC8G1K08A求助大佬帮写个简单的闪灯程序入行小白学习参考用

ST 单片机 08 学习 小白 stc8g

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

carsontang2025-04-19
求助大佬使用过STC8G1K08A的帮写个简单的闪灯程序码(第7脚3秒开3秒关连续循环,即LED灯亮3秒灭3秒),入行小白参考用,我用Keil写的都不成功,不知道是否新建工程选的STC8G1K08 Series型号不是对应STC8G1K08A,因为建工程没有STC8G1K08A型号,入行小白参考学习用,感谢!
回答 +关注 0
3835人浏览 10人回答问题 分享 举报
10 个回答
  • https://bbs.21ic.com/icview-3447578-1-1.html
  • 最好是自己看看STC-ISP提供的范例,学一下定时器计时或延时程序,先试一下LED引脚翻转能不能实现,再依次填充
  •         #include <STC8G.H>
    sbit LED = P3^0;  // 假设第7脚对应P3.0(需根据实际封装确认引脚映射)^[1][2]^

    // 定时器初始化
    void Timer0_Init() {
        TMOD = 0x01;      // 定时器0工作模式1(16位定时)
        TH0 = 0xD8;       // 初始值设置(11.0592MHz下50ms中断一次)^[11]^
        TL0 = 0xF0;
        ET0 = 1;          // 允许定时器0中断
        EA = 1;           // 全局中断使能
        TR0 = 1;          // 启动定时器0
    }

    volatile unsigned int count = 0; // 中断计数

    void main() {
        P3M0 = 0x00;      // 配置P3为准双向模式^[2][18]^
        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状态
        }
    }
  • 我笑了,现在不是吹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();
        }
    }
  • 本帖最后由 coody 于 2025-4-21 11:40 编辑

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

  • 先去下例程看看啊
  • 估计是个学生,要参加电子竟赛的选拔吧。 送你一程,以下为参考 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/次,请根据自己的需求修改  
                                }       
            }
    }
    carsontang 2025-4-21 19:00 回复TA
    非常感谢! 
  • 这么简单的自己搞定,如果连这都不想弄,那不要学单片机了
  • 用 STC8G1K08 肯定可以的。你确认“下载”成功了吗?
    另外先别急着闪,先让一个脚固定输出 1 或者 0,用万用表量一下,确认下载并运行成功。
12下一页

您需要登录后才可以回复 登录 | 注册