前述:
QQ:3177227373
这个是一个简易课设作品。
由于之前自己一直是在拿51单片机做东西,这次是采用了自己没有接触过的单片机做东西。
首先,根据学长的传授,自己在淘宝找了一下这个单片机的开发板,然后向卖家所要开发板资料,就可以找到一下这个芯片的最小系统和一些代码例程。因为一些卖家是要买开发板才给资料,此时可以多找几家,有一些良心卖家即使你不买他们的开发板,他们也会给你资料。
开发板资料:
百度网盘链接 (点击蓝色字体即可跳转
提取码:tf4r
百度网盘链接 (点击蓝色字体即可跳转)
提取码:j61w
STC8系列单片机是不需要外部晶振和外部复位的单片机,是目前全球最快的8051 单片机(相同时钟频率),比传统的8051约快12倍(速度快11.2~13.2倍),依次按顺序执行完全部的111条指令,STC8系列单片机仅需147个时钟,而传统8051则需要1944 个时钟。STC8 系列单片机是STC生产的单时钟/机器周期(1T)的单片机,是宽电压/高速/高可靠/低功耗/强抗静电/较强抗干扰的新一代8051单片机,超级加密。指令代码完全兼容传统8051。
MCU内部集成高精度R/C时钟(+0.3%,常温下+25°C),-1.8%—+0.8%温飘(- 40°C—+85°C) ,-1.0%—+0.5%温飘(-20°C—+65°C)。ISP编程时5MHz~ 30MHz宽范围可设置,可彻底省掉外部昂贵的晶振和外部复位电路(内部已集成高可靠复位电路,ISP 编程时4级复位门槛电压可选)。
MCU内部有3个可选时钟源:内部24MHz高精度IRC时钟(可适当调高或调低)、内部32KHz的低速IRC、外部4M~33M晶振或外部时钟信号。用户代码中可自由选择时钟源,时钟源选定后可再经过8-bit的分频器分频后再将时钟信号提供给CPU和各个外设(如定时器、串口、SPI等)。
超高速8051内核(1T), 是全球最快的8051, 比传统8051约快12倍
指令代码完全兼容传统8051
22个中断源,4级中断优先级
支持在线仿真
2.0V~5.5V
内建LDO
-40°C~85°C
最大64K字节FLASH空间,用于存储用户代码
支持用户配置EEPROM大小,512字节单页擦除,擦写次数可达10万次以上
支持在系统编程方式(ISP) 更新用户应用程序,无需专用编程器
支持单芯片仿真,无需专用仿真器,理论断点个数无限制
128字节内部直接访问RAM(DATA)
128字节内部间接访问RAM(IDATA)
8192字节内部扩展RAM(内部XDATA)
外部最大可扩展64K字节RAM(外部XDATA)
内部24MHz高精度IRC (ISP编程时可进行上下调整)
申误差士0.3% (常温下25°C)
-1.8%~+0.8%温漂( 全温度范围,-40°C~85"C)
-1.0%~+0.5%温漂( 温度范围,-20°C~65°C )
内部32KHz低速IRC (误差较大)
外部晶振(4MHz~33MHz)和外部时钟
用户可自由选择上面的3种时钟源
硬件复位
上电复位
复位脚复位(高电平复位),出厂时P5.4默认为I0口,ISP下载时可将P5.4管脚设置为复位脚
看门狗溢出复位
申低压检测复位,提供4级低压检测电压: 2.2V、 2.4V、 V2.7、 V3.0
软件复位
软件方式写复位触发寄存器
提供22个中断源: INT0、INT1、INT2、INT3、INT4、定时器0、定时器1、定时器2、定时器3、定时器4、串口1、串口2、串口3、串口4、ADC模数转换、LVD低压检测、SPI、IC、比较器、PCA/CCP/PWM、增强型PWM、增强型PWM异常检测
提供4级中断优先级
5个16位定时器:定时器0、定时器1、定时器2、定时器3、定时器4,其中定时器0的模式3具有(不可屏蔽中断) 功能,定时器0和定时器1的模式0为16位自动重载模式
4个高速串口:串口1、串口2、串口3、串口4,波特率时钟源最快可为FOSC/4
4组16位PCA模块: CCP0、CCP1、CCP2、CCP3, 可用于捕获、高速脉冲输出,及6/7/8/10位的PWM输出
8组15位增强型PWM,可实现带死区的控制信号,并支持外部异常检测功能,另外还有4组传统的
PCA/CCP/PWM可作PWM
SPI: 支持主机模式和从机模式以及主机从机自动切换
I2C支持主机模式和从机模式
ADC,支持12位精度15通道的模数转换,速度最快可达800K (即每秒可进行80万次模数转换)
比较器,一组比较器附近
最多可达59个GPIO: P0.0~P0.7、 P1.0~P1.7、 P2.0~P2.7、 P3.0 ~P3.7、 P4.0~P4.4、 P5.0~P5.5、 P6.0~P6.7、P7.0 ~P7.7
所有的GPIO均支持如下4种模式:准双向口模式、强推挽输出模式、开漏输出模式、高阻输入模式
V LQFP64S、LQFP48、 LQFP44、PDIP40 (暂未生产)
此处选自STC8A8K64S4A12单片机手册的介绍
#include "stc8.h"
#include "lcd1602.h"
#include "intrins.h"
//ADC 特殊功能寄存器
sfr ADC_CONTR = 0xbc;
#define ADC_POWER 0x80
#define ADC_START 0x40
#define ADC_FLAG 0x20
#define ADC_RESFMT 0x20
sfr ADC_RES = 0xbd;
sfr ADC_RESL = 0xbe;
sfr ADCCFG = 0xde;
sfr P1M0 = 0x92;
sfr P1M1 = 0x91;
sbit BEEP = P1^1;
unsigned char Vo; //A/D转换后换算的电压值
void main()
{
LCD_Init(); //LCD初始化
P1M0 = 0X00;//配置P1.0口为ADC检测输入
P1M1 = 0X01;
while(1)
{
GetADCResult(0); //获取ADC值
LCD_Manifest(2,11,Vo/10);//显示十位
LCD_Manifest(2,12,Vo%10);//显示个位
if(Vo<15)
{BEEP=1;}
else
{BEEP=0;}
}
}
/*----------------------------
Get ADC result
----------------------------*/
unsigned char GetADCResult(unsigned char ch)//这里如有不懂 请仔细看资料
{
//选择P1口的哪一口 这里的口和ch要对应才能达到选择该口
ADC_CONTR = ADC_POWER | ADC_START | ch ;//启动adc电源,开始A/D转换 ,配置采集口
//这么用语句的主要原因就是不能位寻址
//通道选择在后3位所以直接用一个整数表示ch
//例如ch=6 那么对应的后三位就是110
_nop_(); //Must wait before inquiry
_nop_(); //设置ADC_CONTR寄存器后需加4个CPU时钟周期的延时,才能保证值被写入ADC_CONTR寄存器
_nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag 等待转化完成
ADC_CONTR &= ~ADC_FLAG; //Close ADC 将标志位清零等待下次硬件置1
//也可以写成 ADC_CONTR= ADC_CONTR & ( ~ADC_FLAG)
//只读取8位ADC采集结果 并 以5v为基准进行换算
Vo=ADC_RES/2.56;//Return ADC result(为显示整数,这里将电压值计算为百分比)
return Vo;
}