main.c
#include "reg52.h"
#include #include #include #include #include "LCD12864.h" void main( void ) { Ini_Lcd(); Lcd_WriteStr(0,0,"QQ137712826"); while ( 1 ) { } } lcd12864.h #include #include sbit RS = P2 ^ 0; sbit RW = P2 ^ 1; sbit EN = P2 ^ 2; sbit PSB = P2 ^ 3; sbit RST = P2 ^ 4; #define _NOP() _nop_() /* 12864液晶控制管脚 */ #define RS_CLR RS = 0 /* RS置低 */ #define RS_SET RS = 1 /* RS置高 */ #define RW_CLR RW = 0 /* RW置低 */ #define RW_SET RW = 1 /* RW置高 */ #define EN_CLR EN = 0 /* E置低 */ #define EN_SET EN = 1 /* E置高 */ #define PSB_CLR PSB = 0 /* PSB置低,串口方式 */ #define PSB_SET PSB = 1 /* PSB置高,并口方式 */ #define RST_CLR RST = 0 /* RST置低,会复位 */ #define RST_SET RST = 1 /* RST置高 */ /* 12864液晶的数据口 */ #define DataPort P0 /* 数据口 */ #define LcdData P0 void Delay_1ms( void ); void Delay_Nms( unsigned int n ); void LCD_write_com( unsigned char cmd ); void LCD_write_data( unsigned char dat ); void Ini_Lcd( void ); void Lcd_WriteStr( unsigned char x, unsigned char y, unsigned char *Str ); unsigned char Lcd_CheckBusy( void ); unsigned char Lcd_ReadData( void ); void delay_us( unsigned int t ) /* @11.0592MHz */ { while ( t-- ) { _nop_(); _nop_(); _nop_(); } } void delay_ms( unsigned int t ) /* @11.0592MHz */ { unsigned char i, j; while ( t-- ) { _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while ( --j ) ; } while ( --i ); } } void Delay_1ms( void ) { delay_ms( 1 ); } /* * *********************************************************************** * 显示屏命令写入函数 * *********************************************************************** */ void LCD_write_com( unsigned char cmd ) { while ( Lcd_CheckBusy() ) ; RS_CLR; RW_CLR; EN_SET; DataPort = cmd; EN_CLR; } /* * *********************************************************************** * 显示屏数据写入函数 * *********************************************************************** */ void LCD_write_data( unsigned char dat ) { while ( Lcd_CheckBusy() ) ; RS_SET; RW_CLR; EN_SET; DataPort = dat; /* delay_us( 1 ); */ EN_CLR; } /* * ************************************************************************* * 初始化IO口子程序 * ************************************************************************* */ void Port_init_12864( void ) { delay_ms( 50 ); PSB_SET; /* 液晶并口方式 */ RST_CLR; delay_ms( 100 ); RST_SET; } /******************************************* * 函数名称:Ini_Lcd * 功 能:初始化液晶模块 * 参 数:无 * 返回值 :无 ********************************************/ void Ini_Lcd( void ) { Port_init_12864(); /* 液晶控制端口设置为输出 */ LCD_write_com( 0x30 ); /* 基本指令集 */ Delay_1ms(); LCD_write_com( 0x02 ); /* 地址归位 */ Delay_1ms(); LCD_write_com( 0x0c ); /* 整体显示打开,游标关闭 */ Delay_1ms(); LCD_write_com( 0x01 ); /* 清除显示 */ Delay_1ms(); LCD_write_com( 0x06 ); /* 游标右移 */ Delay_1ms(); LCD_write_com( 0x80 ); /* 设定显示的起始地址 */ } /* * *********************************************************************** * 显示屏制定起始位置写入字符串 * *********************************************************************** */ void Lcd_WriteStr( unsigned char x, unsigned char y, unsigned char *Str ) { if ( (y > 3) || (x > 7) ) return; /* 超出范围直接不写 */ if ( y == 0 ) { LCD_write_com( 0x80 + x ); /* 第一行显示 */ } if ( y == 1 ) { LCD_write_com( 0x90 + x ); /* 第二行显示 */ } if ( y == 2 ) { LCD_write_com( 0x88 + x ); /* 第三行显示 */ } if ( y == 3 ) { LCD_write_com( 0x98 + x ); /* 第四行显示 */ } delay_us( 1 ); while ( *Str > 0 ) { LCD_write_data( *Str ); Str++; delay_us( 1 ); } } unsigned char Lcd_CheckBusy( void ) { unsigned char Busy; RS_CLR; RW_SET; EN_SET; delay_us( 5 ); Busy = LcdData & 0x80; EN_CLR; return(Busy); } /*********************************** * 从LCD中读出数据 ************************************/ unsigned char Lcd_ReadData( void ) { unsigned char Temp; while ( Lcd_CheckBusy() ) ; P0 = 0XFF; RS_SET; RW_SET; EN_SET; delay_us( 10 ); Temp = LcdData; EN_CLR; return(Temp); }
上一篇:51单片机 Proteus仿真 8X8点阵英文流水显示 汉字流水显示
下一篇:单片机 步进电机 驱动程序 ULN2003 28BYJ-48 5线4相电机
推荐阅读最新更新时间:2024-11-10 11:29
推荐帖子
- 评估板快速测试-基于TI Sitara Cortex-A9
- 前言本指导文档适用开发环境:Windows开发环境:Windows764bit、Windows1064bitLinux开发环境:Ubuntu14.04.364bit虚拟机:VMware14.1.1U-Boot:U-Boot-2017.01Kernel:Linux-4.9.65、Linux-RT-4.9.65LinuxProcessorSDK:ti-processor-sdk-linux-rt-am437x-evm-04.03.00.05进行
- Tronlong小分队 ARM技术
- RAM问题
- 某一RAM芯片,其存储容量为128K*16位,除电源盒接地端外,该芯片引出线的最少数目是()。A.33B.35C.25D.26答案:B解析:128K*16的存储器,数据线为16位,按字寻址的范围是2^17,按字节寻址的范围是2^19,地址线为19位。所以芯片引出线的最少数目是16+19=35。答案中的按字寻址和按字节寻址这点没看懂,怎么就出来2^19了呢?望指点一下RAM问题是啊,如果能按BYTE寻址,那么数据线应该是8位才对。可人家是16位宽,16(位宽)+17(地址线宽)
- 与非门 嵌入式系统
- (已解决)G2系列用32K晶体做电子钟,遇到一些问题。
- G2系列单片机软件怎么设置选择外部32K晶体?3L有答案,和我有同样问题的看看。以下内容是我从头文件里看到的。#defineDIVA0(0x10)/*ACLKDivider0*/#defineDIVA1(0x20)/*ACLKDivider1*/#defineXTS(0x40)/*LFXTCLK0:LowFreq./1:HighFreq.*/#defineXT2OFF(
- huang91 微控制器 MCU
- 求助!关于C6711的CCS配置问题
- 小弟用TI的C6711DSK,用的是3.3的CCS,却不知道怎么用它的并口连PC进行仿真听说需要从setup里面import,找到dsk6711epp/spp278/378,我试了试好像都不行,哪位好心人帮帮忙啊~求助!关于C6711的CCS配置问题有一长段时间没搞DSP了,我当时是用2.2版本的。建立prj之前的,是要配置一下setup的。不过我忘了具体配置什么内容了。。。
- wzer19 嵌入式系统
- 新人报道。我用28027做项目
- 单位要用28027做电力线载波,可我英文不好,看了2个星期了,一点头绪都没有,那位能帮一下忙。工作3年了,有单片机基础,前后用过5种单片机了(都还算是主流的牌子),要是学单片机的话,就是全英文的文档我也能对付,毕竟就是那些固定的寄存器之类,架构也大同小异,猜也能猜出来讲的是什么。但DSP感觉完全不是一个概念,文档看了半天总觉的好多东西没有讲,程序也和单片机不一样。我用的是代理商给的北京瑞泰的28027开发板和仿真器,给的LED例程里,工程下居然有23个H文件,6个C文件和2个ASM,功能只是
- aerodancing 微控制器 MCU
- dspic33用什么C编译器
- 请问高手,dspic33用什么C编译器?是和dspic30一样吗?谢谢!dspic33用什么C编译器以前用过Microchip自家的MPLABC30编译器,可以上其官网看看记得是用MAPLABXIDE(编辑器)+C30(编译器),或者去官网搜索芯片型号,会有需要的信息
- chenbingjy Microchip MCU
设计资源 培训 开发板 精华推荐
- PN532
- LTC2152IUJ-12 单通道、12 位、250Msps ADC 的典型应用电路
- ADR433B 3 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- LT3477IUF 1A 降压模式大电流 LED 驱动器的典型应用电路
- NCV890104MWGEVB,汽车开关稳压器扩频评估板
- 使用外部基准电流的 LT3088IM 线性稳压器的典型应用
- AND8416/D,使用 CAT5132 用于 TFT LCD 显示器中的 VCOM 缓冲器控制
- 使用 Richtek Technology Corporation 的 RT8287 的参考设计
- NSI45025T1G 大电流 LED 灯串的典型应用
- DER-232 - 基于TOP259LN的低成本、元器件少、15.4毫米厚的65W适配器