allowed // ADC_ConvertedValueLocal[1] =(float) ADC_ConvertedValue[1]/4096*(float)3.291; // //LCD显示 // sprintf(ShowBuf_ADC,\// Display_String(1,0,(u8*)ShowBuf_ADC,5); //if the voltage of photosensitive resistor is higher than 2.0V(=2489.21),turn off the backlight if(ADC_Result>=2489) { if(LCDBLKIcon!=1)//Prevent repeat display mechanism { LCD_BLK = 0; //turn on the backlight LCD_Write_CGRAM_ONE(MoonIcon,0,2); Display_CGRAM(1,6,0,2); //Show moon icon } LCDBLKIcon = 1; } else { if(LCDBLKIcon!=2)//Prevent repeat display mechanism { LCD_BLK = 1; //turn off the backlight LCD_Write_CGRAM_ONE(SunIcon,0,2); Display_CGRAM(1,6,0,2); //Clear moon icon } LCDBLKIcon = 2; } }
/*********************************************************/
LCD12864.h文件:
/********************************************************** * @ File name -> lcd12864.h * @ Version -> V1.1.2
* @ Date -> 11-30-2013
* @ Brief -> LCD12864驱动函数头文件 * 适用于ST7920驱动芯片
V1.1
* @ Revise -> A、修正操作命令宏定义。
* @ -> B、增加串口、并口转换宏定义,增加对高速度MCU控制通讯频率延时函数
* @ -> C、显示字符串函数增加显示长度选择,即显示多少个ASCII可显示字符,
汉字x2即可
* @ -> D、去掉显示数组函数,合并在字符串显示里
V1.1.1
* @ Revise ->增加字符串显示函数,可以从要显示的数组中任意位置显示一定长度字符串
V1.1.2
* @ Revise -> A、增加对低速晶振系统的MCU通讯频率是否使用的宏定义 * @ -> B、增加在检测液晶忙超时退出,预防死循环 **********************************************************/
#ifndef _lcd12864_h_ #define _lcd12864_h_
/**********************************************************
外部函数头文件
应用到不同的外设头文件请在这里修改即可
**********************************************************/
#include \
/********************************************************** LCD工作模式选择
LCD并口和串口选择请修改此参数和硬件电路即可
**********************************************************/ //#define LCD_Work_Mode_Parallel 1 //并行工作模式 //#define LCD_Work_Mode_SoftSPI 1 //串行工作模式(GPIO模拟SPI) #define LCD_Work_Mode_HardSPI 1 //串行工作模式(硬件SPI)
//#define Soft_PSB 1 //定义:使用硬件控制串口--->并口模式 //未定义:使用软件控制串口--->并口模式
/********************************************************** 延时调整通讯频率参数
需要使用不同频率的请修改此延时函数值
**********************************************************/ #define LCD_Delay() LCD_delay_1us();
/********************************************************** 定义接口信息
**********************************************************/
#ifdef Soft_PSB //定义了则使用软件控制
#define LCD_PSB PBout(12) //LCD并口和串口通讯选择口:0-串口;1-并口
#endif
//=========================================================
#ifdef LCD_Work_Mode_Parallel /* 并口工作模式 */
//=========================================================
#define DataBusGPIO GPIOB //定义12864要使用的I/O端口。 #define DataBusGPIOCLK RCC_APB2Periph_GPIOB //定义12864要使用的I/O端口的时钟。 #define DataBusPins GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7 //定义12864使用的数据引脚。
#define DataBusPin7 GPIO_Pin_7 #define LCDWriteData(x) GPIOB->ODR=((GPIOB->ODR & 0xff00)|x); //此处,只有直接操作寄存器才能
//达到,只改变输出数据寄存器ODR的低8位,其它位
//不变的目的。因为,只有低8位是数据引脚,
//其它位可能是控制引脚,不能改变。 #define LCD_EN PBout(8) #define LCD_RW PBout(9) #define LCD_RS PBout(10) #define LCD_RST PBout(11)
//=========================================================
#else /* 串口工作模式 */
#define LCD_RST PBout(6) //LCD复位脚RST #define LCD_CS PAout(15) //LCD对应管脚为RS #define LCD_PWDN PDout(4) //LCD电源使能引脚,低电平有效 #define LCD_BLK PDout(5) //LCD背光使能引脚,低电平有
效 //========================================================= #ifdef LCD_Work_Mode_HardSPI /***********串口模式时接口定义***********/ #else #define LCD_SCL PBout(3) //LCD对应管脚为EN #define LCD_SDA PBout(5) //LCD对应管脚为RW #endif //=========================================================
#endif //结束串口、并口模式选择
//=========================================================
/********************************************************** 参数宏定义
**********************************************************/
#define LCD_Busy 0x80 //LCD忙标志
#define Graph_BassADD 0x00 //显示GRAM基地址
//////////////////////////////////////////////////////
//LCD12864指令集
////////////////////////////////////////////////////// #define One_LineAddress 0x80 //第一行基地址 #define Two_LineAddress 0x90 //第二行基地址 #define Three_LineAddress 0x88 //第三行基地址 #define Four_LineAddress 0x98 //第四行基地址
//基本指令宏定义 #define MPU_Busy 0x80 //LCD忙,同时也读出了地址计数器(AC)数值
#define Clear_Display 0x01 //清屏指令 #define Zero_Address 0x02 //显示地址归零,AC = 0
//扩充指令宏定义
#define LCD_Standby 0x01 //待机指令,先设置RE = 1(功能设定寄存器),在送此命令即进入待机模式
//退出待机,写入任意指令可以退出,再将RE = 0即可
/***********基本指令***********/
//进入设定点(entry mode set)
// b7 b6 b5 b4 b3 b2 b1 b0 // 0 0 0 0 0 1 I/D S #define Entry_ModeSet 0x04
#define Vernier_ShiftRight #define Vernier_ShiftLeft
//基数
(Entry_ModeSet | (1<<1)) //游标右移,AC+1 (Entry_ModeSet | (0<<1)) //游标右移,AC-1
#define Frames_ShiftRight (Vernier_ShiftLeft | 0x01) //画面整体右移 #define Frames_ShiftLeft (Vernier_ShiftRight | 0x01) //画面整体左移
//显示开关设置(display status)
// b7 b6 b5 b4 b3 b2 b1 b0 // 0 0 0 0 1 D C B #define Display_Status
#define Open_Display #define Close_Display
#define Open_Vernier #define Close_Vernier
0x08 //基数
(Display_Status | (1<<2)) //整体显示开 (Display_Status | (0<<2)) //整体显示关 (Display_Status | (1<<1)) //游标显示开 (Display_Status | (0<<1)) //游标显示关
(Display_Status | 0x01) //游标位置显示反白开 (Display_Status | 0x00) //游标位置显示反白关,正常显示
#define Vernier_White_Open
#define Vernier_White_Close
//游标或显示移位控制(cursor and display shift control) // b7 b6 b5 b4 b3 b2 b1 b0 // 0 0 0 1 S/C R/L1 X X #define Cursor_Display_Control 0x10 //基数
#define Cursor_ShiftLeft 1
(Cursor_Display_Control | (0<<2)) //游标向左移动,AC = AC -
#define Cursor_ShiftRight (Cursor_Display_Control | (1<<2)) //游标向右移动,AC = AC + 1
#define Display_ShiftLeft (Cursor_Display_Control | (2<<2)) //显示向左移动,游标跟着移动,AC = AC
#define Display_ShiftRight (Cursor_Display_Control | (3<<2)) //显示向右移动,游标跟着移动,AC = AC
//功能设定(function set)
// b7 b6 b5 b4 b3 b2 b1 b0 // 0 0 1 DL X 0/RE X X #define Function_SetBasic 0x20 //基数