找回密码
 立即注册
查看: 394|回复: 2

转帖:新手的IAR C++ FOR 8051 对STC8H8K64U单片机的最简单C++例程

[复制链接]
  • TA的每日心情
    开心
    昨天 09:31
  • 签到天数: 158 天

    [LV.7]常住居民III

    5

    主题

    87

    回帖

    1113

    积分

    荣誉版主

    积分
    1113
    发表于 2023-11-20 10:28:55 | 显示全部楼层 |阅读模式
    //新手的IAR C++ (V10.20) FOR 8051 对STC8H8K64U单片机的最简单C++编程,欢迎指正 autopccopy (itkw_com) 2022.09.09;10.05学习数码之家的网友指正Init()的bug

    //C语言是面向过程的,而C++是面向对象的。C++:是C语言的继承。理论上C语言都可在C++中运行。但C++有三大特性:封装、继承和多态(嵌入式C++有简化)
    //目前支持8051的好像仅有IAR C_C++ FOR 8051软件(KEIL C51 及SDCC等是不支持C++的, MDK是支持ARM的C++),IAR的官方手册下载:https://wwwfiles.iar.com/8051/webic/doc/EW8051_CompilerGuide.pdf
    //另可参考文档《IAR 8051 C/C++ 概述 - 以及使用C++ 相比C 的提升》:https://blog.csdn.net/Etberzin/article/details/121287492
    //STC的 IAR 8051 例程(暂好像未C++特性的):http://www.stcmcudata.com/OpenSource/STC8H-IAR.ZIP
    //网上8051 C++的例程非常少,本例只是一个最简单的例子,抛砖引玉。 以IAR 8051 V10.20 试用版 在STC 打狗棍最小系统板 验证成功。

    extern "C"  //此处在C++中兼容C代码:包含头文件
    {
    #include "ioSTC8H.h" //STC8头文件
    }

    typedef unsigned char u8;
    typedef unsigned int  u16;
    typedef unsigned long u32;


    class LED_Class1  //建立一个LED的类
    {
      private:        //私有:成员只能被该类的成员函数访问
      u8 GPIO_Pin;     //P口的引脚序号(本例占用P1口)

      public:         //公有:成员可以在类外访问
      LED_Class1(u8 PinX)
      {
       LED_Class1::GPIO_Pin = PinX;  //::为C++中的作用域符号(后面GPIO_Pin是该类的成员)
      }

      void Init(void)  //IO模式初始化:上电默认为高阻模式,本例暂设置为开漏 模式 (低电平)驱动LED
      {
       //GPIO_OC(GPIO_Pin);
       P3M0 |= 1<<GPIO_Pin;
       P3M1 |= 1<<GPIO_Pin;
      }

      void Off(void) //设置该IO为高电平关闭LED
      {
       //GPIO_SetBits(GPIO_Pin);
       P3 |= 1 <<GPIO_Pin;
      }

      void On(void) //设置该IO为低电平点亮LED
      {
       //GPIO_ResetBits(GPIO_Pin);
       P3 &= ~(1<<GPIO_Pin);
      }
    };


    void delay()  //延时函数
    {
      u32 i=10000;
      while(i--);
    }

    int main(void) //主函数
    {
      //定义2个LED
      LED_Class1 LED1(2); //
      LED_Class1 LED2(3); //

      //初始化:本例暂使用开漏OC模式,低电平点亮LED
      LED1.Init();
      LED2.Init();

      while(1) //2个LED交错闪烁
      {
        LED1.On();
        LED2.Off();
        delay();

        LED1.Off();
        LED2.On();
        delay();
      }
    }


    IAR8051_C  .png
    STC8H8K64U_C  最简单例程.png
    STC8H8K64U_C  例程运行结果.gif
    STC8H8K64U打狗棒_C  最简单例程运行结果.jpg

    STC8H-IAR_8051_C _demo_codeA.zip

    2.35 MB, 下载次数: 8

    (仅供参考,欢迎探讨)
    回复 送花

    使用道具 举报

  • TA的每日心情
    郁闷
    2023-12-21 13:46
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    1

    回帖

    20

    积分

    新手上路

    积分
    20
    发表于 2023-11-21 12:50:49 | 显示全部楼层
    有 STC32G 能用IAR的资料么?

    点评

    据我所知,STC32目前暂只能使用 KEIL C251编译器。  详情 回复 发表于 2023-11-21 15:17
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    昨天 09:31
  • 签到天数: 158 天

    [LV.7]常住居民III

    5

    主题

    87

    回帖

    1113

    积分

    荣誉版主

    积分
    1113
     楼主| 发表于 2023-11-21 15:17:22 | 显示全部楼层
    zhw618 发表于 2023-11-21 12:50
    有 STC32G 能用IAR的资料么?

    据我所知,STC32目前暂只能使用 KEIL C251编译器。
    (仅供参考,欢迎探讨)
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-20 03:14 , Processed in 0.061676 second(s), 43 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表