标题: 程序有问题,液晶显示用的是5110的,感觉显示部分有问题,有软件大神帮看吗 [打印本页]

作者: 3054796495    时间: 2017-11-17 23:08
标题: 程序有问题,液晶显示用的是5110的,感觉显示部分有问题,有软件大神帮看吗
#include "reg52.H"
#include "LCD5510.H"
#include "intrins.h"
#include "absacc.h"
#define uint unsigned int
#define uchar unsigned char

uchar tem0,tem1;  //用于存放50ms中所记脉冲个数的高低字节                           
uchar temp0,temp1; //用于存放最终换算出的湿度的高低字节                        
uint f=0;       //频率初值

void delay1s(void)
{
    unsigned char i,j,k;
    for(i=167; i>0; i--)
        for(j=171; j>0; j--)
            for(k=16; k>0; k--)
            {
                ;
            }
}
void Init_timer()
{
    TMOD=0x51;  //0101 0001  定时器1在方式1下工作16位计数器 定时器0在方式1下工作16位定时器
    TL0=0x00;   //定时器0初值 定时50000us
    TH0=0x4C;                  
    TL1=0x00;   //定时器1清零
    TH1=0x00;
    ET0=1;      //使能定时器0中断
    ET1=1;      //使能定时器1中断
    EA=1;      //使能总中断
    TR0=1;     //开始计时
    TR1=1;
}
void tran()
{
    f=tem1;
    f=(f<<8)|tem0;         //计算出50ms中所记脉冲个数
    f=f*20;         //50ms*20=1000ms=1s 1秒钟所记脉冲个数等于频率
    if((5623<=f)&&(f<=6852))  //不同频率对于不同相对湿度 相对湿度的有效范围为(0%--100%)
    {
        if((6734<f)&&(f<=6852))
          {temp0=0;temp1=(6852-f)*10/118;}
        if((6618<f)&&(f<=6734))
          {temp0=1;temp1=(6734-f)*10/116;}
if((6503<f)&&(f<=6618))
          {temp0=2;temp1=(6618-f)*10/115;}  
        if((6388<f)&&(f<=6503))
          {temp0=3;temp1=(6503-f)*10/115;}
        if((6271<f)&&(f<=6388))
          {temp0=4;temp1=(6388-f)*10/117;}   
        if((6152<f)&&(f<=6271))
          {temp0=5;temp1=(6271-f)*10/119;}
        if((6029<f)&&(f<=6152))
          {temp0=6;temp1=(6152-f)*10/123;}
        if((5901<f)&&(f<=6029))
          {temp0=7;temp1=(6029-f)*10/128;}
        if((5766<f)&&(f<=5901))
          {temp0=8;temp1=(5901-f)*10/135;}
        if((5623<f)&&(f<=5766))
          {temp0=9;temp1=(5766-f)*10/143;}
     }
    else
{
temp0=0;temp1=0;
}
}
void main(void)
{
    uchar i, humi=0;
    uchar LCD_contrast = 0xc8;  //此值对比度合适
        Init_timer();
    LCD5510_Init();
    LCD_write_cmd(0x21);//工作模式, 水平寻址, 扩展指令
    LCD_write_cmd(0xbe);//对比度调节
    LCD_write_cmd(0x20);//工作模式, 水平寻址, 常规指令
          while(1)
        {
                        tran();
                       temp0&=0x0F;
                       temp1&=0x0F;
                       temp0=temp0<<4;
                       humi=temp0|temp1;
                        LCD_clr_scr();      //清屏
//                    LCD_printn(2, 2, humi, 3);
                        delay1s();
                        delay1s();
        }
}
void timer0() interrupt 1
{
EA =0;
    TR0=0;
    TR1=0;

    TL0=0xFF;     //重装初值 定时50000us OX4BFFH
    TH0=0x4B;

    tem0=TL1;   //读取50ms中所记脉冲个数
    tem1=TH1;
    TL1=0x00;    //定时器1清零
    TH1=0x00;
    //f=1;         //作标注位

    TR0=1;
    TR1=1;
    EA=1;
}
void timer1() interrupt 3    //T1中断,表示计数的脉冲溢出,超出了可测量的频率范围(在50ms内计数达65535)
{        //显然在这里不可能。所以重新启动。
        EA =0;
    TR0=0;
    TR1=0;

    TL0=0x00;   //重装初值 定时50000us
    TH0=0x4C;
    TL1=0x00;   //定时器1清零
    TH1=0x00;

    TR0=1;
    TR1=1;
    EA=1;
}


作者: cjjcjj1    时间: 2017-11-18 14:38
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1