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

📄 1602print.c

📁 《爱上单片机》配书光盘(书本的制作作品所要的程序)
💻 C
字号:
/********************************************************************************************
程序名:    1602液晶屏时钟程序
编写人:    杜洋 
编写时间:  2009年7月6日
硬件支持:  LCD1602液晶屏  STC12C2052 外部12MHZ晶振 
说明备注:    使用2402液晶屏程序,与1602液晶屏程序完全兼容
/********************************************************************************************/
#include <STC12C2052AD.h>						// 包含头文件 //
/********************************************************************************************/
typedef unsigned char      uint8;          // 无符号8位整型变量 //

/********************************************************************************************
// 引脚定义 // (使用者根据实际更改)
/********************************************************************************************/
#define		LCM2402_DB0_DB7		P1			// 定义LCM2402的数据总线
sbit LCM2402_RS   = P3 ^ 2;					// 定义LCM2402的RS控制线
sbit LCM2402_RW   = P3 ^ 3;					// 定义LCM2402的RW控制线
sbit LCM2402_E    = P3 ^ 4;					// 定义LCM2402的E控制线
sbit LCM2402_Busy = P1 ^ 7;					// 定义LCM2402的测忙线(与LCM2402_DB0_DB7关联)
/********************************************************************************************
// 定义LCM2402指令集 // (详细请见技术手册)
/********************************************************************************************/
#define			CMD_clear		0x01             // 清除屏幕
#define			CMD_back		0x02             // DDRAM回零位
#define			CMD_dec1		0x04             // 读入后AC(指针)减1,向左写
#define			CMD_add1		0x06             // 读入后AC(指针)加1,向右写
#define			CMD_dis_gb1		0x0f             // 开显示_开光标_开光标闪烁
#define			CMD_dis_gb2		0x0e             // 开显示_开光标_关光标闪烁
#define			CMD_dis_gb3		0x0c             // 开显示_关光标_关光标闪烁
#define			CMD_OFF_dis		0x08             // 关显示_关光标_关光标闪烁
#define			CMD_set82		0x38             // 8位总线_2行显示
#define			CMD_set81		0x30             // 8位总线_1行显示(上边行)
#define			CMD_set42		0x28             // 4位总线_2行显示
#define			CMD_set41		0x20             // 4位总线_1行显示(上边行)
#define			lin_1			0x80             // 4位总线_1行显示(上边行)
#define			lin_2			0xc0             // 4位总线_1行显示(上边行)

/********************************************************************************************
// 读LCM忙程序 [底层协议] // (所有底层协议都无需关注)
// LCM2402测忙,若LCM2402处于忙状态,本函数将等待至非忙状态 //
/********************************************************************************************/
void LCM2402_TestBusy(void){
   	LCM2402_DB0_DB7 = 0xff;		//设备读状态
   	LCM2402_RS = 0;
   	LCM2402_RW = 1;
   	LCM2402_E = 1;
   	while(LCM2402_Busy);		//等待LCM不忙
   	LCM2402_E = 0;				//
}
/********************************************************************************************
// 写指令程序 //
// 向LCM2402写命令 本函数需要1个指令集的入口参数 //
/********************************************************************************************/
void LCM2402_WriteCMD(uint8 LCM2402_command) { 
  	LCM2402_TestBusy();
  	LCM2402_DB0_DB7 = LCM2402_command;
  	LCM2402_RS = 0;
  	LCM2402_RW = 0;
  	LCM2402_E = 1;
  	LCM2402_E = 0;
}
/********************************************************************************************
// 写数据程序 //
// 向LCM2402写数据 //
/********************************************************************************************/
void LCM2402_WriteData(uint8 LCM2402_data){ 
    LCM2402_TestBusy();
	LCM2402_DB0_DB7 = LCM2402_data;
  	LCM2402_RS = 1;
  	LCM2402_RW = 0;
  	LCM2402_E = 1;
  	LCM2402_E = 0;
}
/********************************************************************************************
// 打印字符串程序 // (本函数调用指针函数)
// 向LCM发送一个字符串,长度48字符之内 
// 第一行位置 0x00~0x17  第二行位置 0x40~0x57 
// 应用举例:print(0x80,"doyoung.net"); //在第一行第一位处从左向右打印doyoung.net字符串
/********************************************************************************************/
void print(uint8 a,uint8 *str){
	LCM2402_WriteCMD(a | 0x80);
	while(*str != '\0'){
		LCM2402_WriteData(*str++);
	}
	*str = 0;
}
/********************************************************************************************
// 打印单字符程序 // 
// 第一行位置 0x00~0x17  第二行位置 0x40~0x57 
// 向LCM发送一个字符,以十六进制(0x00)表示 
// 应用举例:print(0xc0,0x30); //在第二行第一位处打印字符“0”
/********************************************************************************************/
void print2(uint8 a,uint8 t){
		LCM2402_WriteCMD(a | 0x80);
		LCM2402_WriteData(t);
}
/********************************************************************************************
// LCM2402初始化 //(使用者可自定义,加 * 号程序行必须保留但可修改)
/********************************************************************************************/
void LCM2402_Init(void){
  	LCM2402_WriteCMD(CMD_set82);	//* 显示模式设置:显示2行,每个字符为5*7个像素
  	LCM2402_WriteCMD(CMD_clear);	//  显示清屏
  	LCM2402_WriteCMD(CMD_back);		//* 数据指针指向第1行第1个字符位置
  	LCM2402_WriteCMD(CMD_add1);		//  显示光标移动设置:文字不动,光标右移
  	LCM2402_WriteCMD(CMD_dis_gb3); 	//  显示开及光标设置:显示开,光标开,闪烁开
}
/********************************************************************************************/
//			以上是LCM2402驱动程序			//
/*********************************************************************************************/

/********************************************************************************************
串口初始化程序:波特率4800,(终端设置:4800,8,无,1,无)
/********************************************************************************************/
void Init_COM(void){
	TMOD = 0x20;	//定时器工作方式设置,定时器1方式2
	SCON = 0x50;	//串口工作方式1,允许串口接收   
	TH1 = 0xF3;		//定时器初值高8位设置
	TL1 = 0xF3;		//定时器初值低8位设置
	PCON = 0x80;	//波特率倍频
	TR1 = 1;		//定时器启动    
}

/********************************************************************************************
主程序:实现接收数据并把接收到的数据发送出去
/********************************************************************************************/
void main(){
   unsigned char dat,li=0x80;
   Init_COM();		//串口初始化
   LCM2402_Init();	//LCM2402初始化
   print(0x80," DoYoung Studio "); //在第一行打印LOGO字符
   print(0x40,"Input your words"); //在第二行打印LOGO字符
   while(1){
       if (RI == 1){		//接收中断标志位为1时
			dat = SBUF;		//接收数据 SBUF 为单片机的接收发送缓冲寄存器
            RI = 0;			//令接收中断标志位为0(软件清零)
		    SBUF = dat;		//将接收的数据发送回PC
			while(TI == 0);
			TI = 0;
			print2(li,dat); //在第一行显示串口字符串
			li++;
			if(li > 0x8f){
				li = 0x40;
			}
			if(li > 0x4f && li < 0x80){
				li = 0x80;
			}
		}
   }
}
/********************************************************************************************/

/*************************************************************
* 杜洋工作室 DoYoung Studio
* 分享创意电子 Share ideas of electronic
* www.DoYoung.net
/*************************************************************/

⌨️ 快捷键说明

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