基于STC8A8K64S4A12单片机ADC检测_烟雾报警器

前述:
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

Flash存储器

最大64K字节FLASH空间,用于存储用户代码
支持用户配置EEPROM大小,512字节单页擦除,擦写次数可达10万次以上
支持在系统编程方式(ISP) 更新用户应用程序,无需专用编程器
支持单芯片仿真,无需专用仿真器,理论断点个数无限制

SRAM

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万次模数转换)
比较器,一组比较器附近

GPIO

最多可达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; 
}

AD电路图:

在这里插入图片描述

实物照片:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42922494/article/details/106243033
今日推荐