#include <reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int //預定義一下
#define uchar unsigned char
sbit rs=P2^0; //1602:0寫指令,1寫數(shù)據(jù)
sbit rw=P2^1; //1602讀寫信號
sbit en=P2^2; //1602片選信號
sbit TLC549_CS = P3^1; //TLC549片選,低電平有效
sbit TLC549_DO = P3^5; //TLC549數(shù)字量輸出
sbit TLC549_CLK = P3^0; //TLC549片外獨立時鐘
uchar bdata ADCdata;
uchar code tabl[]={'0','1','2','3','4','5','6','7','8','9',}; //要顯示的內容1放入數(shù)組tablel u
uchar code tab2[]={'0','1','2','3','4','5','6','7','8','9',}; //要顯示的內容1放入數(shù)組tablel u
void delay(uint n) //延時函數(shù)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com) //1602寫命令函數(shù)
{
rs=0; //選擇指令寄存器
rw=0; //選擇寫
P0=com; //把命令字送入P2
delay(5); //延時一小會兒,讓1602準備接收數(shù)據(jù)
en=1; //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
en=0;
}
void lcd_wdat(uchar dat) //1602寫數(shù)據(jù)函數(shù)
{
rs=1; //選擇數(shù)據(jù)寄存器
rw=0; //選擇寫
P0=dat; //把要顯示的數(shù)據(jù)送入P2
delay(5); //延時一小會兒,讓1602準備接收數(shù)據(jù)
en=1; //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
en=0;
}
void lcd_init() //1602初始化函數(shù)
{
lcd_wcom(0x38); //8位數(shù)據(jù),雙列,5*7字形
lcd_wcom(0x0c); //開啟顯示屏,關光標,光標不閃爍
lcd_wcom(0x06); //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位
lcd_wcom(0x01); //清屏
}
uchar ad549( )
{
uchar i;
TLC549_CLK =0;
TLC549_DO=1;
TLC549_CS=0;
for(i=0;i<8;i++)
{
TLC549_CLK=1;
_nop_();
_nop_();
ADCdata<<=1;
TLC549_CLK =0;
ADCdata|=TLC549_DO;
_nop_();
}
TLC549_CS=1;
_nop_();
_nop_();
return (ADCdata);
}
void main() //主函數(shù)
{
uchar n,m=0;
float num;
int x,y,a,b,a1,b1;
num=ad549( );
x=(int)(num/51);
y=num/51*10; //2.62x10=26.2
y=(int)y-x*10; // 26-20
//z=(int)(num/51*10); //262
//z=(int)(num/51*100-100*x-y*10);
delay(5);
a1=num*13.4;
b1=num*1.34;
a=(int)(a1/51);
b=b1/51*10;
b=(int)b-a1*10; // 26-20
//c=(int)(a1/51*10); //262
//c=(int)(a1/51*100-100*a-b*10);
//P3=z;
delay(20);
lcd_init(); //液晶初始化
/*lcd_wcom(0x80); //顯示地址設為80H
lcd_wdat('U'); //該處顯示字符u
delay(10); //
lcd_wcom(0x81); //顯示地址設為81H
lcd_wdat('o'); //該處顯示字符o
delay(10); //
lcd_wcom(0x82); //顯示地址設為82H
lcd_wdat('u');
delay(10); //
lcd_wcom(0x83);
lcd_wdat('t');
delay(10); //
lcd_wcom(0x84);
lcd_wdat('=');
delay(10); //*/
lcd_wcom(0x80); //1//顯示地址設為80H(即00H,)上排第一位
lcd_wdat(tabl[x]); //該處設置變量x;
delay(10); //
lcd_wcom(0x81);
lcd_wdat('.');
delay(10); //
lcd_wcom(0x82);
lcd_wdat(tabl[y]);
delay(10); //
//lcd_wcom(0x83);
//lcd_wdat(tabl[z]);
//delay(10); //
lcd_wcom(0x84);
lcd_wdat('v');
delay(10); //
lcd_wcom(0x80+0x41); //重新設定顯示地址為0xc4,即下排第5位
lcd_wdat(tab2[a]); //該處設置變量x;
delay(10); //
lcd_wcom(0x81+0x41);
lcd_wdat(tab2[b]);
delay(10); //
lcd_wcom(0x82+0x41);
lcd_wdat('.');
delay(10); //
lcd_wcom(0x83+0x41);
lcd_wdat('0');
delay(10); //
lcd_wcom(0x84+0x41);
lcd_wdat('c');
delay(10); //
for(n=0;n<14;n++) //將tab2[]中的數(shù)據(jù)依次寫入1602顯示
{
delay(10);
}
delay(1000);
}
現(xiàn)在能顯示0-5v電壓
想顯示溫度0-66℃,在算法部分怎么改,
目前最多顯示到8℃,1v以上就是十進制之外的碼,這個怎么處理 |