标题:
acs712和TLC549检测电流在LCD上显示 单片机程序哪儿出问题?
[打印本页]
作者:
无主之地2332
时间:
2022-4-3 23:00
标题:
acs712和TLC549检测电流在LCD上显示 单片机程序哪儿出问题?
5SPN95V$CTOMH@DH~7G9I3S.png
(56.45 KB, 下载次数: 42)
下载附件
2022-4-3 22:59 上传
单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delay(uchar ms); //延时函数
void wr_com(unsigned char com); //写入指令数据到LCD
void wr_dat(unsigned char dat); //写入字符显示数据到LCD
void xianshi(uchar dizhi, uchar suzi); //单独写数到液晶函数 ( 地址 数据 )
//uchar TLC549_ADC(void); //TLC549模数转换
//uchar get_cur(void);
void uart_init(); //串口初始化函数
sbit rs = P2^0;
sbit rw = P2^1;
sbit e = P2^2;
sbit DI = P1^0;
sbit CS = P1^1;
sbit CLK = P1^2;
uchar ad_0;
uint AD;
////-------------------------------------
//// 主函数
////-------------------------------------
//void main()
//{
// uart_init();
// wr_com(0x01); //显示清屏
// wr_com(0x38); //显示模式设置
// wr_com(0x0c); //光标设置
// while(1)
// {
// delay(100);
// ad_0=TLC549_ADC();
// AD=ad_0*1.97
// xianshi(0x80+2,'A');
// xianshi(0x80+3,'=');
// xianshi(0x80+5,0x30+AD%1000/100);
// xianshi(0x80+6,'.');
// xianshi(0x80+7,0x30+AD%100/10);
// xianshi(0x80+8,0x30+AD%10);
// xianshi(0x80+9,'A');
// }
//}
//----------------------------------
// 延时子程序
//----------------------------------
void delay(uchar ms)
{
uchar i ;
while(ms--)
{
for(i = 0 ; i<250;i++) ;
}
}
//-------------------------------------
// 写入指令数据到LCD
//-------------------------------------
void wr_com(unsigned char com)
{
rs = 0 ;
rw = 0 ;
e = 0 ;
P0 = com ; //P0=D0-D7
delay(1);
e = 1 ;//清屏 上升沿写入命令
delay(1);
e = 0 ;
}
//-------------------------------------------------
// 写入字符显示数据到LCD
//--------------------------------------------------
void wr_dat(unsigned char dat)
{
rs = 1 ;
rw = 0 ;
e = 0 ;
P0 = dat ;
delay(1);
e = 1 ; //E上升沿写入数据
delay(1);
e = 0 ;
}
//------------------------------------------------------
// 单独写数到液晶函数 ( 地址 数据 )
//------------------------------------------------------
void xianshi(uchar dizhi, uchar suzi)
{
wr_com(dizhi);
wr_dat(suzi);
}
//-----------------------------------------
// TLC549模数转换
//-----------------------------------------
uchar TLC549_ADC(uchar ain)
{
uchar n, tmp;
CS = 1; //CS置高,片选无效
CLK = 0;
CS = 0; //CS置低,片选有效,同时DO输出高位
_nop_();
_nop_(); //适当延迟时间1.4us Setup Time
for(n = 0; n < 8; n++) //串行数据移位输入
{
tmp <<= 1;//每个高电平时钟读取1个bit,8个时钟可以读取1个byte的转换结果,数据高位先读取
tmp |= DI;//程序中用八次循环,可以读出一个字节的转换结果
CLK = 1; //0.4us
_nop_(); //延迟0.1us
CLK = 0; //0.4us
}
CS = 1; //CS置高,片选无效
for(n = 17; n != 0; n--) _nop_(); //下一次转换需要延迟17us n不等于0
return (tmp);
}
uint get_cur()
{
uint vol,cur_1;
vol = TLC549_ADC(0) * 0.49; //输入adc电压的100倍。4.9=5(参照电压)*/1024(10位)*100(用于显示)
cur_1 = 5*vol-1250; //实际电流的100倍用于显示,cur_real=(vol_real-2.5)*5
return cur_1;
}
//------------------------------------------
// 串口初始化函数 一样
//------------------------------------------
void uart_init()
{
TMOD=0x20; //9600bps
SCON=0x50;
TH1=0xFD;
TL1=0xFD;
TR1=1;
EA=1;
}
//-------------------------------------
// 主函数
//-------------------------------------
void main()
{
uart_init();
wr_com(0x01); //显示清屏
wr_com(0x38); //显示模式设置
wr_com(0x0c); //光标设置
while(1)
{
delay(100);
AD=get_cur();
//AD=5*ad_0-1250;
xianshi(0x80+2,'A');
xianshi(0x80+3,'=');
xianshi(0x80+5,0x30+AD%1000/100);
xianshi(0x80+6,'.');
xianshi(0x80+7,0x30+AD%100/10);
xianshi(0x80+8,0x30+AD%10);
xianshi(0x80+9,'A');
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1