📄 lcd.c
字号:
#include "config.h"
void LCD_WIRTE_DELAY(unsigned int lcd_time)
{
WDR();
while(--lcd_time)
{;}
WDR();
}
/*--------------------------向LCD写命令---------*/
///////////////////////////////////////////////////////////////////////////////////////////////////
void LCD_WRI_ORDER(unsigned char ORDER)
{
unsigned char DATA;
WDR();
// PORTD=PORTD&0X1F;//PD7,6,5置0
PORTA=PORTA&0XF8;
LCD_WIRTE_DELAY(200);
//PORTD=PORTD&0X1F;//PD7,6,5置0
PORTA=PORTA&0XF8;
PORTB=ORDER;
//PORTD=PORTD|0X80;//PD7置1
PORTA=PORTA |0X04;
LCD_WIRTE_DELAY(200);
//PORTD=PORTD&0X1F;//PD7,6,5置0
PORTA=PORTA&0XF8;
}
/*-----------写到lcd中显示数据---------*/
////////////////////////////////////////////////////////////////////////////////////
void LCD_WRI_DATA(unsigned char DATA)
{
unsigned char ords;
WDR();
//PORTD=PORTD&0X7F;//PD7置0
PORTA=PORTA&0XFB;
LCD_WIRTE_DELAY(200);
//PORTD=PORTD|0X20; //PD5置1
PORTA=PORTA|0X01;
PORTB=DATA;
//PORTD=PORTD|0X80;//PD7置1
PORTA=PORTA |0X04;
LCD_WIRTE_DELAY(200);
//PORTD=PORTD&0X1F;//PD7,6,5置0
PORTA=PORTA & 0XF8;
}
/*-------------延时46us----------*/
void LCD_DELAY()
{
unsigned int time=500;
WDR();
while(--time);
WDR();
}
void LCD_CLEAR()
{
LCD_WRI_ORDER(0X01);
LCD_DELAY();
}
//#define EN (DDRD|=BIT(PD7))
//#define RW (DDRD|=BIT(PD6))
//#define CR (DDRD|=BIT(PD5))
//////////////////////////////////////////////////////////////
#define EN (DDRA|=BIT(PA2))
#define RW (DDRA|=BIT(PA1))
#define CR (DDRA|=BIT(PA0))
/////////////////////////////////////////////////////////////
void LCD_WORD_INI(void)
{
WDR();
EN;RW;CR;
LCD_WRI_ORDER(0X30); /*----------------清显示--------------------*/
LCD_DELAY();
LCD_WRI_ORDER(0X30); /*----------------清显示--------------------*/
LCD_DELAY();
LCD_DELAY();
LCD_WRI_ORDER(0X0C); /*------------ 显示右移光标右移 --------------*/
LCD_DELAY();
LCD_WRI_ORDER(0X01); /*------------ 显示右移光标右移 --------------*/
Delay1ms(1);
LCD_WRI_ORDER(0X06); /*-------功能定为基本指令集动作8位------------*/
LCD_DELAY();
}
/*
void LCD_PIC_INI()
{
WDR();
LCD_WORD_INI();
LCD_WRI_ORDER(0X32); /*-------功能设定为基本指令集8位显示图形-----------*/
/* LCD_DELAY();
LCD_WRI_ORDER(0X36); /*-------功能设定为扩充指令集8位显示图形-----------*/
// LCD_DELAY();
//}*/
void LCD_ADD(unsigned char ADD)//写入地址
{
LCD_WRI_ORDER(ADD);
LCD_DELAY();
}
void DISPLAY_LCD(unsigned char ADD,unsigned char *DISP)//显示字符串
{
unsigned char Y;
WDR();
LCD_WRI_ORDER(ADD);
LCD_DELAY();
for(Y=0;*DISP!='\0';Y++)
{
LCD_DELAY();
LCD_WRI_DATA(*DISP);
LCD_DELAY();DISP++;
}
}
void shuzi_disp(unsigned char ADD,unsigned char NUMber) //一位数字显示
{
unsigned char number[]={"0123456789abcdef"};
WDR();
LCD_WRI_ORDER(ADD); LCD_DELAY();
LCD_WRI_DATA(number[NUMber]); LCD_DELAY();
}
void NUM_DISPLAY_LCD(unsigned char ADD,unsigned int NUMber)//数字显示
{
unsigned char WW;
unsigned char QW;
unsigned char BW;
unsigned char SW;
unsigned char SWS;
unsigned char GW;
unsigned char number[]={"0123456789 "};
WDR();
LCD_WRI_ORDER(ADD);
LCD_DELAY();
WW=NUMber/10000;
QW=(NUMber%10000)/1000;
BW=(NUMber%1000)/100;
SWS=(NUMber%1000)%100;
SW=SWS/10;
GW=SWS%10;
if(WW)
LCD_WRI_DATA(number[WW]);
else
LCD_WRI_DATA(number[10]);
LCD_DELAY();
if(QW||WW)
LCD_WRI_DATA(number[QW]);
else
LCD_WRI_DATA(number[10]);
LCD_DELAY();
if(BW||QW||WW)
LCD_WRI_DATA(number[BW]);
else
LCD_WRI_DATA(number[10]);
LCD_DELAY();
if(SW!=0||BW||QW||WW)
LCD_WRI_DATA(number[SW]);
else
LCD_WRI_DATA(number[10]);
LCD_DELAY();
LCD_WRI_DATA(number[GW]);
LCD_DELAY();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -