00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "..\inc\includes.h"
00010
00011 INT8U LcmChar[80]={
00012 '8','O','5','1',' ','C','O','N','T','R','O','L',' ','S','Y','S','T','E','M',' ',
00013 'M','O','T','O','R',':',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
00014 'U','A','R','T',':',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
00015 ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
00016 };
00017
00018 struct LCM_CONTROL LcmCtrl;
00019 #define LcmData P0
00020 sbit LcmEnableSignal=P2^5;
00021 sbit LcmRw= P2^6;
00022 sbit LcmRegSelect= P2^7;
00023
00024 void F_LcmPowerOnInit(void) LargeReentrant;
00025 void F_SvcLcm(void) LargeReentrant;
00026 void F_LcmCommandWrite(INT8U)LargeReentrant;
00027 void F_LcmDataWrite(INT8U)LargeReentrant;
00028
00029 void F_LcmPowerOnInit() LargeReentrant{
00030 LcmRw=1;
00031 LcmRegSelect=1;
00032 LcmEnableSignal=1;
00033 LcmData=0xff;
00034 LcmCtrl.State=LcmInitial0State;
00035 LcmCtrl.Status=0;
00036 LcmCtrl.Position=0;
00037 LcmCtrl.Timer=20;
00038 }
00039 void F_LcmSvc(void) LargeReentrant{
00040 if(LcmCtrl.Timer!=0) return;
00041 LcmCtrl.Timer=5;
00042 switch(LcmCtrl.State){
00043 case LcmIdleState:
00044 break;
00045 case LcmInitial0State:
00046 F_LcmCommandWrite(0x38);
00047 LcmCtrl.State=LcmInitial1State;
00048 break;
00049 case LcmInitial1State:
00050 F_LcmCommandWrite(0x08);
00051 LcmCtrl.State=LcmInitial2State;
00052 break;
00053 case LcmInitial2State:
00054 F_LcmCommandWrite(0x01);
00055 LcmCtrl.State=LcmInitial3State;
00056 break;
00057 case LcmInitial3State:
00058 F_LcmCommandWrite(0x06);
00059 LcmCtrl.State=LcmInitial4State;
00060 break;
00061 case LcmInitial4State:
00062 F_LcmCommandWrite(0x0c);
00063 LcmCtrl.State=LcmInitial5State;
00064 break;
00065 case LcmInitial5State:
00066 F_LcmCommandWrite(0x80);
00067 LcmCtrl.State=LcmShowLine0State;
00068 break;
00069 case LcmShowLine0State:
00070 F_LcmDataWrite(LcmChar[LcmCtrl.Position]);
00071 LcmCtrl.Position++;
00072 if(LcmCtrl.Position==20){
00073 LcmCtrl.Position=0;
00074 LcmCtrl.State=LcmChangeLine1State;
00075 }
00076 break;
00077 case LcmShowLine1State:
00078 F_LcmDataWrite(LcmChar[LcmCtrl.Position+20]);
00079 LcmCtrl.Position++;
00080 if(LcmCtrl.Position==20){
00081 LcmCtrl.Position=0;
00082 LcmCtrl.State=LcmChangeLine2State;
00083 }
00084 break;
00085 case LcmShowLine2State:
00086 F_LcmDataWrite(LcmChar[LcmCtrl.Position+40]);
00087 LcmCtrl.Position++;
00088 if(LcmCtrl.Position==20){
00089 LcmCtrl.Position=0;
00090 LcmCtrl.State=LcmChangeLine3State;
00091 }
00092 break;
00093 case LcmShowLine3State:
00094 F_LcmDataWrite(LcmChar[LcmCtrl.Position+60]);
00095 LcmCtrl.Position++;
00096 if(LcmCtrl.Position==20){
00097 LcmCtrl.Position=0;
00098 LcmCtrl.State=LcmChangeLine0State;
00099 }
00100 break;
00101 case LcmChangeLine0State:
00102 F_LcmCommandWrite(0x80);
00103 LcmCtrl.State=LcmShowLine0State;
00104 break;
00105 case LcmChangeLine1State:
00106 F_LcmCommandWrite(0xC0);
00107 LcmCtrl.State=LcmShowLine1State;
00108 break;
00109 case LcmChangeLine2State:
00110 F_LcmCommandWrite(0x94);
00111 LcmCtrl.State=LcmShowLine2State;
00112 break;
00113 case LcmChangeLine3State:
00114 F_LcmCommandWrite(0xD4);
00115 LcmCtrl.State=LcmShowLine3State;
00116 break;
00117 default:
00118 LcmCtrl.State=LcmIdleState;
00119 break;
00120 }
00121 }
00122 void F_LcmCommandWrite(INT8U Command) LargeReentrant{
00123 LcmRw=0;
00124 _nop_();
00125 _nop_();
00126 LcmRegSelect=0;
00127 _nop_();
00128 _nop_();
00129 LcmData=Command;
00130 _nop_();
00131 _nop_();
00132 LcmEnableSignal=1;
00133 _nop_();
00134 _nop_();
00135 LcmEnableSignal=0;
00136 _nop_();
00137 _nop_();
00138 LcmEnableSignal=1;
00139 }
00140 void F_LcmDataWrite(INT8U Data) LargeReentrant{
00141 LcmRw=0;
00142 _nop_();
00143 _nop_();
00144 LcmRegSelect=1;
00145 _nop_();
00146 _nop_();
00147 LcmData=Data;
00148 _nop_();
00149 _nop_();
00150 LcmEnableSignal=1;
00151 _nop_();
00152 _nop_();
00153 LcmEnableSignal=0;
00154 _nop_();
00155 _nop_();
00156 LcmEnableSignal=1;
00157 }
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167