找回密码
 立即注册

QQ登录

只需一步,快速开始

帖子
查看: 1821|回复: 1
打印 上一主题 下一主题
收起左侧

程序有问题,液晶显示用的是5110的,感觉显示部分有问题,有软件大神帮看吗

[复制链接]
跳转到指定楼层
楼主
ID:238164 发表于 2017-11-17 23:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

举报

沙发
ID:82765 发表于 2017-11-18 14:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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