微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 我这个1602的显示程序为什么不能实现功能?程序没有错呀!大神们帮帮忙,小白求教。

我这个1602的显示程序为什么不能实现功能?程序没有错呀!大神们帮帮忙,小白求教。

时间:10-02 整理:3721RD 点击:
#include<reg51.h>
#define LCD P0
sbit RS=P2^6;
sbit RW=P2^5;
sbit EN=P2^7;
void lcdint();
void lcdshow(unsigned char x,unsigned char y,unsigned char sudu );
main()
{
unsigned char sudu=222;
lcdint();
lcdshow(0,0,sudu);
while(1);
}

void Delay10ms(unsigned int n)
{
unsigned char a,b;
for( ;n>0;n++)
{
for(a=130;a>0;a--)
{
        for(b=30;b>0;b--);
}
}
}
void lcdwritecmd(unsigned char cmd)                  //  写入命令
{
//EN=0;
RS=0;
RW=0;
LCD=cmd;
Delay10ms(1);
EN=1;
Delay10ms(1);
EN=0;
}
void lcdwritedate(unsigned char dat)        //写入数据
{
//EN=0;
RS=1;
RW=0;
LCD=dat;
Delay10ms(1);
EN=1;
Delay10ms(1);
EN=0;
}
void lcdset(unsigned char x,unsigned char y)                 //选择显示位置
{
unsigned char addr;
if(y==0)
{
        addr=0x80+x;
}
else
{
        addr=0x80+0x40+x;
}
lcdwritecmd(addr);
}

  void lcdshow(unsigned char x,unsigned char y,unsigned char sudu)                   //显示函数
{
unsigned char k;
unsigned char sz[3];
lcdset(x,y);
sz[0]=sudu/100;
sz[1]=sudu%100/10;
sz[2]=sudu%100%10;
for(k=0;k<3;k++)
{
        lcdwritedate(sz[k]);
}
}
void lcdint()                                                          //1602定义
{
Delay10ms(1);
lcdwritecmd(0x38);
Delay10ms(1);
lcdwritecmd(0x38);
Delay10ms(1);
lcdwritecmd(0x38);
lcdwritecmd(0x38);
lcdwritecmd(0x0c);
lcdwritecmd(0x06);
lcdwritecmd(0x01);
lcdwritecmd(0x80);
}

首先调试,试试能不能点亮一个点,然后是显示一个字符。

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

网站地图

Top