men007
发表于 2024-12-16 17:27:17
{:4_174:}学习了
浦江一水
发表于 2024-12-18 11:00:46
jun_1234 发表于 2024-12-16 10:55
哇塞,这个板子设计的好好看,请问这个一套总成本大概是多少啊?
感谢诸位坛友的浏览、点评和留言。
关于这套总成本,还未仔细计算过。
总体说吧,这是比较低廉的,一般而言:
开发板套件,加上运费,大概是20元出点头;
转40脚的核心板是国芯论坛官方赠送的,据最新信息,凡是国芯论坛的会员,只要申请,都可免费获得的;
如果配一块AI8051U_DIP40脚的直插芯片,也能用。可以用论坛心愿兑换,或者大约<5元左右一片;
如果配一块LCD1602字符显示屏,网上有机会3.5元左右就能买到;
如果配一块本实验所用到的ST7735驱动的128×160彩色显示屏,网上价格约10元上下;
......
总之,这是价格低廉的入门级的实验板。
对于初学者来说,她以较低的门槛,引领你进入奇妙的51单片机世界。
将来,你可能会拥有比较高级复杂些的开发板,然而这块经典而基础的学习板,她曾经陪伴你入门学习,也许会成为一段美好的回忆,是值得收藏的。
清风予我
发表于 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, 统一安排【免费 + 包邮 送】服务人员
大叶子
发表于 2024-12-18 12:11:22
<p>浦江道友出手,精品也</p>
jun_1234
发表于 2024-12-19 14:30:10
浦江一水 发表于 2024-12-18 11:00
感谢诸位坛友的浏览、点评和留言。
关于这套总成本,还未仔细计算过。
总体说吧,这是比较低廉的,一般而 ...
感谢您的回复和解答,希望后面学习STC能成为一段美好的回忆
浦江一水
发表于 2025-1-15 16:10:39
擎天柱+驱动四位数码管显示实验
这块“先悦”实验板配有四位数码管,其电路如图:
这是共阳极数码管,与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; //显示字符串缓存
unsigned char hour; //时
unsigned char min;//分
unsigned char sec;//秒
//=====================================================================
// 函数: voiddelay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
voiddelay_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, }; //位码
/************* 本地变量声明 **************/
u8LED4; //显示段码缓冲
u8DispN; //显示位索引
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=ch; //定位写入显示
}
str++;
if(*str=='\0')break; //字符串结束
}
}
//********************** 显示扫描函数 ************************
void DisplayScan(void)
{
P0 = ~LED4; //段码送出
P1 = T_COM; //移位驱动
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 *******************************************************
工程文件包,供有兴趣的单片机爱好者坛友参考指正。
浦江一水
发表于 2025-2-1 20:37:22
擎天柱@先悦板+DS18B20_测温实验
单总线数字温度传感器, 外形像一只三极管, 占用IO少, 测试精度高, 被各种项目广泛使用.
传统51开发板, 往往都留有DS18B20的接口, 先悦版开发板, 也不例外, 因此实验DS18B20测温十分方便.
网上有关例程甚多, 但并非个个都能拿来就能用的.
关键在于, DS18B20对于时序, 要求比较严格, AI8051U较传统89C52的主频较高, 且频率可以多变, 因此算法必须仔细考虑.
本实验博采众长, 归纳优化算法, 提高适用性, 极易成功移植.
沿用楼上4位数码管显示实验程序, 实测温度. 先看实验结果如图:
主程序比较简单:
//********************************************************************************
// 名称: 实验DS18B20测温 + 4位数码管动态扫描显示温度
// 基于: 先悦版 51 单片机开发学习板
// 实验: 擎天柱 AI8051U 取代 STC89C52 实现4位LED数码管字符串显示.
// 编程: 浦晓明(浦江一水) 2024-12-05
//********************************************************************************
#include "AI8051U.H"
#include "AI8051U_SYS.H" //主频在其中定义 24M
#include "LED4D.H"
#include "DS18B20.H"
/************* 全局变量声明 **************/
charS; //显示字符串缓存
float Te; //环境温度
int Temp; //原始温度数据
sbitL2 = P2^7;//LED2 运行指示
//========================================================================
// 函数: voiddelay_ms(unsigned int ms)
// 描述: 毫秒级延时函数。
// 参数: ms,要延时的ms数,自动适应主时钟.
//=====================================================================
voiddelay_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);
intReadTemp(void);
#endif
//---------------------------------------------------------------------
// 单总线温度传感器 DS18B20.H 头文件 For Ai8051U
//---------------------------------------------------------------------
#include <stdio.h>
#include "AI8051U.H"
#include "AI8051U_SYS.H"
#include "DS18B20.H"
//========================================================================
// 函数: voiddelay_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 =====================================================================
工程文件包: 共有兴趣的坛友指正和参考.
zhangbin268
发表于 2025-3-20 02:19:35
哈哈,好好的学习下。资料丰富
小涵子爸爸
发表于 2025-3-20 08:27:45
同样对点屏感兴趣,学习
风声雨生
发表于 2025-3-20 22:01:35
焊接技术不错