要使用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();
}
此帖出自
小平头技术问答
一周热门 更多>