数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1306|回复: 8

[C51] 收到STC的Ai8051擎天柱最小系统板了,32位的51单片机

[复制链接]
发表于 2025-1-9 20:54:06 | 显示全部楼层 |阅读模式
看到坛子老哥收到了擎天柱就也申请了一个:免费申请的国芯擎天柱核心板开箱+

今天到货,盒子真大,泡泡棉真多,板子好小




惯例点灯,这是个虚拟灯,直接测试了串口通讯、IO操作、按键、延时:


记录烧录过程:
1,打开例程编译好hex文件;
2,打开STC-ISP软件选择对应的MCU,按着P3.2按键给板子插USB上电,
等软件识别出来(HID1)USB-Writer后松手,即可进行程序烧录:


3,打开软件的虚拟外设,即可看到跑马灯效果:


看看Ai8051U的功能,看着很厉害的样子:

欣赏一下官方例程:
  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC 1T Series MCU Demo Programme -------------------------------*/
  4. /* --- Mobile: (86)13922805190 ----------------------------------------*/
  5. /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
  6. /* --- Tel: 86-0513-55012928,55012929,55012966 ------------------------*/
  7. /* --- Web: www.STCAI.com ---------------------------------------------*/
  8. /* --- BBS: www.STCAIMCU.com  -----------------------------------------*/
  9. /* --- QQ:  800003751 -------------------------------------------------*/
  10. /* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序            */
  11. /*---------------------------------------------------------------------*/

  12. /*************  功能说明    **************

  13. 本例程基于Ai8051U核心转接板(擎天柱)进行编写测试。

  14. 程序演示跑马灯效果,输出低驱动。

  15. 通过设置“VirtualDevice”定义值切换软硬件显示方式:
  16. VirtualDevice=0:驱动核心板上的P2口硬件LED灯;
  17. VirtualDevice=1:驱动STC-ISP软件调试接口里面的LED虚拟设备(需要在HID助手里打开对应的设备)。

  18. 此外程序演示两种复位进入USB下载模式的方法:
  19. 1. 通过每1毫秒执行一次“KeyResetScan”函数,实现长按P3.2口按键触发MCU复位,进入USB下载模式。
  20.    (如果不希望复位进入USB下载模式的话,可在复位代码里将 IAP_CONTR 的bit6清0,选择复位进用户程序区)
  21. 2. 通过加载“stc_usb_hid_32.lib”库函数,实现使用STC-ISP软件发送指令触发MCU复位,进入USB下载模式并自动下载。

  22. 下载时, 选择时钟 24MHZ (用户可自行修改频率)。

  23. 当用户使用硬件 USB 对 STC32G 系列进行 ISP 下载时不能调节内部 IRC 的频率,
  24. 但用户可用选择内部预置的 12 个频率
  25. (分别是 5.5296M、 6M、 11.0592M、 12M、 18.432M、 20M、 22.1184M、
  26. 24M、27M、 30M、 33.1776M、 35M)。
  27. 下载时用户只能从频率下拉列表中进行选择其中之一,而不能手动输入其他频率。
  28. (使用串口下载则可用输入 4M~35M 之间的任意频率)。

  29. ******************************************/

  30. #include "../comm/Ai8051U.h"  //包含此头文件后,不需要再包含"reg51.h"头文件
  31. #include "../comm/usb.h"     //USB调试及复位所需头文件

  32. #define MAIN_Fosc       24000000L   //定义主时钟
  33. #define Timer0_Reload   (65536UL -(MAIN_Fosc / 1000))       //Timer 0 中断频率, 1000次/秒

  34. #define VirtualDevice        1    //0: 驱动硬件LED;  1: 驱动调试接口LED-DIP64虚拟设备

  35. //USB调试及复位所需定义
  36. char *USER_DEVICEDESC = NULL;
  37. char *USER_PRODUCTDESC = NULL;
  38. char *USER_STCISPCMD = "@STCISP#";                      //设置自动复位到ISP区的用户接口命令

  39. //P3.2口按键复位所需变量
  40. bit Key_Flag;
  41. u16 Key_cnt;

  42. u8 index=0;
  43. u8 code LED_Buf[32][9]=
  44. {
  45.    //Mask  P0   P1   P2   P3   P4   P5   P6   P7
  46.     {0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.0 */
  47.     {0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.1 */
  48.     {0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.2 */
  49.     {0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.3 */
  50.     {0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.4 */
  51.     {0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.5 */
  52.     {0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.6 */
  53.     {0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff},  /* P0.7 */
  54.     {0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.0 */
  55.     {0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.1 */
  56.     {0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.2 */
  57.     {0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.3 */
  58.     {0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.4 */
  59.     {0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.5 */
  60.     {0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.6 */
  61.     {0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff,0xff},  /* P1.7 */
  62.     {0xff,0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff},  /* P3.0 */
  63.     {0xff,0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff},  /* P3.1 */
  64.     {0xff,0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff},  /* P3.2 */
  65.     {0xff,0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff},  /* P3.3 */
  66.     {0xff,0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff},  /* P3.4 */
  67.     {0xff,0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff},  /* P3.5 */
  68.     {0xff,0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff},  /* P3.6 */
  69.     {0xff,0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff},  /* P3.7 */

  70.     {0xff,0xff,0xff,0xfe,0xff,0xff,0xff,0xff,0xff},  /* P2.0 */
  71.     {0xff,0xff,0xff,0xfd,0xff,0xff,0xff,0xff,0xff},  /* P2.1 */
  72.     {0xff,0xff,0xff,0xfb,0xff,0xff,0xff,0xff,0xff},  /* P2.2 */
  73.     {0xff,0xff,0xff,0xf7,0xff,0xff,0xff,0xff,0xff},  /* P2.3 */
  74.     {0xff,0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff},  /* P2.4 */
  75.     {0xff,0xff,0xff,0xdf,0xff,0xff,0xff,0xff,0xff},  /* P2.5 */
  76.     {0xff,0xff,0xff,0xbf,0xff,0xff,0xff,0xff,0xff},  /* P2.6 */
  77.     {0xff,0xff,0xff,0x7f,0xff,0xff,0xff,0xff,0xff},  /* P2.7 */
  78. };

  79. void Timer0_Init(void);
  80. void delay_ms(u8 ms);
  81. void HardwareMarquee(void);
  82. void SoftwareMarquee(void);

  83. /******************** 主函数 **************************/
  84. void main(void)
  85. {
  86.     WTST = 0;  //设置程序指令延时参数,赋值为0可将CPU执行指令的速度设置为最快
  87.     P_SW2 |= EAXFR; //扩展寄存器(XFR)访问使能
  88.     CKCON = 0; //提高访问XRAM速度

  89.     RSTFLAG |= 0x04;   //设置硬件复位后需要检测P3.2的状态选择运行区域,否则硬件复位后进入USB下载模式

  90.     P0M1 = 0x00;   P0M0 = 0x00;   //设置为准双向口
  91.     P1M1 = 0x00;   P1M0 = 0x00;   //设置为准双向口
  92.     P2M1 = 0x00;   P2M0 = 0x00;   //设置为准双向口
  93.     P3M1 = 0x00;   P3M0 = 0x00;   //设置为准双向口
  94.     P4M1 = 0x00;   P4M0 = 0x00;   //设置为准双向口
  95.     P5M1 = 0x00;   P5M0 = 0x00;   //设置为准双向口
  96.     P6M1 = 0x00;   P6M0 = 0x00;   //设置为准双向口
  97.     P7M1 = 0x00;   P7M0 = 0x00;   //设置为准双向口

  98.     usb_init();
  99.     Timer0_Init();
  100.     IE2 |= EUSB;   //IE2相关的中断位操作使能后,需要重新设置EUSB
  101.     EA = 1;     //打开总中断
  102.    
  103.     while(1)
  104.     {
  105.         #if(VirtualDevice)
  106.         SoftwareMarquee();
  107.         #else
  108.         HardwareMarquee();
  109.         #endif
  110.     }
  111. }

  112. void SoftwareMarquee(void)
  113. {
  114.     if (DeviceState != DEVSTATE_CONFIGURED)  //如果USB配置没有完成,就直接退出
  115.         return;

  116.     //LED64_SendData(LED_Buf[index++], 9);     //控制DIP64的各个管脚上LED的状态
  117.     LED40_SendData(LED_Buf[index++], 9);     //控制DIP40的各个管脚上LED的状态
  118.     if(index >= 32) index = 0;

  119.     delay_ms(250);
  120. }

  121. void HardwareMarquee(void)
  122. {
  123.     P20 = 0;                //LED On
  124.     delay_ms(250);
  125.     P20 = 1;                //LED Off
  126.     P21 = 0;                //LED On
  127.     delay_ms(250);
  128.     P21 = 1;                //LED Off
  129.     P22 = 0;                //LED On
  130.     delay_ms(250);
  131.     P22 = 1;                //LED Off
  132.     P23 = 0;                //LED On
  133.     delay_ms(250);
  134.     P23 = 1;                //LED Off
  135.     P24 = 0;                //LED On
  136.     delay_ms(250);
  137.     P24 = 1;                //LED Off
  138.     P25 = 0;                //LED On
  139.     delay_ms(250);
  140.     P25 = 1;                //LED Off
  141.     P26 = 0;                //LED On
  142.     delay_ms(250);
  143.     P26 = 1;                //LED Off
  144.     P27 = 0;                //LED On
  145.     delay_ms(250);
  146.     P27 = 1;                //LED Off
  147.     P26 = 0;                //LED On
  148.     delay_ms(250);
  149.     P26 = 1;                //LED Off
  150.     P25 = 0;                //LED On
  151.     delay_ms(250);
  152.     P25 = 1;                //LED Off
  153.     P24 = 0;                //LED On
  154.     delay_ms(250);
  155.     P24 = 1;                //LED Off
  156.     P23 = 0;                //LED On
  157.     delay_ms(250);
  158.     P23 = 1;                //LED Off
  159.     P22 = 0;                //LED On
  160.     delay_ms(250);
  161.     P22 = 1;                //LED Off
  162.     P21 = 0;                //LED On
  163.     delay_ms(250);
  164.     P21 = 1;                //LED Off
  165. }

  166. //========================================================================
  167. // 函数: void delay_ms(u8 ms)
  168. // 描述: 延时函数。
  169. // 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
  170. // 返回: none.
  171. // 版本: VER1.0
  172. // 日期: 2022-6-3
  173. // 备注:
  174. //========================================================================
  175. void delay_ms(u8 ms)
  176. {
  177.     u16 i;
  178.     do{
  179.         i = MAIN_Fosc / 6000;
  180.         while(--i);   //6T per loop
  181.     }while(--ms);
  182. }

  183. //========================================================================
  184. // 函数: void Timer0_Init(void)
  185. // 描述: 定时器0初始化函数。
  186. // 参数: none.
  187. // 返回: none.
  188. // 版本: VER1.0
  189. // 日期: 2022-6-2
  190. // 备注:
  191. //========================================================================
  192. void Timer0_Init(void)
  193. {
  194.     // Timer0初始化
  195.     AUXR = 0x80;    //Timer0 set as 1T, 16 bits timer auto-reload,
  196.     TH0 = (u8)(Timer0_Reload / 256);
  197.     TL0 = (u8)(Timer0_Reload % 256);
  198.     ET0 = 1;    //Timer0 interrupt enable
  199.     TR0 = 1;    //Tiner0 run
  200. }

  201. //========================================================================
  202. // 函数: void KeyResetScan(void)
  203. // 描述: P3.2口按键长按1秒触发软件复位,进入USB下载模式。
  204. // 参数: none.
  205. // 返回: none.
  206. // 版本: VER1.0
  207. // 日期: 2022-6-11
  208. // 备注:
  209. //========================================================================
  210. void KeyResetScan(void)
  211. {
  212.     if(!P32)
  213.     {
  214.         if(!Key_Flag)
  215.         {
  216.             Key_cnt++;
  217.             if(Key_cnt >= 1000)                //连续1000ms有效按键检测
  218.             {
  219.                 Key_Flag = 1;                //设置按键状态,防止重复触发

  220.                 USBCON = 0x00;      //清除USB设置
  221.                 USBCLK = 0x00;
  222.                 IRC48MCR = 0x00;
  223.                
  224.                 delay_ms(10);
  225.                 IAP_CONTR = 0x60;   //触发软件复位,从ISP开始执行
  226.                 while (1);
  227.             }
  228.         }
  229.     }
  230.     else
  231.     {
  232.         Key_cnt = 0;
  233.         Key_Flag = 0;
  234.     }
  235. }

  236. //========================================================================
  237. // 函数: void timer0_int(void)
  238. // 描述: Timer0 1ms中断函数。
  239. // 参数: none.
  240. // 返回: none.
  241. // 版本: VER1.0
  242. // 日期: 2022-6-11
  243. // 备注:
  244. //========================================================================
  245. void timer0_int(void) interrupt 1  //1ms 中断函数
  246. {
  247. //    if (bUsbOutReady) //USB调试及复位所需代码
  248. //    {
  249. ////        USB_SendData(UsbOutBuffer,64);  //发送数据缓冲区,长度(接收数据原样返回, 用于测试HID)
  250. //        
  251. //        usb_OUT_done();
  252. //    }

  253.     KeyResetScan();   //P3.2口按键触发软件复位,进入USB下载模式,不需要此功能可删除本行代码
  254. }
复制代码


很好很强大,好评

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
 楼主| 发表于 2025-1-10 08:35:19 | 显示全部楼层
yu2ff@126 发表于 2025-1-10 08:27
8051都上AI了,不得了啊

Ai概念老火了,得往上靠啊,哈哈哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-1-10 11:03:10 | 显示全部楼层
vip2128 发表于 2025-1-10 10:57
不错 好好学习...................

老哥,你的都吃灰去了,我的不能不吃啊,哈哈哈哈
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-20 19:13 , Processed in 0.156001 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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