📄 lcm.c
字号:
/*----------------------------- Program Overview -------------------------------
Device Name: AT89S52
ROM: 8 K bytes
RAM: 512 bytes
Chip Basic Functions: 40pin, 32I/O, 16 bit Timer *3, 8 bit UART *1, Eight Interrupt Sources
4.0V to 5.5V Operating Range, OSC 11.0592 MHz (0.9216 us)
Complier: keil C 750
Simulator: keil C 750
Programmer:
File Name: lcm.c
File Functtion: lcm display function
Copyright: XIAZHAOJUN
First Version Finished Date: 2007.11.6
Others:
------------------------------- Modified Note ----------------------------------
Old Version:
New Version:
New CheckSum:
Modifier:
Modified Date:
Modified Causation:
Modified Mean:
-------------------------------------------------------------------------------*/
//----------------------------- Include ----------------------------------------
#include <reg52.h>
//#include <stdio.h>
//#include<intrins.h>
#include<lcm.h>
#include<com.h>
#include<key.h>
//#include<cmain.h>
//----------------------------- SFR Definition ---------------------------------
/*----------------------------------------------
LCD1602
|DB0-----P1.0 | DB4-----P1.4 | RW-------P3.3 |
|DB1-----P1.1 | DB5-----P1.5 | RS-------P3.2 |
|DB2-----P1.2 | DB6-----P1.6 | E--------P3.4 |
|DB3-----P1.3 | DB7-----P1.7 |
VSS--GND
VDD--VCC
BLA--VCC
BLK--GND
VLCD接1K电阻到GND
----------------------------------------------*/
sbit LCM_RW = P3^6;
sbit LCM_RS = P3^7;
sbit LCM_E = P3^4;
//----------------------------- Macro Definition -------------------------------
#define LCM_Data P1
#define uchar unsigned char
#define uint unsigned int
//----------------------------- Constant Definition ----------------------------
uchar lcm_md;
//----------------------------- Variable Definition ----------------------------
unsigned char data dsip_ra;
unsigned char data dsip_rb;
unsigned char data dsip_r0;
unsigned char data dsip_r1;
unsigned char data dsip_r4;
unsigned char data dsip_r5;
//----------------------------- Bit Definition ---------------------------------
bit b_disp;
//----------------------------- Program Code -----------------------------------
/*----------------------------- Subroutine -------------------------------------
Name: lcm table
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
uchar code dsiptaba[14]={" XIA ZHAO JUN "};
uchar code dsiptabb[14]={"copyright 2007"};
uchar code dsiptabwait[9]={"wait... "};
uchar code dsp_tab_line[10][9]=
{
{"OFF Stop "}, //0
{"OFF Up "}, //1
{"OFF Down "}, //2
{"OFF Left "}, //3
{"OFF Right"}, //4
{"ON Stop "}, //5
{"ON Up "}, //6
{"ON Down "}, //7
{"ON Left "}, //8
{"ON Right"} //9
};
uchar code dsp_tab_send[7][9]=
{
{"Stop... "}, //0
{"Up... "}, //1
{"Down... "}, //2
{"Left... "}, //3
{"Right... "}, //4
{"OFF... "}, //5
{"ON... "} //6
};
uchar code dsp_tab_send_OK[9]={"Send OK "}; //0
uchar code dsp_tab_ERR[9]= {"COM Error"}; //6
/*----------------------------- Subroutine -------------------------------------
Name: delay
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void del_100us(void){
uchar j;
for(j=100;j>0;j--);
}
void del_1ms(void){
uchar j;
for(j=10;j>0;j--){
del_100us();
}
}
void del_10ms(void){
uchar i;
for(i=100;i>0;i--){
del_100us();
}
}
void del_100ms(void){
uchar i;
for(i=10;i>0;i--){
del_10ms();
}
}
static void short_delay(unsigned int i){
while (i>0) i--;
}
/*----------------------------- Subroutine -------------------------------------
Name: 1602 LCM busy
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void ReadBusyLCM(void){
bit result;
do{
LCM_RS = 0;
LCM_RW = 1;
LCM_E = 0;
LCM_E = 1;
LCM_Data=0xff;
result = (bit)(LCM_Data&0x80);
LCM_E = 0;
}while (result == 1);
del_1ms();
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm command
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void WriteCommandLCM(unsigned char WCLCM,unsigned char BusyC){ //BusyC为0时忽略忙检测
if (BusyC){
ReadBusyLCM(); //根据需要检测忙
}
LCM_E=0;
LCM_RS=0;
LCM_RW=0;
LCM_E=1;
LCM_Data=WCLCM;
LCM_E=0;
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm write data
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void WritedataLCM(unsigned char WCLM,unsigned char BuyC){
if (BuyC){
ReadBusyLCM(); //根据需要检测忙
}
LCM_E=0;
LCM_RS=1;
LCM_RW=0;
LCM_E=1;
LCM_Data=WCLM;
LCM_E=0;
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm init
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void LCMInit(void){ //LCM初始化
WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x0C,1); // 显示开及光标设置
WriteCommandLCM(0x06,1); // 显示光标移动设置
WriteCommandLCM(0x01,1); //显示清屏
short_delay(250);
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm write tab data
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void LCMwritetab_rst(void){
unsigned char i;
WriteCommandLCM(0x01,1);
del_100ms();
for(i=0;i<9;i++)
{
WritedataLCM(dsp_tab_line[0][i],1);
}
WriteCommandLCM(0xc0,1);
for(i=0;i<9;i++) {
WritedataLCM(dsiptabwait[i],1);
}
}
void LCMwritetab(void){
unsigned char i;
WriteCommandLCM(0x01,1);
for(i=0;i<14;i++){
WritedataLCM(dsiptabb[i],1);
}
short_delay(250);
WriteCommandLCM(0xc0,1);
for(i=0;i<14;i++) {
WritedataLCM(dsiptaba[i],1);
}
del_100ms();
LCMwritetab_rst();
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm write receive motor stats data
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void LCMwritetrece_stasdat(unsigned char DData){
unsigned char i;
WriteCommandLCM(0x01,1);
del_100ms();
for(i=0;i<9;i++)
{
WritedataLCM(dsp_tab_line[DData][i],1);
}
WriteCommandLCM(0xc0,1);
for(i=0;i<9;i++) {
WritedataLCM(dsiptabwait[i],1);
}
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm write send stats data ok
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void LCMwritetsending_OK(unsigned char DData){
unsigned char i;
WriteCommandLCM(0x01,1);
del_100ms();
for(i=0;i<9;i++)
{
WritedataLCM(dsp_tab_line[DData][i],1);
}
WriteCommandLCM(0xc0,1);
for(i=0;i<9;i++)
{
WritedataLCM(dsp_tab_send_OK[i],1);
}
}
/*----------------------------- Subroutine -------------------------------------
Name: LCMwritetsending_out
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void LCMwritetsending_out(unsigned char DData){
unsigned char i;
WriteCommandLCM(0x02,1);
del_100ms();
WriteCommandLCM(0xc0,1);
for(i=0;i<9;i++)
{
WritedataLCM(dsp_tab_send[DData][i],1);
}
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm_initial
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void lcm_initial(void){
LCMInit();
LCMwritetab();
b_disp=0;
}
/*----------------------------- Subroutine -------------------------------------
Name: lcm
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void lcm(void){
unsigned char lcdt;
if(b_disp==1){
b_disp=0;
TR0=0;
if(lcm_md==0x01){ // disp receive motor run data
lcdt=(comdata&0x0f); //dsp_tab_line
comdata&=0x3f;
if(comdata>0x0f){
lcdt+=0x05;
}
LCMwritetrece_stasdat(lcdt);
}
if(lcm_md==0x02){ //接受到数据正确 显示ok
//dsp_tab_send_OK
lcdt=(comdata&0x0f); //dsp_tab_line
comdata&=0x3f;
if(comdata>0x0f){
lcdt+=0x05;
}
LCMwritetsending_OK(lcdt);
}
if(lcm_md==0x03){ //显示 发送 状态
lcdt=keytabdat; //dsp_tab_send
LCMwritetsending_out(lcdt);
}
if(lcm_md==0x04){ //显示 发送 状态
comdata=0x00;
LCMwritetab_rst();
}
TR0=1;
}
}
//void lcm(void){
// unsigned char lcdtset;
// if(b_disp==1){
// b_disp=0;
//
// WriteCommandLCM(0x01,1);
//
////
// lcdtset=(dsip_r0>>4);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_r0&0x0f);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_r1>>4);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_r1&0x0f);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
//
////
//
// lcdtset=(dsip_ra>>4);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_ra&0x0f);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_rb>>4);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_rb&0x0f);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
////
//
//
//
// lcdtset=(dsip_r4>>4);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_r4&0x0f);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_r5>>4);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
// lcdtset=(dsip_r5&0x0f);
// lcdtset+=0x30;
// if(lcdtset>0x39){
// lcdtset+=0x07;
// }
// WritedataLCM(lcdtset,1);
//
//
// }
//
//}
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -