⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 复件 testlcd.c

📁 该程序是ucosii在51单片机上的移置
💻 C
字号:
/*-------------------------------------------------------------------------------------------------
                      ╔=======================================
                      ┆       YG51A开发板配套实验学习例程   ┆
                      ┆             Version 2.0             ┆
                      ┆                                     ┆
                      ┆            扬光电子工作室           ┆
                      ┆                                     ┆
                      ┆           QQ:573764777              ┆
                      ┆         E-mail:yg-stu@163.com       ┆
                      ╚=======================================╝  
********************************** 程序功能说明 ******************************************************
在1602LCD上显示"HELLO YG51A !"和"START! NOW !两行内容,
延迟后从右向左滚动.					
******************************************************************************************************/

#include "reg52.h"

#define uchar unsigned char

typedef bit BOOL  ; 

sbit rs = P2^6 ; 
sbit rw = P3^6 ;
sbit ep = P2^7 ;


void delay(uchar) ;
void lcd_wcmd(uchar) ;
BOOL lcd_bz() ;
void lcd_pos(uchar) ;
void lcd_wdat(uchar) ;
void display(uchar,uchar *) ;

code uchar  dis1[] = {"HELLO engineer !   "} ;
code uchar  dis2[] = {"START! NOW!     "} ;  //一行16个字符



void longdelay(uchar s)  //长延时
{
	 while(s--)
	 {
	  	delay(60) ;
	 }
}

void delay(uchar ms)
{                       // 延时子程序
	 uchar i ;
	 while(ms--)
	 {
	  	for(i=0;i<250;i++) ;
	 }
}

BOOL lcd_bz()
{                                // 测试LCD忙碌状态
	 BOOL result ;
	 rs = 0 ;
	 rw = 1 ;
	 ep = 1 ;
	 result = (BOOL)(P0 & 0x80); //强制类型转换为BOOL,非0则等于1 
	 ep = 0 ;
	 return result ; 
}

void lcd_wcmd(uchar cmd)
{       // 写入指令数据到LCD
 	while(lcd_bz()) ;
	rs = 0 ;
	rw = 0 ;
	ep = 0 ;
	P0 = cmd ;
	ep = 1 ;
	ep = 0 ;  
}

void lcd_pos(uchar pos)
{       
 	lcd_wcmd(pos | 0x80);  //显示数据存储地址设置,最高位为1
} 

void lcd_wdat(uchar dat) 
{                          //写入字符显示数据到LCD
 	while(lcd_bz()) ;
  	rs = 1 ;
  	rw = 0 ;
  	ep = 0 ;
  	P0 = dat ;
  	ep = 1 ;
  	ep = 0 ; 
}

void lcd_init()
{                           //LCD初始化设定
	 lcd_wcmd(0x38) ;   //8位总线 双行显示
	 delay(1) ;
	 lcd_wcmd(0x01) ;   //清显示 光标复位到地址00H位置
	 delay(1) ;
	 lcd_wcmd(0x06) ;   //光标移动方向右移 所有文字不移动
	 delay(1) ;
	 lcd_wcmd(0x0c) ;   //开显示 无光标 不闪烁
	 delay(1) ;
}

/*---------------
函数名称:display()
功能 :在LCD上显示数组的数据
说明 :先写显示地址,后写显示数据
调用 :lcd_wcmd(), lcd_pos()
入口参数:pos 写入的位置,q指向要写入的数据所在的数组
返回值 :无
----------------*/
void display(uchar pos, uchar *q)
{ 
	 uchar i ;
	 //lcd_wcmd(0x01) ; //clear 
	 //delay(10) ;
	 lcd_pos(pos) ;
	 for(i=0;i<16;i++)  //写16个字符
	 {
		  lcd_wdat(*q) ;
		  q++ ;
		  longdelay(2) ;
	 } 
}

main()
{
	 lcd_init() ;     //初始化LCD   
	 //delay(10) ;
	 display(0x00,dis1) ;
	 display(0x40,dis2) ;
	 display(0x14,dis1) ;
	 display(0x54,dis2) ;
	 lcd_wcmd(0x07) ;   //文字右移
	 delay(1) ;
	 while(1)
	 {
	 display(0x00,dis1) ;
	 display(0x40,dis2) ;
	 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -