欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
1602液晶顯示的電壓表程序
[打印本頁]
作者:
daniu
時間:
2014-12-26 21:29
標題:
1602液晶顯示的電壓表程序
本帖最后由 daniu 于 2014-12-26 21:31 編輯
STC12C5406AD 晶振頻率為12MHz 指令周期:本程序取:1.0us/6倍。
本程序已調(diào)試完成:
功能說明:STC12C5406AD+74HC164+1602液晶顯示的電壓表。
測量電壓:采用10位AD測量,測量結(jié)果非常準確。
#include "stc12c5410ad.h"//頭文件
#include "intrins.h"
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
sbit RS=P3^4;//定義I/O的硬件接口
sbit E=P3^7;
sbit A_B=P3^2;
sbit CP=P3^3;
sbit Simulation=P1^7;//模擬電壓輸入
uint temp;
uchar code DispTab_1[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//1602:0-9 數(shù)字
uchar code DispTab_2[]={0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00};//溫度符號
uchar DispBuf[6]; //6字節(jié)的顯示緩沖區(qū)
char char_char_1[]={" www#mdizi#com "};//定義字符串
void delay(uint z)//1ms延時
{
uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}
void delay1()//經(jīng)精準計算,該段程序1次延時時間為 19.53us;多次調(diào)用需要重新計算。
{
_nop_();
_nop_();
_nop_();
}
void write_Directive(uchar a)//寫指令
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=a;
temp&=0x80;
if(temp==0x80)
A_B=1;
else
A_B=0;
a=a<<1;
delay1();
CP=0;
delay1();
CP=1;
delay1();
CP=0;
}
RS=0;
delay(3);
E=0;
delay(3);
E=1;
delay(3);
E=0;
delay(3);
}
void write_Data(uchar a)//寫數(shù)據(jù)
{
uchar i,temp;
for(i=0;i<8;i++)
{
temp=a;
temp&=0x80;
if(temp==0x80)
A_B=1;
else
A_B=0;
a=a<<1;
delay1();
CP=0;
delay1();
CP=1;
delay1();
}
RS=1;
delay(3);
E=0;
delay(3);
E=1;
delay(3);
E=0;
delay(3);
}
void init()//初始化
{
uchar i;
CP=1;
A_B=1;
delay(15);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
delay(5);
write_Directive(0x38);
write_Directive(0x01);
write_Directive(0x02);///初始化后數(shù)據(jù)地址為0x80;即第一行,第一個位置
write_Directive(0x0c);
write_Directive(0x80+0x40);//第二行第一位地址
for(i=0;i<16;i++)
{
write_Data(char_char_1[ i]);//顯示字符串" wwwmdizicom "
}
}
void Temperature_symbol()//溫度符號
{
uchar i;
for(i=0;i<8;i++)
{
write_Directive(0x40+i);//寫入溫度符號
write_Data(DispTab_2[ i]);
}
}
void write_Data_String()//顯示時間函數(shù)
{
uchar i;
unsigned int mm;
DispBuf[0]=temp/10000;//顯示百位
mm=temp%10000;
DispBuf[1]=mm/1000;//顯示十位
mm=mm%1000;
DispBuf[2]=mm/100;//顯示個位
mm=mm%100;
DispBuf[3]=mm/10;//顯示小數(shù)點:0.001
DispBuf[4]=mm%10;//顯示小數(shù)點:0.0001
i=DispBuf[0];
DispBuf[0]=DispTab_1[ i];//查表,取字符
i=DispBuf[1];
DispBuf[1]=DispTab_1[ i];
i=DispBuf[2];
DispBuf[2]=DispTab_1[ i];
i=DispBuf[3];
DispBuf[3]=DispTab_1[ i];
i=DispBuf[4];
DispBuf[4]=DispTab_1[ i];
write_Directive(0x80+0x04);//第一行,第五個位置地址
write_Data(DispBuf[0]);//第一行,第五個位置
write_Data('.');//第一行,第六個位置
write_Data(DispBuf[1]);//第一行,第七個位置
write_Data(DispBuf[2]);//第一行,第八個位置
write_Data(DispBuf[3]);//第一行,第九個位置
write_Data(DispBuf[4]);//第一行,第十個位置
write_Data('V');
}
void I_O_init()
{
P1M1=0x80;
P1M0=0x80;
}
void ADC_Conversion()//ADC開始轉(zhuǎn)
{
ADC_CONTR=0x87;
delay(1);
ADC_CONTR=0x8f;
delay(1);
//while((ADC_CONTR==0x8f));
ADC_CONTR=0x87;
delay(1);
}
void ADC_Calculated()//ADC計算
{
float temp1;
float temp2;
uint temp3;
temp=ADC_DATA;//高8位
temp1=temp;
temp=temp1/256*5*10000;//高8位計算
temp3=ADC_LOW2;//低2位
temp2=temp3;
temp3=temp2/256*5*10000;//低2位計算
temp=temp+temp3;//高8位的計算值+低2位的計算值=實際值
}
void main()
{
init();
I_O_init();//I/O口初始化
Temperature_symbol();//寫入溫度符號
while(1)
{
ADC_Conversion();//ADC開始轉(zhuǎn)
ADC_Calculated();//ADC計算
write_Data_String();//顯示溫度
delay(1000);
}
}
復(fù)制代碼
作者:
qq704661078
時間:
2015-1-31 20:30
謝謝樓主分享!!!
作者:
qingkongwanli
時間:
2015-6-4 21:12
謝謝樓主的程序,本人最近正在學習STC的單片機,準備做一個電動三輪車的電壓表和速度表
作者:
JIAHUIFENG
時間:
2015-6-20 15:58
有電路圖嗎
作者:
bhjyqjs
時間:
2015-6-24 09:56
一個很規(guī)范的C51程序,頂一個!
作者:
不是我
時間:
2016-4-4 22:28
請問樓主能給出電路圖嗎?
作者:
dengrui
時間:
2016-4-11 10:15
同求電路圖
作者:
kongroom
時間:
2017-4-15 15:59
沒電路圖等于沒用啊
作者:
raymondau
時間:
2017-4-15 16:26
是的,請樓主附上電路圖吧
作者:
bsvb
時間:
2017-4-15 18:59
謝謝樓主分享!!!
作者:
bsvb
時間:
2017-4-15 18:59
謝謝樓主分享!!!,請樓主附上電路圖吧
作者:
opop1988
時間:
2018-1-19 21:35
謝謝樓主分享!!!,請樓主附上電路圖吧
作者:
xsj1877578806
時間:
2018-9-16 18:11
最大多少伏?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1