找回密码
 立即注册
楼主: 浦江一水

初学51单片机的爱好者之入门佳配+擎天柱 (多项实验源码)

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:348
  • 最近打卡:2025-05-02 08:34:59

7

主题

281

回帖

1055

积分

金牌会员

积分
1055
发表于 2024-12-16 17:27:17 | 显示全部楼层
学习了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:494
  • 最近打卡:2025-05-02 09:16:59

30

主题

347

回帖

3480

积分

荣誉版主

积分
3480
发表于 2024-12-18 11:00:46 | 显示全部楼层
jun_*** 发表于 2024-12-16 10:55
哇塞,这个板子设计的好好看,请问这个一套总成本大概是多少啊?

感谢诸位坛友的浏览、点评和留言。
关于这套总成本,还未仔细计算过。
总体说吧,这是比较低廉的,一般而言:
开发板套件,加上运费,大概是20元出点头;
转40脚的核心板是国芯论坛官方赠送的,据最新信息,凡是国芯论坛的会员,只要申请,都可免费获得的;
如果配一块AI8051U_DIP40脚的直插芯片,也能用。可以用论坛心愿兑换,或者大约<5元左右一片;
如果配一块LCD1602字符显示屏,网上有机会3.5元左右就能买到;
如果配一块本实验所用到的ST7735驱动的128×160彩色显示屏,网上价格约10元上下;
......
总之,这是价格低廉的入门级的实验板。
对于初学者来说,她以较低的门槛,引领你进入奇妙的51单片机世界。
将来,你可能会拥有比较高级复杂些的开发板,然而这块经典而基础的学习板,她曾经陪伴你入门学习,也许会成为一段美好的回忆,是值得收藏的。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2025-04-27 10:40:24

11

主题

425

回帖

1971

积分

版主

积分
1971
发表于 2024-12-18 11:59:40 | 显示全部楼层
【免费 + 包邮 送】 送/申样/采购 可上班时间加 如下您对应地区的客服 QQ或微信联系
加STC华南区客服司经理QQ: 2234917869 ;  微信:18012226298  要求 【免费+包邮】 送, 还免费教仿真  
加STC华南区客服刘经理QQ: 3398500488 ;  微信:18106296592  要求 【免费+包邮】 送, 还免费教仿真  
加STC华南区客服佘经理QQ: 614777595;   微信:18106296591 要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服曹经理QQ: 1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服聂经理QQ: 2593903262; 微信:18106296598  要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服吴经理QQ: 1463035472; 微信:19952583954  要求 【免费+包邮】 送, 还免费教仿真
加STC西北区客服孙经理QQ: 1347154513 ;  微信:18106296593  要求 【免费+包邮】 送, 还免费教仿真
加STC华北区客服石经理QQ: 1638975601 ;  微信:19952583876  要求 【免费+包邮】 送, 还免费教仿真
加STC华中区客服唐经理QQ:2571301708 ; 微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
加STC东北区客服李经理QQ: 1017142298 ;  微信:19952583534  要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服曹经理QQ: 3897745450 ;  微信:18012226281 要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服吴经理QQ: 1463035472 ;  微信:19952583954 要求 【免费+包邮】 送, 还免费教仿真

工作时间:  8:30-12:00,13:00-17:30(周一 到 周五, 法定节假日除外)
【免费 + 包邮 送】 送/申样/采购传统电话热线:0513-55012928,0513-89896509,0513-55012929
2024/12/11, 统一安排【免费 + 包邮 送】服务人员
QQ:2269694595     微信:18106296594
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:265
  • 最近打卡:2025-05-01 07:25:06

0

主题

206

回帖

1522

积分

金牌会员

积分
1522
发表于 2024-12-18 12:11:22 | 显示全部楼层

浦江道友出手,精品也

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-02-15 19:19:04

13

主题

89

回帖

470

积分

中级会员

积分
470
发表于 2024-12-19 14:30:10 | 显示全部楼层
浦江*** 发表于 2024-12-18 11:00
感谢诸位坛友的浏览、点评和留言。
关于这套总成本,还未仔细计算过。
总体说吧,这是比较低廉的,一般而 ...

感谢您的回复和解答,希望后面学习STC能成为一段美好的回忆
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:494
  • 最近打卡:2025-05-02 09:16:59

30

主题

347

回帖

3480

积分

荣誉版主

积分
3480
发表于 2025-1-15 16:10:39 | 显示全部楼层
擎天柱+驱动四位数码管显示实验



这块“先悦”实验板配有四位数码管,其电路如图:
四位数码管电路.JPG

这是共阳极数码管,与STC32G12K128实验箱所配置的数码管电路一样,是由单片机IO直接驱动,没有经过595之类集成块驱动的。
四位数码管或八位数码管,其编程原理应该是相似的:
本实验电路由P0口驱动各数码笔划段,P1.3--P1.0四个IO分别驱动各位。
电路简单,可用动态扫描方式显示之。
而今实验用擎天柱核心板来驱动则四位数码管: 模拟时钟显示,显示笔段清晰均匀,效果还是不错的。
在此贴一下主程序代码和数码管驱动的核心代码,供初学单片机的坛友参考。

//********************************************************************************

// 名称: 擎天柱+先悦板+实验4位数码管动态扫描显示  Main.C
// 基于: 先悦SINYUE 单片机开发学习板 LED_4位共阳极数码管驱动
// 实验: AI8051U 取代 STC89C52 实现4位LED数码管字符串显示.
// 硬件: P0-8段数据 P10-P13-4位选  ( 24MHz主频 )
// 编程: 浦晓明(浦江一水) 2024-12-12
//********************************************************************************
#include "AI8051U.H"
#include "AI8051U_SYS.H"
#include "LED4D.H"


/************* 全局变量声明 **************/
char S[16];         //显示字符串缓存
unsigned char hour; //时
unsigned char min;  //分
unsigned char sec;  //秒


//=====================================================================
// 函数: void  delay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
void  delay_ms(unsigned int ms)
{ unsigned int i;
  do{ i = MAIN_Fosc / 10000;
      while(--i);
    } while(--ms);
}
/********************** 模拟RTC演示函数 ***********************/
void RTC(void)
{
  if(++sec >= 60)
  { sec = 0;
    if(++min >= 60)
    { min = 0;
      if(++hour >= 24) hour = 0;
    }
  }
  sprintf(S,"%02d.%02d",min,sec);  //组织字符串
  LED4D_Str(0,S);                  //送显示段码缓存   
}
/******************** 主函数 **************************/
void main(void)
{
  SYS_Init();       //系统初始化
  LED4D_Init();   //8数码管和定时器0初始化
   
  LED4D_Str(0,"AI80");            //字符串常量直接显示   
  delay_ms(2000);                  //延时一下
  LED4D_Str(0,"I805");            //字符串常量直接显示   
  delay_ms(2000);                  //延时一下
  LED4D_Str(0,"8051");           //字符串常量直接显示   
  delay_ms(2000);                  //延时一下
  LED4D_Str(0,"051U");           //字符串常量直接显示   
  delay_ms(2000);                  //延时一下
  min  = 59;
  sec  = 58;
  RTC();
  //循环...字符串显示...
  while(1)
  {
    if(SecOK)     //1s到
    { SecOK = 0;
      RTC();
    }   
  }
}
/***** END *****************************************/

//数码管驱动源代码:
//********************************************************************************

// 名称: LED4D.C
// 基于: 先悦SINYUE 单片机开发学习板 LED_4位共阳极数码管驱动
// 实验: AI8051U 取代 STC89C52 实现4位LED数码管字符串显示.
// 硬件: P0-8段数据 P10-P13-4位选
// 编程: 浦晓明(浦江一水) 2024-12-12
//********************************************************************************
#include "LED4D.H"


/************* 用户定义宏 *******************/
#define T1MS   (65536UL -(MAIN_Fosc / 1000))             //Timer 0 1ms 中断频率, 1000次/秒
/************* 本地常量声明    **************/
u8 code LEDC[]={ "0123456789ABCDEF -HJKLNoPUtGqryhnuc=_SI" }; //可显示字符38   //段码...
u8 code LEDD[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,  //0..9,A..F
                 0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x6E,0x7C,  //...h
                 0x54,0x1C,0x58,0x48,0x08,0x6D,0x30,       }; //n...
u8 code T_COM[]={ 0xF7,0xFB,0xFD,0xFE, }; //位码
/************* 本地变量声明    **************/
u8  LED4[4];        //显示段码缓冲
u8  DispN;           //显示位索引
bit SecOK;           //秒到标志
unsigned int msec;  //毫秒
/************* 本地函数声明    **************/


//***** LED4位数码管初始化函数 *************
void LED4D_Init(void)
{ //定时器0初始化
  AUXR |=  0x80;
  TMOD &= ~0x0F;
  TL0 = T1MS;
  TH0 = T1MS >> 8;
  TR0 = 1;
  ET0 = 1;
  EA=1;   //开中断..
  DispN=0; msec=0; SecOK=0;
}
//*** 定位x显示字符串 **********************
void LED4D_Str(u8 x,u8 * str)
{ unsigned char ch,y,i;
  if(x>=4)return;             //超界..返回..
  for(;x<4;x++)               //从指定位置x到4
  { y=0;
    for(i=0;i<39;i++)         //根据字符查找对应段码
    { if(*str==LEDC)       //找到匹配
     { ch=LEDD;            //取出段码
        y=1; break;             //找到标志y   
      } else ch=0x00;         //若无对应段码则用0空替代.
    }
    if(y==1)
    { if(*(str+1)=='.')        //如果遇小数点处理...
      { ch |= 0x80;            //段码最高位置1...(加小数点)  
        str++;
      }
      LED4[x]=ch;             //定位写入显示
    }
    str++;
    if(*str=='\0')break;      //字符串结束
  }
}
//********************** 显示扫描函数 ************************
void DisplayScan(void)
{   
   P0 = ~LED4[DispN];    //段码送出
   P1 = T_COM[DispN];   //移位驱动
   if(++DispN >= 4)DispN = 0;  //4位结束回0
}
//=====================================================
// 函数: Timer0_ISR_Handler
// 描述: Timer0中断函数.
//=====================================================
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR                //进中断时已清除标志
{
  msec++;         //毫秒计数...
  if(msec>=1000){ SecOK=1; msec = 0; }
  DisplayScan();  //1ms扫描显示一位
}
//**** LED84.C END *******************************************************



工程文件包,供有兴趣的单片机爱好者坛友参考指正。
02_4位数码管显示.rar (29.01 KB, 下载次数: 20)









回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:494
  • 最近打卡:2025-05-02 09:16:59

30

主题

347

回帖

3480

积分

荣誉版主

积分
3480
发表于 2025-2-1 20:37:22 | 显示全部楼层
擎天柱@先悦板+DS18B20_测温实验

单总线数字温度传感器, 外形像一只三极管, 占用IO少, 测试精度高, 被各种项目广泛使用.
传统51开发板, 往往都留有DS18B20的接口, 先悦版开发板, 也不例外, 因此实验DS18B20测温十分方便.
网上有关例程甚多, 但并非个个都能拿来就能用的.
关键在于, DS18B20对于时序, 要求比较严格, AI8051U较传统89C52的主频较高, 且频率可以多变, 因此算法必须仔细考虑.
本实验博采众长, 归纳优化算法, 提高适用性, 极易成功移植.
沿用楼上4位数码管显示实验程序, 实测温度. 先看实验结果如图:
微信图片_20250201195541.jpg

主程序比较简单:
//********************************************************************************
// 名称: 实验DS18B20测温 + 4位数码管动态扫描显示温度
// 基于: 先悦版 51 单片机开发学习板
// 实验: 擎天柱 AI8051U 取代 STC89C52 实现4位LED数码管字符串显示.
// 编程: 浦晓明(浦江一水) 2024-12-05
//********************************************************************************
#include "AI8051U.H"
#include "AI8051U_SYS.H"     //主频在其中定义 24M
#include "LED4D.H"
#include "DS18B20.H"

/************* 全局变量声明 **************/
char  S[16];         //显示字符串缓存
float Te;              //环境温度
int   Temp;          //原始温度数据
sbit  L2 = P2^7;  //LED2 运行指示

//========================================================================
// 函数: void  delay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
void  delay_ms(unsigned int ms)
{ unsigned int i;
  do{ i = MAIN_Fosc / 10000;
      while(--i);
    } while(--ms);
}
//测温函数
void TestTemp(void)
{
  Temp=ReadTemp();       //读取温度原始整数
  Te=(float)Temp/16;     //计算环境温度为浮点数
}
/******************** 主函数 **************************/
void main(void)
{
  SYS_Init();                  //系统初始化
  LED4D_Init();              //4数码管和定时器0初始化
  LED4D_Str(0,"8051");  //字符串常量直接显示
  L2 = 0;                       //LED2 运行指示
  delay_ms(3000);         //延时一下
  L2 = 1;                      //LED2 运行指示
  //循环...整型数转字符串显示...
  while(1)
  { if(SecOK)                 //1s到
    { SecOK = 0;
      TestTemp();           //测温
      sprintf(S,"%04.1fC",Te);
      LED4D_Str(0,S);     //显示温度
      L2 = 0;                  //LED2 运行指示
      delay_ms(50);        //延时一下
      L2 = 1;                  //LED2 运行指示
    }
  }
}
/***** END *****************************************/


DS18B20专用代码的主要部分:
//---------------------------------------------------------------------
// 单总线温度传感器 DS18B20.H 头文件 For Ai8051U
//---------------------------------------------------------------------
#ifndef __DS18B20_H__
#define __DS18B20_H__

#include <stdio.h>
#include "AI8051U.H"
#include "AI8051U_SYS.H"


// 根据不同的主频, 宏定义不同的延时等待...
#if (MAIN_Fosc >= 40000000L)
    #define        usrNOP()    NOP12()
#elif (MAIN_Fosc >= 36000000L)
    #define        usrNOP()    NOP10()
#elif (MAIN_Fosc >= 30000000L)
    #define        usrNOP()    NOP8()
#elif (MAIN_Fosc >= 24000000L)
    #define        usrNOP()    NOP6()
#elif (MAIN_Fosc >= 20000000L)
    #define        usrNOP()    NOP5()
#elif (MAIN_Fosc >= 18000000L)
    #define        usrNOP()    NOP4()
#elif (MAIN_Fosc >= 12000000L)
    #define        usrNOP()    NOP3()
#elif (MAIN_Fosc >= 6000000L)
    #define        usrNOP()    NOP2()
#else
    #define        usrNOP()    NOP1()
#endif

//DS18B20的数据口说明
sbit DQ = P3^2;    //根据实际需要可改变端口


/*** 函数声明    **************/
void DS18B20_Reset();
void DS18B20_WriteByte(u8 dat);
u8   DS18B20_ReadByte(void);
int  ReadTemp(void);


#endif
//---------------------------------------------------------------------
// 单总线温度传感器 DS18B20.H 头文件 For Ai8051U
//---------------------------------------------------------------------
#include <stdio.h>
#include "AI8051U.H"
#include "AI8051U_SYS.H"
#include "DS18B20.H"

//========================================================================
// 函数: void  delay_us(u8 us)
// 描述: 延时函数。
// 参数: us,要延时的us数, 这里只支持1~255us.
//========================================================================
void delay_us(u8 us)
{
  do
  { usrNOP();
    usrNOP();
  } while(--us);
}
/**************************************
复位DS18B20,并检测设备是否存在
**************************************/
void DS18B20_Reset()
{
  CY = 1;
  while(CY)
  {
    DQ = 0;            //送出低电平复位信号
    delay_us(240);    //延时至少480us
    delay_us(240);
    DQ = 1;             //释放数据线
    delay_us(60);     //等待60us
    CY = DQ;          //检测存在脉冲
    delay_us(240);    //等待设备释放数据线
    delay_us(180);
  }
}
/**************************************
从DS18B20读1字节数据
**************************************/
u8 DS18B20_ReadByte(void)
{ u8 i;
  u8 dat = 0;
  for (i=0; i<8; i++)        //8位计数器
  { dat >>= 1;
    DQ = 0;                     //开始时间片
    delay_us(1);               //延时等待
    DQ = 1;                     //准备接收
    delay_us(1);               //接收延时
    if (DQ) dat |= 0x80;    //读取数据
    delay_us(60);             //等待时间片结束
  }
  return dat;
}
/**************************************
向DS18B20写1字节数据
**************************************/
void DS18B20_WriteByte(u8 dat)
{ u8 i;
  for (i=0; i<8; i++)         //8位计数器
  { DQ = 0;                     //开始时间片
    delay_us(1);                //延时等待
    dat >>= 1;                 //送出数据
    DQ = CY;
    delay_us(60);              //等待时间片结束
    DQ = 1;                      //恢复数据线
    delay_us(1);                //恢复延时
  }
}
//========================================================================
// 函数: u16 ReadTemp()
// 描述: 读取温度函数。
// 参数: none.        // 返回: 温度值0.0625度的倍数.
//========================================================================
int ReadTemp(void)
{ u16 TempH, TempL, Temperature;
  DS18B20_Reset();                     //设备复位
  DS18B20_WriteByte(0xCC);        //跳过ROM命令
  DS18B20_WriteByte(0x44);        //开始转换命令
  while (!DQ);                             //等待转换完成
  DS18B20_Reset();                     //设备复位
  DS18B20_WriteByte(0xCC);        //跳过ROM命令
  DS18B20_WriteByte(0xBE);        //读暂存存储器命令
  TempL = DS18B20_ReadByte();  //读温度低字节
  TempH = DS18B20_ReadByte(); //读温度高字节
  Temperature = (TempH << 8) + TempL;
  return Temperature;
}
//=== END =====================================================================

工程文件包: 共有兴趣的坛友指正和参考.
08-TestDS18B20测温.rar (34.24 KB, 下载次数: 23)







回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-17 15:04:58
已绑定手机

0

主题

6

回帖

42

积分

新手上路

积分
42
发表于 2025-3-20 02:19:35 来自手机 | 显示全部楼层
哈哈,好好的学习下。资料丰富
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2025-3-20 08:27:45 | 显示全部楼层
同样对点屏感兴趣,学习
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2025-04-17 20:03:33
已绑定手机

0

主题

1

回帖

38

积分

新手上路

积分
38
发表于 2025-3-20 22:01:35 | 显示全部楼层
焊接技术不错
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 11:16 , Processed in 0.185099 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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