数码管 点阵已关 怎么还闪? 1062不能正常显示

2019-03-24 18:52发布

要使用1062液晶显示   所以通过void cmg88()//关数码管,点阵函数,但是点阵关不不了,还是不停的闪,液晶显示也有点闪,不知道为什么这样。




程序如下:

#include<reg51.h>//包含头文件,一般情况不需要改动,头文件包含特殊功能
#include<intrins.h>
sbit RS=P1^0; //定义端口
sbit RW=P1^1;
sbit EN=P2^5;
sbit DU=P2^0;
sbit WE=P2^1;
sbit CS88=P2^2;
#define RS_CLR RS=0
#define RS_SET RS=1
#define RW_CLR RW=0
#define RW_SET RW=1
#define EN_CLR EN=0
#define EN_SET EN=1
#define DataPort P0
#define uchar unsigned char
#define uint  unsigned int
/****************************************************
变量定义
*****************************************************/
long num;     //计数值32位
uint num_l;   //计数值中间变量16位
uint num_h;  //计数值中间变量16位
bit count_flag;     //脉冲计数标志
bit timer_50ms_flag;  //50ms 定时标志
uchar  count_a=0;   //定时程序中判断是否到一秒/一分的标志
uchar number=0;     //数据序号

uchar code display0[16]={"   51mcu R     "};
uchar code display1[16]={"  I Love you   "};

void cmg88()//关数码管,点阵函数
{
DU=1;
P0=0X00;
DU=0;
CS88=0;
}
/*------------------------------------------------
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
------------------------------------------------*/
void DelayUs2x(uchar t)
{
while(--t);
}
/*------------------------------------------------
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(uchar t)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
               判忙函数
------------------------------------------------*/
bit LCD_Check_Busy(void)
{
DataPort=0xFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return(bit)(DataPort&0x80);
}
/*------------------------------------------------
              写入命令函数
------------------------------------------------*/
void LCD_Write_Com(uchar com)
{
while(LCD_Check_Busy());//忙则等待
RS_CLR;
RW_CLR;
EN_SET;
DataPort=com;
_nop_();
EN_CLR;
}
/*------------------------------------------------
               写入数据函数
------------------------------------------------*/
void LCD_Write_Data(uchar Data)
{
while(LCD_Check_Busy());//忙则等待
RS_SET;
RW_CLR;
EN_SET;
DataPort=Data;
_nop_();
EN_CLR;
}
/*------------------------------------------------
        清屏函数
------------------------------------------------*/
void LCD_Clear(void)
{
LCD_Write_Com(0x01);
DelayMs(5);
}
/*------------------------------------------------
          写入字符串函数
------------------------------------------------*/
void LCD_Write_String(uchar x,uchar y,uchar *s)
{
if(y==0)
{
LCD_Write_Com(0x80+x); //表示第一行
}
else
{
LCD_Write_Com(0xC0+x); //表示第二行
}
while(*s)
{
LCD_Write_Data(*s);
s++;
}
}
/*------------------------------------------------
               写入字符函数
------------------------------------------------*/
void LCD_Write_Char(uchar x,uchar y,uchar Data)
{
if(y==0)
{
LCD_Write_Com(0x80+x);
}
else
{
LCD_Write_Com(0xC0+x);
}
LCD_Write_Data(Data);
}
/*------------------------------------------------
                初始化函数
------------------------------------------------*/
void LCD_Init(void)
{
cmg88();//关数码管,点阵函数
LCD_Write_Com(0x38); /*显示模式设置*/
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
DelayMs(5);
LCD_Write_Com(0x38);
LCD_Write_Com(0x08); /*显示关闭*/
LCD_Write_Com(0x01); /*显示清屏*/
LCD_Write_Com(0x06); /*显示光标移动设置*/
DelayMs(5);
LCD_Write_Com(0x0C); /*显示开及光标设置*/
LCD_Write_String(1,0,display0);
LCD_Write_String(1,1,display1);
}
/*------------------------------------------------
                 主函数
------------------------------------------------*/
void main(void)
{
LCD_Init();
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。