找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[1602]液晶显示采集问题ADC0832

[复制链接]
admin 发表于 2012-9-2 14:38:25 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
想了好久,还是不明白.放上来给老大们看看.
#include <reg52.h>
#include <intrins.h>
#include "lcd1602.h"
sbit LCD1602_RS = P2^4;//输入端
sbit LCD1602_RW = P2^5;//读写端
sbit LCD1602_E = P2^6;//使能端
#define lcd_db P0 //指令接口
#define lcd_rs_com LCD1602_RS = 0 //写指令
#define lcd_rs_data LCD1602_RS = 1 //写数据
#define lcd_rw_write LCD1602_RW = 0 //写入
#define lcd_rw_read LCD1602_RW = 1 //读出
#define lcd_e_able LCD1602_E = 1 //读数据
#define lcd_e_unable LCD1602_E = 0 //1→0执行指令
void delay(unsigned char n) //n*2ms
{
unsigned char a,b;
while(n--)
{
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}
}

/***********************************************
自定义符号
************************************************/
unsigned char custom[8][8] ={
{0x18,0x18,0x06,0x09,0x08,0x08,0x09,0x06},//℃
{0x00,0x00,0x0A,0x15,0x11,0x0A,0x04,0x00},//桃心
{0x00,0x04,0x0E,0x15,0x04,0x04,0x04,0x00},//↑
{0x00,0x04,0x04,0x04,0x15,0x0E,0x04,0x00},//↓
{0x00,0x04,0x08,0x1F,0x08,0x04,0x00,0x00},//←
{0x00,0x04,0x02,0x1F,0x02,0x04,0x00,0x00},//→
{0x00,0x00,0x11,0x02,0x04,0x08,0x11,0x00},//%
{0x00,0x00,0x09,0x02,0x04,0x08,0x15,0x00},//‰
};

/************************************************
读数据
************************************************/
unsigned char lcd1602_read_data()
{
unsigned rdata;
lcd_rs_data;
lcd_rw_read;
lcd_e_able;
rdata = lcd_db;
lcd_e_unable;
return rdata;
}
/***********************************************
忙函数
***********************************************/
void lcd1602_busy()
{
while(lcd1602_read_data() & 0x80);
}
/***********************************************
写指令函数
***********************************************/
void lcd1602_write_com(unsigned char com)
{
unsigned char i;
lcd_db = com;
lcd_rs_com;
lcd_rw_write;
for(i = 0;i < 80;i ++)
_nop_();
lcd_e_able;
for(i = 0;i < 80;i ++)
_nop_();
lcd_e_unable;
lcd1602_busy();
}
/**********************************************
写数据
************************************************/
void lcd1602_write_data(unsigned char wdata)
{
unsigned char i;
lcd_db = wdata;
lcd_rs_data;
lcd_rw_write;
for(i = 0;i < 80;i ++)
_nop_();
lcd_e_able;
for(i = 0;i < 80;i ++)
_nop_();
lcd_e_unable;
lcd1602_busy();
}
/********************************************
写入自定义字符
********************************************/
void lcd1602_write_custom()
{
unsigned char i ,j;
for(i=0;i<8;i++)
{
lcd1602_write_com(0x40+i*8);
for(j=0;j<8;j++)
lcd1602_write_data(custom[j]);
}
}
/********************************************
写入字符串
********************************************/
void lcd1602_write_string(unsigned char add,unsigned char *dat)
{
lcd1602_write_com(add);
while(*dat!='\0')
{
lcd1602_write_data(*dat++);
}
}
void lcd1602_string(unsigned char *s)
{
unsigned char i;
lcd1602_write_com(0x88);
for(i = 0;i < 4;i ++)
{
lcd1602_write_data(s);
delay(2);

}

}
/**********************************************
初始化LCD1602
***********************************************/
void init_lcd1602()
{
lcd1602_busy();

lcd1602_write_com(0x01);//清屏
lcd1602_write_com(0x02);//清零
lcd1602_write_com(0x06);//写入后不移动
lcd1602_write_com(0x0C);//显示开,光标无,光标不动
lcd1602_write_com(0x38);//8位总线,显示2行,5*7点阵
lcd1602_write_custom();
lcd1602_write_string(0x80,"Voltage:");
}
/************************************************
显示数值
**************************************************/
void lcd1602_display(unsigned char rdata)
{
unsigned char bai,shi,ge;
unsigned tmp[4];
bai = (rdata - 5)/50+'0';
shi = ((rdata - 5)%50)/10+'0';
ge = ((rdata - 5)%50)%10+'0';
tmp[0]=bai;tmp[1]='.';tmp[2]=shi;tmp[3]=ge;


lcd1602_write_string(0x80,"Voltage:");
lcd1602_string(tmp);
lcd1602_write_com(0xC0); //为了证明不是后缀的问题,特意放下行去了.
lcd1602_write_data('V');
}







我发的是1602显示的头文件, 主函数ADC采集的是没有问题的,采集的电压能在数码管上正确显示出来的,无警告. 显示数值里的rdata 就是采集的数据. 为了表明不是重叠的问题.我把V字换到第二行了.


运行程序第一行我理想的出现应该是 Voltage: 3.12 像这样的显示, 可是显示出来的是 voltage: ℃3℃.. 注意:后面有2个小数点. 照理说,他不行就不行吧,中间那个3数字位的地方(本来应该在前面的),我扭转滑动
变阻器,他还能在0-5V变化, 看来应该是头位的数字,怎么跑那去了. 还有本来该是4个字符, 变成5个了,然后序列打乱了, 新人,看了半天也还是没有懂. 老大看看哪出了问题,顺便告诉点注意事项也行. 还有如果我把我自己定义的符号那些删掉, 在℃位上出现的是乱码,应该不是我自定义的问题. 看有人来帮帮不. ~(@^_^@)~
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 04:28 , Processed in 0.056431 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表