微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51c语言1602显示滴速,只显示176,求大神帮忙解决

51c语言1602显示滴速,只显示176,求大神帮忙解决

时间:10-02 整理:3721RD 点击:
不是硬件问题,在别的上试过了
main.c
#include<reg51.h>       
#include<intrins.h>
#include"lcd.h"       
unsigned char Time=0,V=0;
unsigned char i,c=0;
unsigned char Date_Name[6]="speed:";
unsigned char Date_Unit[5]="d/min";
unsigned char Date_Speed[3];
void TimerConfiguration();
void IntConfiguration();
void LCD_Speed();
void Lcd_Name();
void Lcd_Unit();
void main(void)
{       
        LCD1602_Init();
        Lcd_Name();
        Lcd_Unit();
        IntConfiguration();
        TimerConfiguration();
        while(1)
        {   
            LCD_Speed();  
        }                       
}
void Lcd_Name()
{
    LCD1602_WriteCom(0x80);
        for(i=0;i<6;i++)
        {
                 LCD1602_WriteData(Date_Name[i]);       
        }
}
void Lcd_Unit()
{
    LCD1602_WriteCom(0x8B);
        for(i=0;i<5;i++)
        {
                 LCD1602_WriteData(Date_Unit[i]);       
        }
}
void LCD_Speed()
{
        if(c==1)
    {
            c=0;
                V=1200/Time;
        Time=0;
        Date_Speed[0]=(V/100)+0x30;
        Date_Speed[1]=(V%100/10)+0x30;
        Date_Speed[2]=(V%10)+0x30;
        LCD1602_WriteCom(0x87);
        for(i=0;i<3;i++)
                {
                 LCD1602_WriteData(Date_Speed[i]);       
        }       
    }
        else
        {
        }   
}               
void IntConfiguration()
{
        IT0=0;
        EX0=1;
        EA =1;
}
void TimerConfiguration()
{
    TMOD= 0x01;
    TH0 = 0x3C;         
    TL0 = 0xB0;
    EA =1;       
        ET0=1;
        TR0=1;       
}
void Timer0() interrupt 1                 
{
        TH0 = 0x3C;       
    TL0 = 0xB0;
        Time++;
}
void Int0()        interrupt 0       
{        
        c=1;        
}


lcd.c
#include"lcd.h"
void Delay1us(uint a)
{
        uint b,c;
        for(c=a;c>0;c--)
                for(b=110;b>0;b--);
}
#ifndef         LCD1602_4PINS       
void LCD1602_WriteCom(uchar com)       
{
        LCD1602_E=0;
        LCD1602_RS=0;
        LCD1602_RW=0;
        LCD1602_DATAPINS=com;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
}
#else
void LCD1602_WriteCom(uchar com)         
{
        LCD1602_E=0;
        LCD1602_RS=0;
        LCD1602_RW=0;
        LCD1602_DATAPINS=com;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
        Delay1us(10);
        LCD1602_DATAPINS=com<<4;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
}
#endif          
#ifndef         LCD1602_4PINS                  
void LCD1602_WriteData(uchar dat)                       
{
        LCD1602_E=0;
        LCD1602_RS=1;
        LCD1602_RW=0;
        LCD1602_DATAPINS=dat;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
}
#else
void LCD1602_WriteData(uchar dat)               
{
        LCD1602_E=0;
        LCD1602_RS=1;
        LCD1602_RW=0;
        LCD1602_DATAPINS=dat;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
        LCD1602_DATAPINS=dat<<4;
        Delay1us(10);
        LCD1602_E=1;
        Delay1us(10);
        LCD1602_E=0;
}
#endif  
#ifndef                LCD1602_4PINS
void LCD1602_Init()                                                  
{
        LCD1602_WriteCom(0x38);  
        LCD1602_WriteCom(0x0c);  
        LCD1602_WriteCom(0x06);  
        LCD1602_WriteCom(0x01);  
        LCD1602_WriteCom(0x80);  
}
#else
void LCD1602_Init()                                               
{
        LCD1602_WriteCom(0x32);       
        LCD1602_WriteCom(0x28);         
        LCD1602_WriteCom(0x0c);  
        LCD1602_WriteCom(0x06);  
        LCD1602_WriteCom(0x01);  
        LCD1602_WriteCom(0x80);  
}
#endif


LCD.H
#ifndef __LCD_H_                                                 
#define __LCD_H_
#define LCD1602_4PINS
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define LCD1602_DATAPINS P0
sbit LCD1602_E=P2^7;
sbit LCD1602_RW=P2^5;
sbit LCD1602_RS=P2^6;
void Delay1us(uint a);
void LCD1602_WriteCom(uchar com);       
void LCD1602_WriteData(uchar dat);       
void LCD1602_Init();                                                  
#endif


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top