📄 display.c.bak
字号:
/***************************************************
NAME:DISPLAY.c
Function:液晶的初始化、基本子程序
TIME: 2 Dec,2004
/RD========PA2 A0===========PA4
/WR========PA0 /LC_CS======PA3
LCD_RST====PA5
D0=========PB0 D1==========PB1
D2=========PB2 D3==========PB3
D4=========PB4 D5==========PB5
D6=========PB6 D7==========PB7
Controller Chip: SED1335Clock
Frequency : 24 MHz
Cpu Model : MC9S12DT128
COMPILED : codewarrior for hc12
*******************************************************/
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
#include "string.h"
#include <mc9s12dt128.h>
#include "variable.H"
//*----------------------LCD initial parameters-----------------------*//
unsigned char SYSTAB[8]={0x30,0x87,0x07,0x27,0x5f,0xc8,0x28,0x00};
unsigned char SCRTAB[10]={0x00,0x00,0xf0,0x00,0x40,0xf0,0x00,0x80,0x00,0x00};
/*-----------------------------------------------------------------------/
函数名称:LCD_delay_us()
功能:延时
参数:unsigned char count
返回值:无
/-----------------------------------------------------------------------*/
void lcd_delay_us(unsigned char count)
{
unsigned char i;
for(i=0;i<count;i++){
NOP();
}
}
/*-----------------------------------------------------------------------/
函数名称:variable_init()
功能:初始化变量
参数:
返回值:无
/-----------------------------------------------------------------------*/
void variable_init(void)
{
flag_m_indi=0;
lcd_clock[0]=0x31;//初始化lcd_clock[];
lcd_clock[1]=0x32;
lcd_clock[2]=0x3a;
lcd_clock[3]=0x30;
lcd_clock[4]=0x30;
lcd_clock[6]=0x00;
lcd_lich[0]=0x20;//初始化lcd_lich[];
lcd_lich[1]=0x20;
lcd_lich[2]=0x30;
lcd_lich[3]=0x2e;
lcd_lich[4]=0x30;
lcd_lich[5]=0x00;
lcd_rev[0]=0x20;//初始化lcd_rev[];
lcd_rev[1]=0x20;
lcd_rev[2]=0x20;
lcd_rev[3]=0x20;
lcd_rev[4]=0x20;
lcd_rev[5]=0x20;
lcd_rev[6]=0x30;
lcd_rev[7]=0x00;
lcd_in_temp[0]=0x20;//初始化lcd_itemp[];
lcd_in_temp[1]=0x30;
lcd_in_temp[2]=0x30;
lcd_in_temp[3]=0x00;
lcd_out_temp[0]=0x2d;//初始化lcd_itemp[];
lcd_out_temp[1]=0x31;
lcd_out_temp[2]=0x30;
lcd_out_temp[3]=0x00;
DJJ_delay_counter_key=0;
flag_time=0;
flag_failure=0;
flag_clock_flash=0;
flag_clock_set_flash=0;
flag_key_ph=0;
lcd_second=0;
lcd_km_lich[0]=0;
gloat_m=0;
lcd_km_rev[0]=999990;
lcd_tempe[0]=0;
DJJ_delay_counter_second=0;
failure_num=0;//错误类型
}
/*-----------------------------------------------------------------------/
函数名称:LCD_READ_busy()
功能:读出lcd状态
参数:无
返回值:lcd_state
/-----------------------------------------------------------------------*/
unsigned char LCD_READ_busy(void)
{
unsigned char lcd_state;
A0_clr();
LCD_CS_clr();
WR_set();
RD_clr();
DDRB=0x00;
lcd_state=PORTB;
RD_set();
LCD_CS_set();
lcd_state&=0x40;
return lcd_state;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_READ_busy_timout()
功能:读出lcd状态
参数:无
返回值:备用
/-----------------------------------------------------------------------*/
unsigned char LCD_READ_busy_timeout(void)
{
unsigned int busy_count;
for(busy_count=0;busy_count<500;busy_count++){
if(LCD_READ_busy()==0x00)return 1;
}
return 0;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_READ_idel_timout()
功能:读出lcd状态
参数:无
返回值:
/-----------------------------------------------------------------------*/
unsigned char LCD_READ_idel_timeout(void)
{
unsigned int busy_count;
for(busy_count=0;busy_count<500;busy_count++){
if(LCD_READ_busy()==0x40)return 1;
}
return 0;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_fault()
功能:判断lcd故障
参数:无
返回值:
/-----------------------------------------------------------------------*/
unsigned char LCD_fault(void)
{
unsigned int lcd_a,lcd_b,lcd_c;
lcd_a=LCD_READ_busy_timeout();
if(lcd_a==0)return 0;
lcd_b=LCD_READ_idel_timeout();
lcd_c=lcd_a&&lcd_b;
return lcd_c;
}
/*-----------------------------------------------------------------------/
函数名称:LCD_WRITE_COM()
功能:写入lcd控制命令
参数:unsigned char com
返回值:无
/-----------------------------------------------------------------------*/
void LCD_WRITE_COM(unsigned char com )//写命令
{
DDRB=0xff;
PORTB=com;
LCD_CS_clr();
A0_set();
WR_clr();
WR_set();
LCD_CS_set();
}
/*-----------------------------------------------------------------------/
函数名称:LCD_WRITE_DATA()
功能:写入lcd参数与数据
参数:unsigned char ref
返回值:无
/-----------------------------------------------------------------------*/
void LCD_WRITE_DATA(unsigned char ref )//写数据
{
DDRB=0xff;
PORTB=ref;
LCD_CS_clr();
A0_clr();
WR_clr();
WR_set();
LCD_CS_set();
}
/*-----------------------------------------------------------------------/
函数名称:lcd_CLRVRAM()
功能:显示存储器清零
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_CLRVRAM(void)
{
unsigned int i,j;
LCD_WRITE_COM(0x4c);
LCD_WRITE_COM(CSRW);
//DDRB=0xff;
LCD_WRITE_DATA(0x00);
LCD_WRITE_DATA(0x00);
LCD_WRITE_COM(MWRITE);
//DDRB=0xff;
for(i=0;i<=0x80;i++){
for(j=0;j<=0xff;j++){
LCD_WRITE_DATA(0x00);
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_CLRSCREEN()
功能:清除显示屏幕
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_CLRSCREEN(void)
{
unsigned int i,j;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(0X00);
LCD_WRITE_DATA(0X00);
LCD_WRITE_COM(MWRITE);
for(i=0;i<200;i++){
for(j=0;j<40;j++){
LCD_WRITE_DATA(0x00);
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_display_ON()
功能:屏幕开
参数:屏幕开参数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_display_ON(unsigned char data)
{
LCD_WRITE_COM(DISPON);
LCD_WRITE_DATA(data);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_display_OFF()
功能:屏幕关
参数:屏幕开参数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_display_OFF(unsigned char data)
{
LCD_WRITE_COM(DISPOFF);
LCD_WRITE_DATA(data);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_INTI()
功能:初始化lcd
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_INIT(void)
{
unsigned char b;
DDRA=0xff;
DDRB=0xff;
LCD_RST_clr();
for(b=0;b<100;b++){
asm{
nop
}
}
LCD_RST_set();
for(b=0;b<100;b++){
asm{
nop
}
}
LCD_LED_set();
RD_set();
A0_set();
WR_set();
LCD_CS_clr();
LCD_WRITE_COM(SYSSET);
for(b=0;b<8;b++){
LCD_WRITE_DATA(SYSTAB[b]);
}
LCD_WRITE_COM(SCROLL);
for(b=0;b<10;b++){
LCD_WRITE_DATA(SCRTAB[b]);
}
LCD_WRITE_COM(HDOTSCR);
LCD_WRITE_DATA(0X00);
LCD_WRITE_COM(OVLAY);
LCD_WRITE_DATA(0X0c);
LCD_WRITE_COM(DISPOFF);
LCD_WRITE_DATA(0X55);
lcd_CLRVRAM();
LCD_WRITE_COM(CSRFORM);
LCD_WRITE_DATA(0X00);
LCD_WRITE_DATA(0X00);
LCD_WRITE_COM(DISPON);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_start()
功能:设置显示的初始位置
参数:初始的行、列、光标的移动方向
返回值:无
//-----------------------------------------------------------------------*/
void lcd_start(unsigned int x,unsigned int y,unsigned char diec)
{
unsigned int temp;
unsigned char hi,lo;
temp=y*AP+x;
hi=(unsigned char)(temp>>8);
lo=(unsigned char)temp;
LCD_WRITE_COM(diec);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(lo);
LCD_WRITE_DATA(hi);
}
/*-----------------------------------------------------------------------/
函数名称:lcd_FillScreen()
功能:屏幕充满
参数:无
返回值:无
/-----------------------------------------------------------------------*/
void lcd_FillScreen(void)//充满屏幕
{
unsigned char i,j;
LCD_WRITE_COM(CSRRGT);
LCD_WRITE_COM(CSRW);
LCD_WRITE_DATA(0X00);
LCD_WRITE_DATA(0X00);
LCD_WRITE_COM(MWRITE);
for(i=0;i<0xf0;i++){
for(j=0;j<AP;j++){
////LCD_READ_busy_timeout();
////LCD_READ_busy_timeout();
LCD_WRITE_DATA(0x00);
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_clr_row()
功能:lcd清屏
参数:起始位置,行数、列数、层数
返回值:无
/-----------------------------------------------------------------------*/
void lcd_clr_row(unsigned char x,unsigned char y,unsigned char col,unsigned char row,unsigned int page)
{
unsigned int i;
unsigned char m;
for(m=0;m<col;m++){
lcd_start(x+m+page,y,CSRDOWN);
LCD_WRITE_COM(MWRITE);
for(i=0;i<row;i++){
////LCD_READ_busy_timeout();
////LCD_READ_busy_timeout();
LCD_WRITE_DATA(0xff);
}
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_move_left()
功能:字符向左移动N个象素(1-7)阳码
参数:字符左半部存储区、字符右半部存储区、行数、字符向左移动的像素
返回值:无
/-----------------------------------------------------------------------*/
void lcd_move_left_yang(unsigned char *left,unsigned char *right,
unsigned char row_count,unsigned char digit)
{
unsigned char i;
unsigned int middle;
for(i=0;i<row_count;i++){
middle=(int)left[i];
middle=middle<<digit;
left[i]=((char)(middle>>8))|(0xff<<digit);
right[i]=((char)middle)|(0xff>>(8-digit));
}
}
/*-----------------------------------------------------------------------/
函数名称:lcd_move_left()
功能:字符向左移动N个象素(1-7)阴码
参数:字符左半部存储区、字符右半部存储区、行数、字符向左移动的像素
返回值:无
/-----------------------------------------------------------------------*/
void lcd_move_left_yin(unsigned char *left,unsigned char *right,
unsigned char row_count,unsigned char digit)
{
unsigned char i;
unsigned int middle;
for(i=0;i<row_count;i++){
middle=(int)left[i];
middle=middle<<digit;
left[i]=(char)(middle>>8);
right[i]=(char)middle;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -