找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1269|回复: 0
打印 上一主题 下一主题
收起左侧

LCD不显示字符,只显示一行黑块,更换其他程序就可以显示字符,所以应该是程序问题

[复制链接]
跳转到指定楼层
楼主
ID:636918 发表于 2020-4-2 11:32 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#include "1602.h"


typedef unsigned char U8;
typedef signed char S8;
typedef unsigned int U16;
typedef signed int S16;
typedef unsigned long U32;
typedef signed long S32;
typedef float F32;
typedef double F64;

#define SYSTEMCLK  921600
#define T0CLK  921600
#define T1CLK  921600
#define T1PERIOD  1000000/921600
#define TIMER0H  0xFC
#define TIMER0L  0x66


sbit Trig = P1^3;
sbit Echo = P3^2;
sbit LedAlarm = P3^6;
sbit Beep = P3^7;



uint temp;

volatile bit FlagSucceed = 0;
volatile bit FlagDisplay = 0;

U16 DisplayCount = 0;
U16 time = 0;
U32 distance = 0;



void delay_20us();
void Start_Module();
void INT0_Init(void);
void Data_Init();
void Timer0_Init();
void Timer1_Init();

void delay_20us()
{
U16 bt;
for(bt=0;bt<100;bt++);
}

void Data_Init()
{
Trig = 0;
distance = 0;
DisplayCount = 0;
}

void INT0_Init(void)
{
IT0 = 0;
EX0 = 0;
}

void INT0_ISR(void)interrupt 0
{
time = TH1*256+TL1;
FlagSucceed = 1;
EX0 = 0;
}

void Timer0_Init()
{
TMOD = 0x11;
TH0 = TIMER0H;
TL0 = TIMER0L;
TR0 = 1;
ET0 = 1;
}

void Timer0_ISR(void)interrupt 1
{
TH0 = TIMER0H;
TL0 = TIMER0L;
DisplayCount++;
if(DisplayCount>=1000)
{
FlagDisplay = 1;
DisplayCount = 0;
}
}

void Timer1_Init()
{
TMOD = 0x11;
TH1 = 0;
TL1 = 0;
ET1 = 1;
}

void Start_Module()
{
Trig = 1;
delay_20us();
Trig = 0;
}

void main()
{
U16 i,j;
EA = 0;
INT0_Init();
Timer0_Init();
Timer1_Init();
Data_Init();
EA = 1;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++)
{;}

L1602_init();
L1602_string(1,1,"Welcome to my   ");
L1602_string(2,1,"distance meter!!");


while(1)
{
EA = 0;
Start_Module();
while(Echo==0);
FlagSucceed = 0;
EX0 = 1;
TH1 = 0;
TL1 = 0;
TF1 = 0;
TR1 = 1;
EA = 1;
while(TH1<80);
TR1 = 0;
EX0 = 0;

if(FlagSucceed==1)
{
distance = time*1.085;
distance /= 58;
if((FlagSucceed == 1)&&(distance<20))
{
LedAlarm = 0;
Beep = 0;
}else{
LedAlarm = 1;
Beep = 1;
}
}
if(FlagDisplay == 1){
  if(FlagSucceed == 0){
   L1602_string(1,1,"Out Of Range(0-4m)");
   L1602_string(2,1,"     -------      ");
  }else{
  L1602_string(1,1,"Distance Result:");
  L1602_string(2,1,"       cm       ");
  L1602_int(2,5,distance);
  }
FlagDisplay = 0;
    }
  }
}




sbit E = P2^5;
sbit RW = P2^6;
sbit RS = P2^7;

void delay(){
int i,j;
for(i=0;i<=10;i++)
for(j=0;j<=2;j++);
}

uchar Convert(uchar In_Data)
{
uchar i,  Out_Data = 0,temp = 0;
for(i=0;i<8;i++){
  temp = (In_Data>>i)&0x01;
  Out_Data |= (temp<<(7-i));
}
return Out_Data;
return In_Data;
}

void enable(uchar del)
{
P0 = Convert(del);
RS = 0;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}

void write(uchar del)
{
P0 = Convert(del);
RS = 1;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}

void L1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}

void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a=0x80;
if(hang == 2) a=0xc0;
a=a+lie-1;
enable(a);
write(sign);
}

void L1602_string(uchar hang,uchar lie,uchar *P)
{
uchar a;

if(hang == 1)a = 0x80;
if(hang == 2)a = 0xc0;
a = a+lie-1;
enable(a);

while(1){
if(*P == '\0') break;
write(*P);
P++;

}
}

void L1602_int(uchar hang,uchar lie, int num)
{
uint temp;
uint gewei,shiwei,baiwei,sign;
if(num>=0)
{
sign = 0;
}else{
sign = 1;
}
temp = abs(num);
baiwei = temp/100;
temp = temp-baiwei*100;
shiwei = temp/10;
gewei = temp-shiwei*10;
num = abs(num);
if(num>=100){
    if(sign==1){
        L1602_char(hang,lie,'-');
      }
L1602_char(hang,lie+1,baiwei+48);
L1602_char(hang,lie+2,baiwei+48);
L1602_char(hang,lie+3,gewei+48);
}else if(num>=10){
   if(sign == 1){
                   L1602_char(hang,lie+1,'-');
   }
            L1602_char(hang,lie+2,shiwei+48);
         L1602_char(hang,lie+3,gewei+48);
         }else{
         if(sign == 1){
                                  L1602_char(hang,lie+2,'-');
         }
         L1602_char(hang,lie+3,gewei+48);
         
   }
#endif
}




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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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