qq_28377183 2015-05-21 08:25 采纳率: 0%
浏览 3172

单片机:51单片机+ADC0804+LCD1602

#include
#include
#include
#define uint unsigned int
#define uchar unsigned char
#define IO_1602 P0
#define IO_0804 P1

uint temp ,date;
uchar qian,bai,shi,ge;
uchar cc[16]=" M O D E ";

sbit lcdrs=P2^0;//LCD液晶的寄存器选择端
sbit lcdrw=P2^1;//LCD液晶的读写选择端
sbit lcden=P2^2;//LCD液晶的使能端
sbit adcs=P3^2;//AD的片选信号
sbit adrd=P3^7;//外部读取转换结果的控制信号
sbit adwr=P3^6;//A/D转换器启动控制信号
sbit adintr=P3^3;//中断请求信号输出端

void delay_ms(uint t);//延时函数
void lcdxzl(uchar dat);//LCD液晶写指令函数
void lcdxsj(uchar dat);//LCD液晶写数据函数
void lcdinit();//LCD液晶初始化函数
/*void adinit();//ADC0804初始化函数
void start();//AD0804开始转化函数
uint adraed();//读取AD0804转化后的数据*/
uchar adc0804(void);
uint datpro(void);//ADC0804读出的数据处理
void display();//显示电压值函数

void delay_ms(uint t)//延时程序
{
uchar x,y;
for(t;t>0;t--)
{for(x=0;x<114;x++)
for(y=0;y<1;y++);
}
}

void lcdxzl(uchar dat) //LCD液晶写指令函数
{
lcden=0;
IO_1602=dat;
lcdrs=0;
lcdrw=0;
lcden=1;
delay_ms(10);
lcden=0;
delay_ms(10);
}

void lcdxsj(uchar dat)//LCD液晶写数据函数
{
lcden=0;
IO_1602=dat;
lcdrs=1;
lcdrw=0;
lcden=1;
delay_ms(10);
lcden=0;
delay_ms(10);
}

void lcdinit()//LCD液晶初始化函数
{
uint a;
delay_ms(15);
lcdxzl(0x38);//设置16x2显示,5x7点阵,8位数据口
delay_ms(5);
lcdxzl(0x38);//设置16x2显示,5x7点阵,8位数据口
delay_ms(5);
lcdxzl(0x01);//光标及移动设置
lcdxzl(0x06);//显示开及光标设置
lcdxzl(0x0c);//全屏清0
lcdxzl(0x80);//设置初始显示地址
delay_ms(50);
for(a=1;a<16;a++)
{
lcdxsj(cc[a]);
delay_ms(50);
}
}

void adinit()//AD0804初始化函数
{
adcs=1;
adwr=1;
adrd=1;
P3=0xff;
delay_ms(10);
}

void start()//AD0804开始转化函数
{
P1=0xff;
adcs=0;
adwr=1;
adwr=0;
delay_ms(10);
adwr=1;
delay_ms(10);
}

uint adraed()//读取AD0804转化数据
{
adcs=0;
adrd=1;
adrd=0;
delay_ms(10);
temp=P1;
delay_ms(10);
adrd=1;
adcs=1;
adwr=1;
delay_ms(10);
return (temp);
}

void display()
{
uint s;
uint a;
s=adread();
s=s*1200;
a=s*8;
lcdxzl(0x80+0x40);
lcdxsj('U');
lcdxzl(0x80+0x41);
lcdxsj(':');
lcdxzl(0x80+0x42);

lcdxsj('0'+s/1000);
lcdxzl(0x80+0x43);
lcdxsj('0'+s%1000/100);
lcdxzl(0x80+0x44);
lcdxsj('.');
lcdxzl(0x80+0x45);
lcdxsj('0'+s%100/10);
lcdxzl(0x80+0x46);
lcdxsj(0x30+s%10);
lcdxzl(0x80+0x47);
lcdxsj('V');
lcdxzl(0x80+0x4a);
lcdxsj('I');
lcdxzl(0x80+0x4b);
lcdxsj(':');
lcdxzl(0x80+0x4c);
lcdxsj('0'+s*8/10);
lcdxzl(0x80+0x4d);
lcdxsj('0'+s*8%10);
lcdxzl(0x80+0x4e);
lcdxsj('A');
}

void main()
{
lcdinit();
while(1)
{
display();//显示电压值在LCD1602

}

}
为什么我写出来的程序不能显示测出的电压

  • 写回答

3条回答 默认 最新

  • autocyz 2015-05-21 12:49
    关注

    你首先要确保自己的1602显示没有问题,这样才能有个信息反馈给你是否采集到电压。
    入股显示没有问题,那么就要看你IO口的顺序是否正确,0804与单片机的通信是否有问题

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题