基於STC8A8K64S4A12單片機ADC檢測_煙霧報警器

前述:
QQ:3177227373
這個是一個簡易課設作品。
由於之前自己一直是在拿51單片機做東西,這次是採用了自己沒有接觸過的單片機做東西。
首先,根據學長的傳授,自己在淘寶找了一下這個單片機的開發板,然後向賣家所要開發板資料,就可以找到一下這個芯片的最小系統和一些代碼例程。因爲一些賣家是要買開發板纔給資料,此時可以多找幾家,有一些良心賣家即使你不買他們的開發板,他們也會給你資料。
在這裏插入圖片描述
在這裏插入圖片描述
開發板資料:

鏈接:https://pan.baidu.com/s/1kaFnllnZK0NBlzfIv1LxuA
提取碼:tf4r

鏈接:https://pan.baidu.com/s/1uw8clk5q8ecOI8Icla6P1A
提取碼: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電路圖:

在這裏插入圖片描述

實物照片:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章