收录日期:2021/01/28 05:46:51 时间:2016/08/07 16:44:45 标签:单片机/工控

#include <reg52.h>
#define uchar unsigned char 
#define uint unsigned int

const uchar code sk[12] = "Temperature:";

sbit lcdrs = P2^1;
sbit lcden = P2^0;

sbit oe = P2^7;
sbit eoc = P2^2;
sbit st = P2^3;
sbit ale = P2^6;

void delay(uchar j) {        // ÑÓʱº¯Êý
uchar i = 0;
while (--j) {
for (; i<110; ++i) 
;
}
}

void write_data(uchar dat) {   // write_data function
lcdrs = 1;
lcden = 1;
P0 = dat;
delay(3);
lcden = 0;
lcdrs = 0;
}

void write_com(uchar com) {   // write_com function
lcdrs = 0;
lcden = 1;
P0 = com;
delay(3);
lcden = 0;
lcdrs = 1;
}

void lcd_init() {
write_com(0x38);
delay(3);

write_com(0x8);
delay(3);

write_com(0x1);
delay(3);

write_com(0x6);
delay(3);

write_com(0xc);
delay(3);
}

int main()
{ uchar te[5] = {'0','0','0','.','0'};
int n = 0;
int getdata = 0;

lcd_init();    // ³õʼ»¯

write_com(0x80+0x2);
for (; n<12; ++n) {
write_data(sk[n]);
delay(1);
}

while (1) {
ale = 1;
st = 0;
st = 1;        // Æô¶¯×ª»»
st = 0;

while (!eoc);  // µÈ´ýÐźÅת»»Íê±Ï£¬ eoc=1 Ê±Íê±Ï
oe = 1;        // enable output
getdata = P1;
oe = 0;

getdata = getdata*10*0.4;

te[0] = '0' + getdata/1000;
te[1] = '0' + getdata%1000/100;
te[2] = '0' + getdata%100/10;
te[4] = '0' + getdata%10;
for (n=0; n<5; ++n) {
write_com(0x80+0x46+n);
write_data(te[n]);
}
}
}



这个程序运行出错,显示数字不对,但是我从P1 口手动输入数字是正确的,应该是A/D 的问题,求大神指点,在线等!
[img=http://user.qzone.qq.com/329015802/infocenter][/img]
[img=http://b152.photo.store.qq.com/psb?/e6c8b76f-b23e-4e36-b8cf-a9842a0384d0/aLjNUuBLZUFVxO.oCKTuwGM3qbCkUy*LAFGGqJAwswA!/b/YS4SpFrFEgAAYkf9oFpiFgAA ][/img]
线路图看的不是很清楚,那个ADC好像是0808或者0809吧。

看了datasheet的时序图,好像ALE也需要置0的。
         ale = 0;
        st = 0;
         ale = 1;
        st = 1;        // Æô¶¯×ª»»
        ale = 0;
        st = 0;

就是你while(1)的后面的四句话,改成上面的六句话试试看。
引用 5 楼 liangboone 的回复:
就是你while(1)的后面的四句话,改成上面的六句话试试看。

大哥,这个也不行啊,要不,您在看看,我在等!谢谢了!
  write_com(0x8);
    delay(3);

    write_com(0x1);
    delay(3);

    write_com(0x6);
    delay(3);

    write_com(0xc);
    delay(3);

为什么这初始化跟我写的不一样?
引用 7 楼 m9527133t 的回复:
write_com(0x8);
  delay(3);

  write_com(0x1);
  delay(3);

  write_com(0x6);
  delay(3);

  write_com(0xc);
  delay(3);

为什么这初始化跟我写的不一样?

貌似初始化从那11 条命令中组合吧,可以不同的
我按照你那么写,能编译成功,但在仿真上不能输出
没看出来有什么错误,不过插入延时看看吧: 
while (1) {
        ale = 1;  // 锁定地址
        delay(1);
        ale = 0;   
        delay(1);
        st = 1;   // 开始
        delay(1);
        st = 0;      
        delay(3);
        while (!eoc);  // 等待 eoc=1  
        oe = 1;        // enable output
        getdata = P1;
        oe = 0;
         。。。。

引用 10 楼 bjtea 的回复:
没看出来有什么错误,不过插入延时看看吧: 
while (1) {
  ale = 1; // 锁定地址
  delay(1);
  ale = 0;  
  delay(1);
  st = 1; // 开始
  delay(1);
  st = 0;  
  delay(3);
  while (!eoc); // 等待 eoc=1  
  oe = 1; // enab……

加了延时,可是还是不行啊,怎么办啊!
这个我知道了怎么回事了,接错电路了,汗!
引用 12 楼 sssongkun 的回复:
这个我知道了怎么回事了,接错电路了,汗!

帮帮我 写工作总结 .......... 帮帮我 写工作总结 [讨论].net架构与j2ee架构之比较 哪里有linux/c的开源项目啊? 一个SCM平时应该做什么 写一个vbs文件,删除一个文件夹下的文件 如何使用快捷键来打开顶级菜单? focus()的问题 求多线程编程例子! 终于有户口了,结束黑人生活,散分~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ vc连接mysql数据库可以把libmysql.dll嵌入程序中吗? 如何做权限管理!? C#如何获取别的机子时间 请教MPEG1 LAYER3 的帧结构问题! 急~~~~问个SQL的问题!~~我现在用的是SQL2005,我想追加记录,怎么做?请高手进来指点! 如何在VC++.net中调用ActiveX控件,我已经注册和添加了该控件到对话框中了? 水晶报表分组以后各组无法在一页中连续显示,请问怎么解决? applet中文无法显示 如何使wizard控件中siderbar(左边导航栏)里的超链接失效? ORA-01704: 文字字符串过长 怎么解决 嫁个程序员…… listctrl的滚动条为什么有时候无法拖动? 指向任意类型的指针 几个小问题?希望大家能帮我改正一下 关于\"未找到路径e:的一部分\"的问题! qq有哪个版本可以看见对方的ip,而对方看不见自己的ip? 怎样通过XPath给XML排序. 使用XCDZIP35.OCX控件的介绍 vb实现上位机与下位机串口通信问题?