C51 COMPILER V7.50 LCD_AUSGABE 09/29/2008 11:14:42 PAGE 1 C51 COMPILER V7.50, COMPILATION OF MODULE LCD_AUSGABE OBJECT MODULE PLACED IN LCD_Ausgabe.OBJ COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD_Ausgabe.c LARGE OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND line level source 1 /*--------------------------------------------------------------------------- 2 Projekt : LCD_Ansteuern 3 4 Filename : LCD_Ansteuern.c 5 Author : Simon Scheurer 6 Datum : 8. September 2008 7 8 System : Keil C Compiler PC to 83C592 9 Version : V1.00 10 CopyRight : Dieser Programm darf kopiert und abgeändert werden 11 ----------------------------------------------------------------------------- 12 Modul : Hauptprogramm 13 ----------------------------------------------------------------------------*/ 14 15 //Import ---> StarterKit 16 #include 17 18 //Import ---> Header 19 #include "LCD_Colt.h" 20 21 22 23 //I/O-Port's// 24 sbit CS_LCD = P3^2; 25 sbit DC_LCD = P3^3; 26 sbit WR_LCD = P3^4; 27 sbit Reset_LCD = P3^5; 28 29 //Globale Variablen// 30 unsigned char Horizontal; //Horizontale Position auf dem Display 31 unsigned char Vertical; //Vertikale Position auf dem Display 32 unsigned char PiturePointerX; 33 unsigned char PiturePointerY; 34 unsigned char ErsterDurchlauf; 35 36 //Bilder// 37 code unsigned char Logo[64][16]={ 38 39 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 40 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 41 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 42 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 43 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 44 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 45 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 46 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 47 {0x00,0x00,0x00,0x00,0x01,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 48 {0x00,0x00,0x00,0x00,0x07,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 49 {0x00,0x00,0x00,0x00,0x3E,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 50 {0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 51 {0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 52 {0x00,0x00,0x00,0x1F,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 53 {0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 54 {0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 55 {0x00,0x00,0x01,0xC0,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, C51 COMPILER V7.50 LCD_AUSGABE 09/29/2008 11:14:42 PAGE 2 56 {0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 57 {0x00,0x00,0x0E,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 58 {0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 59 {0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 60 {0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 61 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 62 {0x03,0xFF,0xFF,0xFF,0xF8,0x1F,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 63 {0x03,0xFF,0xFF,0xFF,0xF8,0x3F,0xE0,0x01,0xC0,0x00,0x03,0x80,0x00,0x00,0x00,0x00}, 64 {0x07,0xFF,0xFF,0xFF,0xF0,0x7F,0xE0,0x01,0xC0,0x00,0x03,0x80,0x00,0x00,0x00,0x00}, 65 {0x0F,0xFF,0xFF,0xFF,0xE0,0x7C,0x63,0xF3,0xC7,0xC7,0xEF,0xDB,0xC7,0x0E,0xE0,0x00}, 66 {0x1F,0xFF,0xFF,0xFF,0xC0,0x7E,0x07,0xF3,0x8F,0xEF,0xEF,0xDF,0xDF,0xCF,0xF0,0x00}, 67 {0x3F,0xFF,0xFF,0xFF,0xC0,0x3F,0xCF,0x7B,0x8E,0xEF,0xE7,0x9F,0xBF,0xEF,0xF0,0x00}, 68 {0x3F,0xFF,0xFF,0xFF,0x80,0x1F,0xCF,0xF3,0x9F,0xEF,0x07,0x1F,0x79,0xEF,0xF0,0x00}, 69 {0x3F,0xFF,0xFF,0xFF,0x00,0x07,0xCF,0xE3,0x9F,0xEE,0x07,0x1E,0x79,0xEE,0x70,0x00}, 70 {0x00,0x00,0x00,0x00,0x00,0xE3,0xCE,0x03,0x9E,0x0F,0x07,0x1C,0x79,0xCE,0x70,0x00}, 71 {0x3F,0xFF,0xFF,0xFF,0x80,0xFF,0xCF,0xE3,0x9F,0xEF,0xE7,0x9C,0x7F,0xDE,0x70,0x00}, 72 {0x3F,0xFF,0xFF,0xFF,0x80,0xFF,0x8F,0xE3,0x8F,0xEF,0xE7,0x9C,0x3F,0x9E,0xF0,0x00}, 73 {0x1F,0xFF,0xFF,0xFF,0xC0,0x7F,0x07,0xE3,0x87,0xC7,0xE7,0x9C,0x1F,0x1E,0xF0,0x00}, 74 {0x0F,0xFF,0xFF,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 75 {0x07,0xFF,0xFF,0xFF,0xE0,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 76 {0x07,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 77 {0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 78 {0x03,0xFF,0xFF,0xFF,0xF0,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 79 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 80 {0x03,0xFF,0xFF,0xFF,0xF8,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 81 {0x03,0xFF,0xFF,0xFF,0xF8,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 82 {0x07,0xFF,0xFF,0xFF,0xF0,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 83 {0x0F,0xFF,0xFF,0xFF,0xE0,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 84 {0x1F,0xFF,0xFF,0xFF,0xC0,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 85 {0x3F,0xFF,0xFF,0xFF,0x80,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 86 {0x3F,0xFF,0xFF,0xFF,0x00,0x01,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 87 {0x00,0x00,0x00,0x00,0x00,0x07,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 88 {0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 89 {0x00,0x00,0x00,0x00,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 90 {0x00,0x03,0x00,0x00,0x01,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 91 {0x00,0x03,0x80,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 92 {0x00,0x01,0xF0,0x00,0x7F,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 93 {0x00,0x00,0x78,0x03,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 94 {0x00,0x00,0x1F,0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 95 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 96 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 97 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 98 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 99 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 100 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 101 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, 102 {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00} 103 }; 104 105 106 //Unterprogramme// 107 static void Delay_1ms(unsigned int CYCLE); 108 static void WriteCommand(unsigned char uscmd); 109 static void WriteDat(unsigned char uswert); 110 static void ClearLcd(unsigned char ClearVerticalStart, unsigned char ClearVerticalEnd, 111 unsigned char ClearHorizontalStart, unsigned char ClearHorizontalEnd); 112 static void WriteDataCommand (unsigned char commando, unsigned char AddressData); 113 static void LcdOut(unsigned char PitureData, unsigned char VerticalStart, unsigned char VerticalEnd, 114 unsigned char HorizontalStart, unsigned char HorizontalEnd, bit FirstPassage); 115 static void LCDInit(void); 116 117 C51 COMPILER V7.50 LCD_AUSGABE 09/29/2008 11:14:42 PAGE 3 118 /********************************************************************************* 119 Unterprogramm (Delay_1ms) 120 ---------------------------- 121 122 Dieses Unterprogramm führt ein DELAY von 1ms aus. Je nach der Variablen CYCLE 123 wird dieses DELAY mehrmals ausgeführt. 124 125 **********************************************************************************/ 126 static void Delay_1ms(unsigned int CYCLE) 127 { 128 1 unsigned int COUNTER_1ms; 129 1 130 1 while (CYCLE > 0) 131 1 { 132 2 for(COUNTER_1ms = 0; COUNTER_1ms <= 10; COUNTER_1ms++) - 133 2 { 134 3 } 135 2 CYCLE = CYCLE-1; 136 2 } 137 1 } 138 139 140 141 /********************************************************************************* 142 Unterprogramme WriteCommand und WriteDat 143 ---------------------------------------- 144 145 Unterprogramme für Display-Ansteuerung 146 ********************************************************************************/ 147 148 //Comando senden 149 static void WriteCommand(unsigned char uscmd) 150 { 151 1 DC_LCD = 1; 152 1 P1 = uscmd; 153 1 WR_LCD = 0; 154 1 WR_LCD = 1; 155 1 } 156 157 //Daten senden 158 static void WriteDat(unsigned char uswert) 159 { 160 1 DC_LCD = 0; 161 1 P1 = uswert; 162 1 WR_LCD = 0; 163 1 WR_LCD = 1; 164 1 } 165 166 /********************************************************************************* 167 Unterprogramm ClearLcd 168 ---------------------- 169 170 Unterprogramm zum Löschen des Displays 171 *********************************************************************************/ 172 static void ClearLcd(unsigned char ClearVerticalStart, unsigned char ClearVerticalEnd, 173 unsigned char ClearHorizontalStart, unsigned char ClearHorizontalEnd) 174 { 175 1 //Regionale Variablen// 176 1 unsigned int ClearPassages; 177 1 unsigned char ClearFirstPassage; 178 1 C51 COMPILER V7.50 LCD_AUSGABE 09/29/2008 11:14:42 PAGE 4 179 1 //Die Anzahl der Durchläufe definieren// 180 1 ClearPassages = (((ClearVerticalEnd - ClearVerticalStart) * (ClearHorizontalEnd - ClearHorizontalStart))+ -1); 181 1 ClearFirstPassage = 1; 182 1 183 1 //Definierter Bereich mit 0 überschreiben// 184 1 for(ClearPassages = ClearPassages;ClearPassages > 0; ClearPassages--) 185 1 { 186 2 LcdOut(0x00, ClearVerticalStart, ClearVerticalEnd, ClearHorizontalStart, ClearHorizontalEnd, ClearFirstP -assage); 187 2 ClearFirstPassage = 0; 188 2 } 189 1 } 190 191 /********************************************************************************* 192 Unterprogramm WriteDataCommand 193 ------------------------------ 194 195 Verbindet das Komando mit Daten 196 *********************************************************************************/ 197 static void WriteDataCommand (unsigned char commando, unsigned char AddressData) 198 { 199 1 WriteCommand((commando & 0xF0)|(AddressData & 0x0F)); 200 1 } 201 202 203 /********************************************************************************* 204 Unterprogramm LcdOut 205 -------------------- 206 207 Übermittelt die Bild-Daten 208 /********************************************************************************/ 209 static void LcdOut(unsigned char PitureData, unsigned char VerticalStart, unsigned char VerticalEnd, 210 unsigned char HorizontalStart, unsigned char HorizontalEnd, bit FirstPassage) 211 { 212 1 213 1 214 1 215 1 //Initialisierung// 216 1 if (FirstPassage == 1) //Wenn das Unterprogramm zu ersten mal aufgerufen wird 217 1 { 218 2 Horizontal = HorizontalStart; 219 2 Vertical = VerticalStart; 220 2 } 221 1 222 1 if(Vertical <= VerticalEnd) 223 1 { 224 2 225 2 //Position auf dem Display// 226 2 if (FirstPassage == 0) //Wenn das Unterprogramm schon mal durchlofen wurde 227 2 { 228 3 Horizontal++; //Horizontale Position des Pixels inkrementieren 229 3 if (Horizontal > HorizontalEnd) //Wenn das definierte Ende einer der Zeile erreicht wurde 230 3 { 231 4 WriteDataCommand(SetXAddress,0x1E); 232 4 Vertical++; //Zur nächsten Zeile Springen 233 4 Horizontal = HorizontalStart; //An den Anfang der Zeile springen 234 4 } 235 3 } 236 2 237 2 if(Vertical <= VerticalEnd) 238 2 { C51 COMPILER V7.50 LCD_AUSGABE 09/29/2008 11:14:42 PAGE 5 239 3 //X und Y Position angeben// 240 3 WriteDataCommand(SetXAddress,Horizontal); 241 3 WriteDataCommand(SetYAddressLower,(Vertical & 0x0F)); 242 3 WriteDataCommand(SetYAddressUpper,(((Vertical & 0x30) >> 4))); 243 3 244 3 //Daten ausgeben// 245 3 WriteDat(PitureData); 246 3 } 247 2 } 248 1 } 249 250 251 252 /********************************************************************************* 253 Unterprogramm LCDInit 254 --------------------- 255 256 Initialisiert das Display 257 *********************************************************************************/ 258 static void LCDInit(void) 259 { 260 1 //Display reseten// 261 1 Reset_LCD = 0; 262 1 Reset_LCD = 1; 263 1 Delay_1ms(100); 264 1 265 1 //Reset Re Flag// 266 1 WriteCommand(SetReFlagLow); 267 1 268 1 //Display-Line setzen// 269 1 WriteDataCommand(SetStartingLineLower, 0x00); 270 1 WriteDataCommand(SetStartingLineUpper, 0x00); 271 1 272 1 //Alternating n-line setzen// 273 1 WriteDataCommand(SetNLineLower,0x01); 274 1 WriteDataCommand(SetNLineUpper,0x00); 275 1 276 1 //Display an// 277 1 WriteCommand(SetDisplayOn); 278 1 279 1 //Display Control 280 1 WriteCommand(SetSwapRefOff); 281 1 282 1 //Increment aus// 283 1 WriteCommand(SetAutoIncrementOff); 284 1 285 1 //Power ein// 286 1 WriteCommand(SetPowerOn); 287 1 288 1 //Spannungvolumen ausschalten (ist nicht vorhanden)// 289 1 WriteCommand(SetDvolOff); 290 1 291 1 //Set Re Flag// 292 1 WriteCommand(SetReFlagHigh); 293 1 294 1 //Duty 1/64// 295 1 WriteCommand(SetDuty1_64); 296 1 297 1 //Reset Re Flag// 298 1 WriteCommand(SetReFlagLow); 299 1 } 300 C51 COMPILER V7.50 LCD_AUSGABE 09/29/2008 11:14:42 PAGE 6 301 /******************************************************************************** 302 Hauptprogramm 303 -------------------- 304 Mit diesem Programm lasst sich ein Text ausgeben. 305 306 INPUT: 307 OUTPUT: (Display-Modul) 308 ********************************************************************************/ 309 void main (void) 310 { 311 1 /////////////////// 312 1 //Initialisierung// 313 1 /////////////////// 314 1 315 1 //Ausgänge initialisieren// 316 1 DC_LCD = 1; 317 1 WR_LCD = 1; 318 1 CS_LCD = 0; 319 1 P1 = 0; 320 1 //Display initialisieren// 321 1 Reset_LCD = 0; 322 1 LCDInit(); 323 1 324 1 //Display löschen// 325 1 ClearLcd( 0, 68, 0, 30); 326 1 327 1 328 1 329 1 330 1 331 1 ///////////////// 332 1 //Hauptprogramm// 333 1 ///////////////// 334 1 335 1 ErsterDurchlauf = 1; 336 1 while(1) 337 1 { 338 2 for(PiturePointerY = 63; PiturePointerY < 64; PiturePointerY--) 339 2 { 340 3 for(PiturePointerX = 15; PiturePointerX < 16; PiturePointerX--) 341 3 { 342 4 LcdOut(Logo[PiturePointerY][PiturePointerX], 0, 63, 6, 21, ErsterDurchlauf); 343 4 ErsterDurchlauf = 0; 344 4 } 345 3 } 346 2 } 347 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 750 ---- CONSTANT SIZE = 1024 ---- XDATA SIZE = 25 ---- PDATA SIZE = ---- ---- DATA SIZE = ---- ---- IDATA SIZE = ---- ---- BIT SIZE = 1 ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)