C语言AD转换数据采集,TLC1543采集&1602显示.wps
- 格式:wps
- 大小:62.50 KB
- 文档页数:8
delay(5);
//延时一小会儿,让 1602 准备接收数据
en=1;
//使能线电平变化,命令送入 1602 的 8 位数据口
en=0;
}
void lcd_wdat(uchar dat)
//1602 写数据函数
{
rs=1;
//选择数据寄存器
rw=0;
//选择写
P0=dat;
//把要显示的数据送入 P2
//1//显示地址设为 80H(即 00H,)上排第一位 //该处设置变量 x;
delay(10);
//
lcd_wcom(0x86);
lcd_wdat('.');
delay(10);
//
lcd_wcom(0x87);
lcd_wdat(tabl[y]);
delay(10);
//
lcd_wcom(0x88);
//AD 转换结束端
sbit rs=P2^0; //1602 的数据/指令选择控制线
sbit rw=P2^1;
//1602 的读写控制线
sbit en=P2^2;
//1602 的使能控制线
uchar code tabl[]={'0','1','2','3','4','5','6','7','8','9',}; //要显示的内容 1 放入数组 tablel
#include<reg52.h> //包含头文件
#include<intrins.h>
#include<stdio.h>
#define uint unsigned int //预定义一下
#define uchar unsigned char
sbit DOUT=P1^0;
//AD 串行数据线
sbit ADIN=P1^1;
{
CLOCK=1;
datal<<=1;
if(DOUT) datal|=0x01;
CLOCK=0;
} //EOC=0; //表明数据转换传输完毕 CS=1;//片选关闭 ad=datah;//高两位值赋给变量 ad ad<<=8;//数据左移 8 加上一步的两位,构成是十位有效数字 ad|=datal;// 把 datal 的值赋给 ad 的第八位,这样构成十位有效数字,由 datah 和 datal 组成
y=(int)(b-x*10); // 26-20
c=num*100; //262
z=(int)(c-x*100-y*10);
P3=readTLC1543(0); 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(0x85); //1//显示地址设为 80H(即 00H,)上排第一位 lcd_wdat(tabl[x]); //该处设置变量 x; delay(10); // lcd_wcom(0x86); lcd_wdat('.'); delay(10); // lcd_wcom(0x87); lcd_wdat(tabl[y]); delay(10); // lcd_wcom(0x88); lcd_wdat(tabl[z]); delay(10); // lcd_wcom(0x89); lcd_wdat('v'); delay(10); //
{
uchar n,m=0;
float num,b,c;
int x,y,z; num=readTLC1543(0)*5/1024.0000; //在 1024 后面加上点 0000 问题就可以解决;
x=(int)(num);
b=num*10;
//2.62x10=26.2
y=(int)(b-x*10); // 26-20
lcd_wdat(tabl[z]);
delay(10);
//
lcd_wcom(0x89);
lcd_wdat('v');
delay(10);
//
lcd_wcom(0x80+0x41); //重新设定显示地址为 0xc4,即下排第 5 位
for(n=0;n<14;n++) //将 tab2[]中的数据依次写入 1602 显示
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(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(0x85); lcd_wdat(tabl[x]);
for(i=0;i<2;i++) //取 D9 和 D8 位 {
CLOCK=1; datah<<=1; if(DOUT) datah|=0x01; CLOCK=0; } for(i=0;i<8;i++)//取 D7~D0 位 { CLOCK=1; datal<<=1; if(DOUT) datal|=0x01; CLOCK=0; } //EOC=0; //表明数据转换传输完毕
return(ad);
}
void main( )
{
uchar n,m=0;
float num,b,c;
int x,y,z; num=readTLC1543(0)*5/1024.0000; //在 1024 后面加上点 0000 问题就可以解决;
x=(int)(num);
b=num*10;
//2.62x10=26.2
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
} uint readTLC1543(uchar port)
通道可以选择
//调用串行 AD 转换子程序
;参数 port 为 012345678910
{
uint ad; uint i,datah,datal; //datah 表示十位有效数字中的高两位,datal 表示十位数据中的低八位数据
for(i=0;i<4;i++)//把通道写入 TLC1543 芯片中 {
ADIN=(bit)(port&0x80); CLOCK=1; CLOCK=0; //只需要 CLOCK 一个下降沿就能写入,其他接口的电平不变化
port<<=1; //根据时序图,先写入 MSB 即最高位,需要左移,然后继续写下一位 } for(i=0;i<6;i++)//填充 6 个 CLOCK {
uchar code tab2[]="voltage test";
//要显示的内容 2 放入数组 table1 2
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 写命令函数
通道可以选择
//调用串行 AD 转换子程序
;参数 port 为 012345678910
{
uint ad; uint i,datah,datal; //datah 表示十位有效数字中的高两位,datal 表示十位数据中的低八位数据
CLOCK=0; CS=0; //EOC=1; port<<=4;
//根据时序图分别设置 CS,CLOCK,EOC //片选端 //表明数据转换中 //用 port 的值来选择是哪个 AD 芯片的哪个通道
{ rs=0; rw=0; P0=com; delay(5); en=1;
//选择指令寄存器 //选择写
//把命令字送入 P2 //延时一小会儿,让 1602 准备接收数据 //使能线电平变化,命令送入 1602 的 8 位数据口
en=0;
} void lcd_wdat(uchar dat)
//1602 写数据函数
sbit en=P2^2;
//1602 的使能控制线