打印

【16路电压液晶实时显示】求编程方法!受教了.......

[复制链接]
1910|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
请问怎么实现16路电压在LCD2004显示(整屏同时显示8路信号,分2屏显示),求编程具体方法。谢谢!系统采用ADC0809做转换、4051做选通。
现把仿真和程序文件附上。

Proteus仿真和C程序文件.zip

391.85 KB

相关帖子

沙发
细菌的爱|  楼主 | 2011-10-10 21:48 | 只看该作者
#include <reg52.h>
#define uint unsigned int
#define ulint unsigned long int
#define uchar unsigned char

sbit rs=P2^4;    //2004的数据/指令选择控制线
sbit rw=P2^5;        //2004的读写控制线
sbit en=P2^6;        //2004的使能控制线
sbit OE  = P1^0;
sbit EOC = P1^1;
sbit ST  = P1^2;
sbit CLK = P1^3;

uchar adval,qian,bai,shi,ge,m;
uint val;
uchar code table[]= {"2d=4d=6d=8d=10d=12d=14d=16d=18d=20d=22d=24d=26d=28d=30d=32d="};
//要显示的内容1放入数组table
void DelayMS(uint ms)
{
    uchar i;
    while(ms--)
    {
        for(i=0;i<110;i++);
    }
}
void lcd_wcom(uchar com)  //2004写命令函数                 
{
    rs=0;            //选择指令寄存器
    rw=0;            //选择写
    P0=com;            //把命令字送入P2
    DelayMS(5);            //延时一小会儿,让2004准备接收数据
    en=1;           //使能线电平变化,命令送入2004的8位数据口
    en=0;
}
void lcd_wdat(uchar dat)        //2004写数据函数      
{
    rs=1;        //选择数据寄存器
    rw=0;        //选择写
    P0=dat;        //把要显示的数据送入P2
    DelayMS(5);        //延时一小会儿,让2004准备接收数据
    en=1;        //使能线电平变化,数据送入2004的8位数据口
    en=0;
}
void lcd_init()              //2004初始化函数        
{
    lcd_wcom(0x38);       //8位数据,双列,5*7字形      
    lcd_wcom(0x0c);      //开启显示屏,关光标,光标不闪烁
    lcd_wcom(0x06);    //显示地址递增,即写一个数据后,显示位置右移一位
    lcd_wcom(0x01);    //清屏
}
void display(uchar addr,uchar number)
{
    lcd_wcom(0x80+addr);
    lcd_wdat(0x30+number);
}
void data_change(adval)
{
    val=adval*1.0/255*5000;
    qian=val/1000;
    bai=val/100%10;
    shi=val/10%10;
    ge=val%10;

    /*地址:00H------13H
            40H------53H
            14H------27H
            54H------67H*/     
    display(0x00+3,qian);//2d
    display(0x00+4,0x2e-0x30);//显示小数点
    display(0x00+5,bai);
    display(0x00+6,shi);
    display(0x00+7,ge);
    display(0x00+8,0x56-0x30);//显示V  

    display(0x00+14,qian);//4d
    display(0x00+15,0x2e-0x30);//显示小数点
    display(0x00+16,bai);
    display(0x00+17,shi);
    display(0x00+18,ge);
    display(0x00+19,0x56-0x30);//显示V   
}
/*实际显示的电压值 (D/256*VCC)*/
void px()
{
uint a,b;
a=P2&0xf0;   //11111000  P2第三位清0
b=P2&0x0f;   //00000111  P2高五位清0
  if(b<16)
    {b=b+1;}
  else
    {b=0;}
P2=a+b;
}

void main()
{
    lcd_init();   //液晶初始化
    /*DD RAM ADDRESS:
                   80H----93H
                                      C0H----D3H
                                      94H----A7H
                                      D4H----E7H */   
    lcd_wcom(0x80+0x00); //显示地址设为80H(即00H,)上排第一位         
    for(m=0;m<3;m++)   //将table[]中的数据依次写入2004显示
       {
        lcd_wdat(table[m]);           
        DelayMS(10);
        }
    lcd_wcom(0x80+0x0b); //显示地址设为80H(即00H,)上排第一位
    for(m=3;m<6;m++)   //将table[]中的数据依次写入2004显示
       {
        lcd_wdat(table[m]);           
        DelayMS(10);
        }
    P1   = 0x3f; //选择AD通道IN3
    TMOD = 0x02;
    TH0  = 0x14;
    TL0  = 0x00;
    IE   = 0x82;
    TR0  = 1;
                   
    while(1)
    {  
        px(); //片选4051,选通16路。                                    
        ST = 0;
        ST = 1;
        ST = 0;
               while(EOC==0);
                OE = 1;
        data_change(P3);  //AD转换后的数据,送入data_change函数转化为十进制数据     
                OE = 0;                    
        DelayMS(1000);
               
  }
}
void Timer0_INT() interrupt 1
{
    CLK = !CLK;
}

使用特权

评论回复
板凳
细菌的爱|  楼主 | 2011-10-10 21:53 | 只看该作者

使用特权

评论回复
地板
细菌的爱|  楼主 | 2011-10-10 21:54 | 只看该作者
期待你们的回复.....:handshake

使用特权

评论回复
5
细菌的爱|  楼主 | 2011-10-12 07:52 | 只看该作者
没有人愿意帮忙看下吗?

使用特权

评论回复
6
细菌的爱|  楼主 | 2011-10-13 23:49 | 只看该作者
快到周末了,逛论坛的人会不会多一点?强势顶起!!

使用特权

评论回复
7
细菌的爱|  楼主 | 2011-10-14 22:51 | 只看该作者
自顶!

使用特权

评论回复
8
细菌的爱|  楼主 | 2011-10-20 23:10 | 只看该作者
有没有好人帮忙啊?:'(
大哥、大姐们................

使用特权

评论回复
9
细菌的爱|  楼主 | 2011-10-28 21:34 | 只看该作者
我就不明白了,是太简单了?还是我表述得不清楚?
大半个月了就没有一条回帖。:L

使用特权

评论回复
10
ningling_21| | 2011-10-28 21:39 | 只看该作者
LCD2004是什么样的LCD?
只要能驱动LCD显示字符,再显示测量电压不是轻而易举么?

使用特权

评论回复
11
DownCloud| | 2011-10-28 21:58 | 只看该作者
帮顶。 、、

使用特权

评论回复
12
细菌的爱|  楼主 | 2011-10-29 20:56 | 只看该作者
10# ningling_21
LCD2004类似于1604,一行20个字符,4行。显示字符是没有什么问题,之前想过用4个数组存千、百、十、个的数据,再通过下标找0~15的元素。调试没通过。C很烂。不知道有没有更简单的方法?谢谢。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝