找回密码
 立即注册
查看: 184|回复: 20

擎天柱@AI8051U核心板,搭建学习板做试验

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 08:33:30 | 显示全部楼层 |阅读模式
96492371e584ece88f0808d0d719a928.jpg

第一步数码管显示
c0dd9cf9319b2d64c2ff0f6a705d485e.jpg

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:429
  • 最近打卡:2026-06-09 08:29:07

853

主题

1万

回帖

2万

积分

管理员

积分
23526
发表于 2026-5-2 09:58:30 | 显示全部楼层
截图202605020957033376.jpg

用【STCAI-万能实验板】做实验,DIY 拿奖励,500元/人,前20名 ! - 做实验拿奖励@STCAI万能板,500元 国芯人工智能技术交流网站 - AI32位8051交流社区

STCAI-万能实验板-V2.3,支持 封装形式/接口:
LQFP48, LQFP32,DFN8;
TSSOP28/24/20/16/14;
SOP28/24/20;
WSOP16/8;
SOP16/8;
SOT23-6/5/4/3;
DIP40/28/20/16/8;

贴片 电阻 / 电容 也可直接焊在插件的2个焊盘之间;
TF卡 插座,FPC接口
FPC焊接/插座支持间距:

0.5mm、0.62mm、0.65mm、0.7mm、0.8mm

截图202605020957332848.jpg

www.STCAIMCU.com, 论坛注册网友,
使用 STC强大的 Ai8051U 取代 经典的 STC89C52 系列
STCAI-万能实验板 上设计各种实验取代传统实验箱

STC8H8K64U, STC32G12K128, 各种丰富的应用,
开源程序原理图,
www.STCAIMCU.com 开源

上传视频及各种图片,并发表到 B站 等:
   1 ~ 20名   优秀积极 参与者, 可获得 500元 的奖励 !
21 ~ 50名   优秀积极 参与者, 可获得 300元 的奖励 !
50 ~ 100名 优秀积极 参与者, 可获得 200元 的奖励 !


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 08:36:05 | 显示全部楼层
/*-------------
利用擎天柱搭建学习板做试验,主控芯片AI8051U,数码管用4位共阳数码管显示,
----------------*/
#include "CONFIG.H"

u8 SEG_BUF[3] = {11,11,11};        //数码管显示数组默认不显示
u8 SEG_Point[] = {0,0,0};        //小数点显示数组,0 - 不显示,1 - 显示.
u8 Dis_Index = 0;                        //数码管扫描索引

void Timer0_Init(void)                //1000微秒@24.000MHz
{
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0x30;                                //设置定时初始值
        TH0 = 0xF8;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}
void main()
{
        P_SW2 |=  0x80;        //访问XSFR
       
        P0M0 = 0;        P0M1 = 0;
        P1M0 = 0;        P1M1 = 0;       
        P2M0 = 0;        P2M1 = 0;       
        P3M0 = 0;        P3M1 = 0;       
        P4M0 = 0;        P4M1 = 0;
        P5M0 = 0;        P5M1 = 0;
       
        Timer0_Init();
        Seg_Init();
        EA = 1;
       
        while(1)
        {
                SEG_BUF[0] = 1;
                SEG_BUF[1] = 2;
                SEG_BUF[2] = 3;
        }
}

void Timer0_Isr(void) interrupt 1
{
        if(++Dis_Index==3)
        {
                Dis_Index=0;
               
        }
        Seg_Display(SEG_BUF[Dis_Index],Dis_Index,SEG_Point[Dis_Index]);
}
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 08:39:07 | 显示全部楼层
#include "SEG.H"

sbit P_COM1 = P4^0;
sbit P_COM2 = P4^5;
sbit P_COM3 = P4^6;

sbit P_SEGA = P0^2;
sbit P_SEGB = P0^0;
sbit P_SEGC = P0^6;
sbit P_SEGD = P0^4;
sbit P_SEGE = P0^3;
sbit P_SEGF = P0^1;
sbit P_SEGG = P0^7;
sbit P_SEGH = P0^5;

u8 code SEG_TABLE[] = {
  0xa0,    /*  "0", 0 */
  0xbe,    /*  "1", 1 */
  0x62,    /*  "2", 2 */
  0x2a,    /*  "3", 3 */
  0x3c,    /*  "4", 4 */
  0x29,    /*  "5", 5 */
  0x21,    /*  "6", 6 */
  0xba,    /*  "7", 7 */
  0x20,    /*  "8", 8 */
  0x28,    /*  "9", 9 */
  0x7F,    /*  "-", 10 */
  0xFF,    /*  " ", 11 */

};

u8 Seg_Addr[3]={0x01,0x20,0x40};        //数码管位码显示数组

void Seg_Init()
{
        P0M0 = 0x00; P0M1 = 0x00;                 //P0口准双向口
        P4M0 = 0x61; P4M1 = 0x00;       //P4口 推挽输出
       
        P_COM1 = 0;
        P_COM2 = 0;
        P_COM3 = 0;
       
        P0 = 0xFF;
}

void Seg_Display(dat,addr,point)
{
        Seg_Init();
       
        P4 |= Seg_Addr[addr];
        if(point == 1)
        {
                P0 = SEG_TABLE[dat] & 0xDF;
               
        }
        else
        {
                P0 = SEG_TABLE[dat];
        }
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:274
  • 最近打卡:2026-06-09 07:37:05
已绑定手机

43

主题

555

回帖

2342

积分

金牌会员

DIY玩家

积分
2342
发表于 2026-5-2 14:24:12 | 显示全部楼层
可尝试使用
截图202605021416469460.jpg

根据接线程度选择和裁剪
永怀这学徒心
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 18:53:24 | 显示全部楼层
第二步,旋转编码器,


#include "CONFIG.H"

sbit Rotary_A = P3^7;
sbit Rotary_B = P3^6;

int Rotary_Read_Data;                 //旋转编码器数据缓存

u8 SW_Tmp;                        //旋转编码器的4种状态
u8 SW_Tmp0;
u8 SW_Tmp1;
u8 SW_Tmp2;

#define         KEYINPUT P32                //按键输入为P32

#define         KEY_State0  0       //按键的状态0---3,4种状态
#define         KEY_State1  1      
#define         KEY_State2  2      
#define         KEY_State3  3      

//========================================================================
// 函数: 旋转编码器初始化函数
// 描述:
// 参数:
// 返回:
// 备注:
//========================================================================
void Rotary_Init()
{
        P3M0 &= ~0xc4; P3M1 &= ~0xc4;

        SW_Tmp = P3 & 0xC0;
        SW_Tmp0 = SW_Tmp;
        SW_Tmp1 = SW_Tmp;
        SW_Tmp2 = SW_Tmp;
}
//========================================================================
// 函数: 旋转编码器扫描函数
// 描述: 通过4个变量存储编码器的4种状态来判断旋转编码器的旋转方向
// 参数: 无
// 返回: 无
// 备注:
//========================================================================

void Rotary_Scan()
{
        SW_Tmp2 = SW_Tmp1;
        SW_Tmp1 = SW_Tmp0;
        SW_Tmp0 = P3 & 0xC0;
        if((SW_Tmp2 == SW_Tmp1) && (SW_Tmp2 == SW_Tmp0))        //连续三次采样结果相同
        {
                SW_Tmp = (SW_Tmp ^ SW_Tmp0) & SW_Tmp;
                if((SW_Tmp & 0x80) != 0)
                {
                        if((SW_Tmp0 & 0x40) != 0)
                        {
                                Rotary_Read_Data++;
                        }
                        else Rotary_Read_Data--;
                }
                SW_Tmp = SW_Tmp0;
        }
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 18:55:55 | 显示全部楼层



旋转编码器正转数字增加,反转数字减小
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 18:58:14 | 显示全部楼层
第三步是按键功能
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-2 21:25:04 | 显示全部楼层
ZIJIN*** 发表于 2026-5-2 18:53
第二步,旋转编码器,

这个旋转编码器扫描函数是按照梁工的代码写的,以前学的代码发现有失步的情况,梁工这个代码又简洁又清析,非常完美.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2026-06-09 08:04:25
已绑定手机

8

主题

192

回帖

1458

积分

金牌会员

积分
1458
发表于 2026-5-4 07:52:32 | 显示全部楼层

这个可以好,可以试试
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-6-10 05:50 , Processed in 0.078778 second(s), 91 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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