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