#include <reg51.h>
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int //预定义一下
#define uchar unsigned char
sbit rs=P2^0; //1602:0写指令,1写数据
sbit rw=P2^1; //1602读写信号
sbit en=P2^2; //1602片选信号
sbit TLC549_CS = P3^1; //TLC549片选,低电平有效
sbit TLC549_DO = P3^5; //TLC549数字量输出
sbit TLC549_CLK = P3^0; //TLC549片外独立时钟
uchar bdata ADCdata;
uchar code tabl[]={'0','1','2','3','4','5','6','7','8','9',}; //要显示的内容1放入数组tablel u
uchar code tab2[]={'0','1','2','3','4','5','6','7','8','9',}; //要显示的内容1放入数组tablel u
void delay(uint n) //延时函数
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
void lcd_wcom(uchar com) //1602写命令函数
{
rs=0; //选择指令寄存器
rw=0; //选择写
P0=com; //把命令字送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(uchar dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
P0=dat; //把要显示的数据送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
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() //主函数
{
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[]中的数据依次写入1602显示
{
delay(10);
}
delay(1000);
}
现在能显示0-5v电压
想显示温度0-66℃,在算法部分怎么改,
目前最多显示到8℃,1v以上就是十进制之外的码,这个怎么处理 |