欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
求指導(dǎo)STC15F2K60S2單片機(jī)內(nèi)部AD通過(guò)按鈕控制輸出的電路圖及程序
[打印本頁(yè)]
作者:
1521578597
時(shí)間:
2022-3-15 10:45
標(biāo)題:
求指導(dǎo)STC15F2K60S2單片機(jī)內(nèi)部AD通過(guò)按鈕控制輸出的電路圖及程序
由于本論壇禁止直接求程序,禁止伸手黨,所以向大家請(qǐng)教一下大致的實(shí)現(xiàn)方法與思路,理清頭緒后我自己來(lái)寫程序去實(shí)現(xiàn),謝謝大家
作者:
lkc8210
時(shí)間:
2022-3-15 23:34
輸出什么?
/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 AD轉(zhuǎn)換中斷方式舉例----------------------------*/
/* 如果要在程序中使用此代碼,請(qǐng)?jiān)诔绦蛑凶⒚魇褂昧薙TC的資料及程序 */
/* 如果要在文章中應(yīng)用此代碼,請(qǐng)?jiān)谖恼轮凶⒚魇褂昧薙TC的資料及程序 */
/*---------------------------------------------------------------------*/
//本示例在Keil開(kāi)發(fā)環(huán)境下請(qǐng)選擇Intel的8058芯片型號(hào)進(jìn)行編譯
//若無(wú)特別說(shuō)明,工作頻率一般為11.0592MHz
#include "reg51.h"
#include "intrins.h"
#define FOSC 11059200UL
#define BAUD 115200
typedef unsigned char BYTE;
typedef unsigned int WORD;
#define URMD 0 //0:使用定時(shí)器2作為波特率發(fā)生器
//1:使用定時(shí)器1的模式0(16位自動(dòng)重載模式)作為波特率發(fā)生器
//2:使用定時(shí)器1的模式2(8位自動(dòng)重載模式)作為波特率發(fā)生器
sfr T2H = 0xd6; //定時(shí)器2高8位
sfr T2L = 0xd7; //定時(shí)器2低8位
sfr P1M1 = 0x91; //PxM1.n,PxM0.n =00--->Standard, 01--->push-pull
sfr P1M0 = 0x92; // =10--->pure input, 11--->open drain
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xB1;
sfr P3M0 = 0xB2;
sfr P4M1 = 0xB3;
sfr P4M0 = 0xB4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;
sfr AUXR = 0x8e; //輔助寄存器
sfr ADC_CONTR = 0xBC; //ADC控制寄存器
sfr ADC_RES = 0xBD; //ADC高8位結(jié)果
sfr ADC_LOW2 = 0xBE; //ADC低2位結(jié)果
sfr P1ASF = 0x9D; //P1口第2功能控制寄存器
#define ADC_POWER 0x80 //ADC電源控制位
#define ADC_FLAG 0x10 //ADC完成標(biāo)志
#define ADC_START 0x08 //ADC起始控制位
#define ADC_SPEEDLL 0x00 //540個(gè)時(shí)鐘
#define ADC_SPEEDL 0x20 //360個(gè)時(shí)鐘
#define ADC_SPEEDH 0x40 //180個(gè)時(shí)鐘
#define ADC_SPEEDHH 0x60 //90個(gè)時(shí)鐘
void InitUart();
void SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
BYTE ch = 0; //ADC通道號(hào)
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
P6M0 = 0x00;
P6M1 = 0x00;
P7M0 = 0x00;
P7M1 = 0x00;
InitUart(); //初始化串口
InitADC(); //初始化ADC
IE = 0xa0; //使能ADC中斷
//開(kāi)始AD轉(zhuǎn)換
while (1);
}
/*----------------------------
ADC中斷服務(wù)程序
----------------------------*/
void adc_isr() interrupt 5
{
ADC_CONTR &= !ADC_FLAG; //清除ADC中斷標(biāo)志
SendData(ch); //顯示通道號(hào)
SendData(ADC_RES); //讀取高8位結(jié)果并發(fā)送到串口
// SendData(ADC_LOW2); //顯示低2位結(jié)果
if (++ch > 7) ch = 0; //切換到下一個(gè)通道
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
}
/*----------------------------
初始化ADC
----------------------------*/
void InitADC()
{
P1ASF = 0xff; //設(shè)置P1口為AD口
ADC_RES = 0; //清除結(jié)果寄存器
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
Delay(2); //ADC上電并延時(shí)
}
/*----------------------------
初始化串口
----------------------------*/
void InitUart()
{
SCON = 0x5a; //設(shè)置串口為8位可變波特率
#if URMD == 0
T2L = (65536 - (FOSC/4/BAUD));
T2H = (65536 - (FOSC/4/BAUD)) >> 8;
AUXR = 0x14; //T2為1T模式, 并啟動(dòng)定時(shí)器2
AUXR |= 0x01; //選擇定時(shí)器2為串口1的波特率發(fā)生器
#elif URMD == 1
AUXR = 0x40; //定時(shí)器1為1T模式
TMOD = 0x00; //定時(shí)器1為模式0(16位自動(dòng)重載)
TL1 = (65536 - (FOSC/4/BAUD));
TH1 = (65536 - (FOSC/4/BAUD)) >> 8;
TR1 = 1; //定時(shí)器1開(kāi)始啟動(dòng)
#else
TMOD = 0x20; //設(shè)置定時(shí)器1為8位自動(dòng)重裝載模式
AUXR = 0x40; //定時(shí)器1為1T模式
TH1 = TL1 = (256 - (FOSC/32/BAUD));
TR1 = 1;
#endif
}
/*----------------------------
發(fā)送串口數(shù)據(jù)
----------------------------*/
void SendData(BYTE dat)
{
while (!TI); //等待前一個(gè)數(shù)據(jù)發(fā)送完成
TI = 0; //清除發(fā)送標(biāo)志
SBUF = dat; //發(fā)送當(dāng)前數(shù)據(jù)
}
/*----------------------------
軟件延時(shí)
----------------------------*/
void Delay(WORD n)
{
WORD x;
while (n--)
{
x = 5000;
while (x--);
}
}
復(fù)制代碼
作者:
dzbj
時(shí)間:
2022-3-16 00:46
官方手冊(cè)上 ADC采集有詳細(xì)的查詢法和中斷法范例 先搞定ADC采集
官方手冊(cè)上 有ADC按鍵的電路圖 并聯(lián)法串聯(lián)法都有 連阻值容值都給了 照著做就行
這兩樣都有了 剩下就是程序判斷鍵值
總之 你下個(gè)官方的手冊(cè)看一下就是了
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1