久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
單片機(jī)多路電壓采集,液晶顯示,程序怎么加按鍵?
[打印本頁]
作者:
jhgfkhjlk
時(shí)間:
2017-12-31 11:13
標(biāo)題:
單片機(jī)多路電壓采集,液晶顯示,程序怎么加按鍵?
多路電壓采集,液晶顯示的程序有了,但是不知道怎么加按鍵。就是用按鍵選擇不同的通道顯示。源程序我放了主函數(shù)在這里了,里面調(diào)用的1602和I2C我沒放哦,應(yīng)該不需要的。請各位大佬幫幫忙,謝謝大家了!
#include <reg52.h>
bit flag300ms = 1; //300ms定時(shí)標(biāo)志
unsigned char T0RH = 0; //T0重載值的高字節(jié)
unsigned char T0RL = 0; //T0重載值的低字節(jié)
void ConfigTimer0(unsigned int ms);
unsigned char GetADCValue(unsigned char chn);
void ValueToString(unsigned char *str, unsigned char val);
extern void I2CStart();
extern void I2CStop();
extern unsigned char I2CReadACK();
extern unsigned char I2CReadNAK();
extern bit I2CWrite(unsigned char dat);
extern void InitLcd1602(l);
extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
void main()
{
unsigned char val;
unsigned char str[10];
EA = 1; //開總中斷
ConfigTimer0(10); //配置T0定時(shí)10ms
InitLcd1602(); //初始化液晶
LcdShowStr(0, 0, "AIN0 AIN1 AIN3"); //顯示通道指示
while (1)
{
if (flag300ms)
{
flag300ms = 0;
//顯示通道0的電壓
val = GetADCValue(0); //獲取ADC通道0的轉(zhuǎn)換值
ValueToString(str, val); //轉(zhuǎn)為字符串格式的電壓值
LcdShowStr(0, 1, str); //顯示到液晶上
//顯示通道1的電壓
val = GetADCValue(1);
ValueToString(str, val);
LcdShowStr(6, 1, str);
//顯示通道3的電壓
val = GetADCValue(3);
ValueToString(str, val);
LcdShowStr(12, 1, str);
}
}
}
/* 讀取當(dāng)前的ADC轉(zhuǎn)換值,chn-ADC通道號0~3 */
unsigned char GetADCValue(unsigned char chn)
{
unsigned char val;
I2CStart();
if (!I2CWrite(0x48<<1)) //尋址PCF8591,如未應(yīng)答,則停止操作并返回0
{
I2CStop();
return 0;
}
I2CWrite(0x60|chn); //寫入控制字節(jié),選擇轉(zhuǎn)換通道
I2CStart();
I2CWrite((0x48<<1)|0x01); //尋址PCF8591,指定后續(xù)為讀操作
I2CReadACK(); //先空讀一個(gè)字節(jié),提供采樣轉(zhuǎn)換時(shí)間
val = I2CReadNAK(); //讀取剛剛轉(zhuǎn)換完的值
I2CStop();
return val;
}
/* ADC轉(zhuǎn)換值轉(zhuǎn)為實(shí)際電壓值的字符串形式,str-字符串指針,val-AD轉(zhuǎn)換值 */
void ValueToString(unsigned char *str, unsigned char val)
{
//電壓值=轉(zhuǎn)換結(jié)果*2.5V/255,式中的25隱含了一位十進(jìn)制小數(shù)
val = (val*25) / 255;
str[0] = (val/10) + '0'; //整數(shù)位字符
str[1] = '.'; //小數(shù)點(diǎn)
str[2] = (val%10) + '0'; //小數(shù)位字符
str[3] = 'V'; //電壓單位
str[4] = '\0'; //結(jié)束符
}
/* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
void ConfigTimer0(unsigned int ms)
{
unsigned long tmp; //臨時(shí)變量
tmp = 11059200 / 12; //定時(shí)器計(jì)數(shù)頻率
tmp = (tmp * ms) / 1000; //計(jì)算所需的計(jì)數(shù)值
tmp = 65536 - tmp; //計(jì)算定時(shí)器重載值
tmp = tmp + 12; //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
T0RH = (unsigned char)(tmp>>8); //定時(shí)器重載值拆分為高低字節(jié)
T0RL = (unsigned char)tmp;
TMOD &= 0xF0; //清零T0的控制位
TMOD |= 0x01; //配置T0為模式1
TH0 = T0RH; //加載T0重載值
TL0 = T0RL;
ET0 = 1; //使能T0中斷
TR0 = 1; //啟動(dòng)T0
}
/* T0中斷服務(wù)函數(shù),執(zhí)行300ms定時(shí) */
void InterruptTimer0() interrupt 1
{
static unsigned char tmr300ms = 0;
TH0 = T0RH; //重新加載重載值
TL0 = T0RL;
tmr300ms++;
if (tmr300ms >= 30) //定時(shí)300ms
{
tmr300ms = 0;
flag300ms = 1;
}
}
復(fù)制代碼
作者:
HC6800-ES-V2.0
時(shí)間:
2017-12-31 20:09
我瀏覽了你的程序,我有個(gè)想法:
你是用定時(shí)器控制什么時(shí)間進(jìn)行ADC轉(zhuǎn)換的。
那么:
第一:你把這個(gè)定時(shí)器去掉,換上一個(gè)按鍵程序,控制一個(gè)變量如n,按1鍵n=1,按二鍵n=2......
第二:將主函數(shù)的一個(gè)條件讓三路ADC都轉(zhuǎn)換,換成三個(gè)用變量n取值不同,開始轉(zhuǎn)換不同路ADC的程序。
搞定了啊。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲欧洲激情
|
成人在线观看免费
|
伊人色综合久久天天五月婷
|
中文字幕一区二区在线观看
|
久久一区二区三区免费
|
亚洲欧美日韩在线
|
国产高清精品一区二区三区
|
国产美女精品
|
国产99热
|
91欧美激情一区二区三区成人
|
免费成人高清在线视频
|
亚洲一区 中文字幕
|
亚洲一区电影
|
日日夜夜精品
|
五月婷婷丁香
|
久久成人国产
|
亚洲精品一区二区三区四区高清
|
性色av网站
|
狠狠的干狠狠的操
|
黄色毛片一级
|
久久久视频在线
|
国产精品亚洲一区二区三区在线
|
成人在线观看免费爱爱
|
一级片在线观看
|
国产精品一区视频
|
日日操夜夜操天天操
|
天堂av免费观看
|
国产精品久久久久久网站
|
亚洲91
|
久久综合一区
|
国产精品久久精品
|
91精品国产综合久久婷婷香蕉
|
中文字幕第一页在线
|
欧美激情综合
|
国产又色又爽又黄又免费
|
亚洲精品成人
|
欧美一区二区网站
|
国产精品一区二区三区在线
|
中文字幕第一页在线
|
精品不卡
|
午夜天堂精品久久久久
|