角度儀仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (21.66 KB, 下載次數: 71)
下載附件
2019-5-8 01:29 上傳
單片機源程序如下:
#define uint unsigned int
sbit A0=P3^0;
sbit E1=P3^1;
sbit E2=P3^2;
sbit RW=P3^3;
sbit CS=P3^;
sbit CLK=P3^6;
sbit DOUT=P3^7;
#define LCD_DATA P0
void delay(unsigned int i)
{
unsigned char k=200;
while(i>0)
{
i--;
}
}
void OUTMD(uchar i){ //??
A0=1; //??? //????
delay(5);
E1=1;
delay(10);
LCD_DATA=i;
delay(5);
E1=0;
}
void OUTSD(unsigned char i){
A0=1; //???//??//????
delay(5);
E2=1;
delay(10);
LCD_DATA=i;
delay(5);
E2=0;
}
void OUTMI(uchar i){ //??
A0=0; //???//????
delay(5);
E1=1;
delay(10);
LCD_DATA=i;
delay(5);
E1=0;
}
void OUTSI(unsigned char i){
A0=0; //???//??//????
delay(5);
E2=1;
delay(10);
LCD_DATA=i;
delay(5);
E2=0;
}
//中間還有顯示函數
void lcdini(void){ //???
RW=0;
OUTMI(0XE2); OUTSI(0XE2);//??
OUTMI(0XAE); OUTSI(0XAE);//POWER SAVE ??????,?????
OUTMI(0XA4); OUTSI(0XA4);//????
OUTMI(0XA9); OUTSI(0XA9);//1/32???
OUTMI(0XA1); OUTSI(0XA1);//?????,????
OUTMI(0XE0); OUTSI(0XE0);//??-??-???
OUTMI(0XEE); OUTSI(0XEE);//??? ???-??-???
OUTMI(0X00); OUTMI(0XC0);
OUTSI(0X00); OUTSI(0XC0);
OUTMI(0XAF); OUTSI(0XAF);//POWER SAVE ??????,?????
}
void SetPage ( uchar page0,uchar page1)
{
OUTMI(0xB8|page1);
OUTSI(0xB8|page0);
}
void SetAddress ( uchar address0,uchar address1)
{
OUTMI(address1);
OUTSI(address0);
}
void PutCharR(uchar ch)
{
OUTSD(ch);
}
void PutCharL(uchar ch)
{
OUTMD(ch);
}
void clrscr(void)
{
uchar i;
uchar page;
for (page=0;page<4;page++)
{
SetPage ( page, page);
SetAddress(0,0);
for (i=0;i<61;i++)
{
PutCharR(0);
PutCharL(0);
}
}
}
void Draw_wordh (uint d_where, uint x_add, bit layer, uchar width,uchar *p)
{ //???????
uchar x, address; //address?????????
bit window=0; //window??????
d_where = d_where*2*width;
for (x=width;x>0;x--){
if (x_add>=61) {window=1;address=x_add%61;}
else address=x_add;
if(layer==0){ //??????????
SetPage(0,0);
SetAddress(address,address);
if(window==1)PutCharR(p[d_where]);
else PutCharL(p[d_where]);
}
else{ //????????????
SetPage(2,2);
SetAddress(address,address);
if(window==1)PutCharR(p[d_where]);//??
else PutCharL(p[d_where]);
}
x_add++;
d_where++;
}}
void Draw_wordh2 (uint d_where, uint x_add, bit layer, uchar width,uchar *p)
{ //???????
uchar x, address; //address?????????
bit window=0; //window??????
d_where = d_where*2*width;
for (x=width;x>0;x--){
if (x_add>=61) {window=1;address=x_add%61;}
else address=x_add;
if(layer==0){ //??????????
SetPage(1,1);
SetAddress(address,address);
if(window==1)PutCharR(p[d_where]);
else PutCharL(p[d_where]);
}
else{ //????????????
SetPage(3,3);
SetAddress(address,address);
if(window==1)PutCharR(p[d_where+width]);//??
else PutCharL(p[d_where+width]);
}
x_add++;
d_where++;
}}
uint readadc()
{
uint da=0;
uchar I;
CLK=0;
CS=0;
delay(5);
CLK=1;
delay(5);
CLK=0;
delay(5);
for(I=0;I<12;I++)
{
da<<=1;
CLK=1;
delay(5);
CLK=0;
delay(5);
da|=DOUT;
}
CS=1;
return da;
}
void main()
{
float a;
int b,c,e,f,g;
lcdini();
clrscr();
//Draw_wordh(0,0,1,96,Y1);
//Draw_wordh2(0,0,1,96,Y2);
while(1)
{
if(readadc()<661)
a=-0.823*readadc()+3595.401;
else if(readadc()>661&&readadc()<1352)
a=-0.918*readadc()+3636.668;
else
a=-0.86*readadc()+3526.97;
b=a;
c=b/1000;
e=b%1000/100;
f=b%100/10;
g=b%10;
Draw_wordh(0,0,0,8,&H1[88]);
Draw_wordh(0,8,0,8,&H1[96]);
Draw_wordh(0,16,0,8,&H1[c*8]);
Draw_wordh(0,24,0,8,&H1[e*8]);
Draw_wordh(0,32,0,8,&H1[f*8]);
Draw_wordh(0,40,0,8,&H1[80]);
Draw_wordh(0,48,0,8,&H1[g*8]);
Draw_wordh(0,56,0,16,&H1[104]);
Draw_wordh2(0,0,0,8,&H2[88]);
Draw_wordh2(0,8,0,8,&H2[96]);
Draw_wordh2(0,16,0,8,&H2[c*8]);
Draw_wordh2(0,24,0,8,&H2[e*8]);
Draw_wordh2(0,32,0,8,&H2[f*8]);
Draw_wordh2(0,40,0,8,&H2[80]);
Draw_wordh2(0,48,0,8,&H2[g*8]);
Draw_wordh2(0,56,0,16,&H2[104]);
}
}
全部資料51hei下載地址:
傳感器顯示.zip
(97.47 KB, 下載次數: 55)
2019-5-7 19:54 上傳
點擊文件名下載附件
傳感器顯示角度儀 下載積分: 黑幣 -5
|