📄 lcd.c
字号:
/*
***************************************************************************************
* 文件名: LED.C
*
* 功能 :
*
* 参数说明 : (1)
*
* 状态 :
****************************************************************************************
*/
#include "stdlib.h"
#include "string.h"
#include <mc9s12dg128.h>
extern void uart_putchar(unsigned char ch);
unsigned char Length(char *str);
void Delay(void);
void LCD_Init(void);
void update_lcd_display(void);
void set_lcd_addr(unsigned char addr_x);
void speed_show(unsigned char l,unsigned int i);
unsigned char lcd_dsp_buff[64];
#define Data(data) (PTH=(unsigned char)(data))
/*
#define RS0 PORTB &=~0x02
#define RW0 PORTB &=~0x08
#define E0 PORTB &=~0x20
#define RS1 PORTB |=0x02
#define RW1 PORTB |=0x08
#define E1 PORTB |=0x20
*/
#define RS0 PTJ &=~0x01
#define RW0 PTJ &=~0x02
#define E0 PTJ &=~0x40
#define RS1 PTJ |=0x01
#define RW1 PTJ |=0x02
#define E1 PTJ |=0x40
#define WriteIR_comm RS0;RW0
#define WriteDR_comm RS1;RW0
#define ReadAC_comm RS0;RW1
#define ReadDR_comm RS1;RW1
#define LockinB_comm E1;Delay()
#define LockinE_comm Delay();E0
#define WriteIR(data) WriteIR_comm;LockinB_comm;Data(data);LockinE_comm //写指令到IR
#define WriteRAM(data) WriteDR_comm;LockinB_comm;Data(data);LockinE_comm //写数据到RAM
/*------------------------------------------------------------------------------
* LCD初始化
*
*/
void LCD_Init(void){
unsigned char i;
WriteIR(0x01) ; //清屏
for(i=0;i<100;i++)
Delay();
WriteIR(0x02) ; //
WriteIR(0x06) ; //显示方式
WriteIR(0x0e) ; //
WriteIR(0x14) ; //
WriteIR(0x30) ;
WriteIR(0x80) ; //打开显示
}
/*----------------------------------------------------------------------------
*显示字符
*
*/
void LCD_display(unsigned char line,char ch[]){
unsigned char length,i;
switch(line){
case 1:WriteIR(0x80);break;
case 2:WriteIR(0x90);break;
case 3:WriteIR(0x88);break;
case 4:WriteIR(0x98);break;
default:break;
}
length=(unsigned char )Length((char *)ch);
for(i=0;i<length;i++){
WriteRAM(ch[i]) ; //写入一个8bit的字符
Delay();
if(i>15){
line++;
if(line>4)line=1;
switch(line){
case 1:WriteIR(0x80);break;
case 2:WriteIR(0x90);break;
case 3:WriteIR(0x88);break;
case 4:WriteIR(0x98);break;
default:break;
}
}
}
}
/*-----------------------------------------------------------------------------
*
*/
void set_lcd_addr(unsigned char addr_x)//ac地址的矫正
{
if ((addr_x>7) && (addr_x<16)) {
WriteIR(addr_x+0x88);
}
else if ((addr_x>15) && (addr_x<24)) {
WriteIR(addr_x+0x80-8);
}
else if ((addr_x>23) && (addr_x<32)) {
WriteIR(addr_x+0x90-16);
}
else {
WriteIR(addr_x+0x80);
}
}
/*---------------------------------------------------------------------------------
*
* Delay()延时等函数
*
*/
void Delay(void){
unsigned int j,temp;
temp=0;
for(j=0;j<900;j++)
temp++;
}
/*-----------------------------------------------------------------------------
*
*/
unsigned char Length(char str[]){
unsigned char i;
char temp;
if(str==NULL)return 0;
else{
for(i=0;;i++){
temp=*(str+i);
if(temp=='\0')
break;
}
return i+1 ;
}
}
void update_lcd_display(void)
{
unsigned char i,j;
for(i=0;i<32;i++)
{
set_lcd_addr(i);
WriteRAM(lcd_dsp_buff[i+i]) ; //写入一个8bit的字符
WriteRAM(lcd_dsp_buff[i+i+1]) ; //写入一个8bit的字符
}
}
void speed_show(unsigned char l,unsigned int i)
{
unsigned char j,k;
unsigned int a,b;
a=i;
for(j=0;j<5;j++) {
a=a/10;
if(!a)
break;
}
b=1;
k=j;
for (;j>0;j--)
b=b*10;
for(;k>0;k--) {
a=i/b;
i=i%b;
b=b/10;
j=a;
lcd_dsp_buff[l]=j+0x30;
l++;
}
lcd_dsp_buff[l]=i+0x30;
for(j=0;j<3;j++)
{
l++;
lcd_dsp_buff[l]=' ';
}
// update_lcd_display();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -