標(biāo)題:
單片機(jī)測電壓 LCD1602上下讀數(shù)一直一樣?
[打印本頁]
作者:
蕁柯z
時(shí)間:
2023-11-21 23:27
標(biāo)題:
單片機(jī)測電壓 LCD1602上下讀數(shù)一直一樣?
51hei圖片_20231121231956.png
(76.16 KB, 下載次數(shù): 27)
下載附件
2023-11-21 23:26 上傳
#include<reg51.h>
#include<intrins.h>
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
unsigned char code digit[10]={"0123456789"};
unsigned char code Str[]={"Volt="};
sbit RS=P2^0;
sbit RW=P2^1;
sbit E=P2^2;
sbit BF=P0^7;
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
void delaynms(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
bit BusyTest(void)
{
bit result;
RS=0;
RW=1;
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
result=BF;
E=0;
return result;
}
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1);
RS=0;
RW=0;
E=0;
_nop_();
_nop_();
P0=dictate;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80);
}
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1;
RW=0;
E=0;
P0=y;
_nop_();
_nop_();
_nop_();
_nop_();
E=1;
_nop_();
_nop_();
_nop_();
_nop_();
E=0;
}
void LcdInitiate(void)
{
delaynms(15);
WriteInstruction(0x38);
delaynms(5);
WriteInstruction(0x38);
delaynms(5);
WriteInstruction(0x38);
delaynms(5);
WriteInstruction(0x0c);
delaynms(5);
WriteInstruction(0x06);
delaynms(5);
WriteInstruction(0x01);
delaynms(5);
}
void display_volt(void)
{
unsigned char i;
WriteAddress(0x03);
i = 0;
while(Str[i] != '\0')
{
WriteData(Str[ i]);
i++;
}
}
void display_volt2(void)
{
unsigned char i;
WriteAddress(0x43);
i = 0;
while(Str[i] != '\0')
{
WriteData(Str[i]);
i++;
}
}
void display_dot(void)
{
WriteAddress(0x09);
WriteData('.');
}
void display_dot2(void)
{
WriteAddress(0x49);
WriteData('.');
}
void display_V(void)
{
WriteAddress(0x0c);
WriteData('V');
}
void display_V2(void)
{
WriteAddress(0x4c);
WriteData('V');
}
void display1(unsigned char x)
{
WriteAddress(0x08);
WriteData(digit[x]);
}
void display1_2(unsigned char x)
{
WriteAddress(0x48);
WriteData(digit[x]);
}
void display2(unsigned char x)
{
unsigned char i,j;
i=x/10;
j=x%10;
WriteAddress(0x0a);
WriteData(digit[i]);
WriteData(digit[j]);
}
void display2_2(unsigned char x)
{
unsigned char i,j;
i=x/10;
j=x%10;
WriteAddress(0x4a);
WriteData(digit[i]);
WriteData(digit[j]);
}
unsigned char A_D()
{
unsigned char i,dat;
CS=1;
CLK=0;
CS=0;
DIO=1;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
CLK=0;
DIO=0;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
for(i=0;i<8;i++)
{
CLK=1;
CLK=0;
dat<<=1;
dat|=(unsigned char)DIO;
}
CS=1;
return dat;
}
unsigned char A_D2()
{
unsigned char i,dat;
CS=1;
CLK=0;
CS=0;
DIO=1;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
for(i=0;i<8;i++)
{
CLK=1;
CLK=0;
dat<<=1;
dat|=(unsigned char)DIO;
}
CS=1;
return dat;
}
main(void)
{
unsigned int AD_val,AD_val2;
unsigned char Int,Dec,Int2,Dec2;
LcdInitiate();
delaynms(5);
display_volt();
display_volt2();
display_dot();
display_V();
display_dot2();
display_V2();
while(1)
{
AD_val= A_D();
AD_val2=A_D2();
Int=(AD_val)/51;
Dec=(AD_val%51)*100/51;
Int2=(AD_val2)/51;
Dec2=(AD_val2%51)*100/51;
display1(Int);
display2(Dec);
display1_2(Int2);
display2_2(Dec2);
delaynms(250);
}
}
復(fù)制代碼
作者:
Hephaestus
時(shí)間:
2023-11-22 20:47
LCM的Datasheet貼出來,特別是關(guān)于0x43和0x03命令的區(qū)別。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1