Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //4-bit LCD init code Pieter Thomas & Patrick Van Torre 2018
- #include <c8051f340.h>
- #define LCD P4 //P4 and higher ports cannot be bit addressed!
- #define RS 2 //Px^1
- #define RW 1 //Px^0
- #define EN 8 //Px^3
- //-----------------------------------------------------------------------------
- // Function PROTOTYPES
- //-----------------------------------------------------------------------------
- void Init_Device(void);
- void LCD_Init(void);
- void LCD_Delay(int time);
- void LCD_Clock(char lcddata);
- void LCD_Busy(void);
- void LCD_Send(char teken);
- char buffer[17];
- void main(void)
- {
- unsigned char n=1;
- unsigned long teller=0;
- Init_Device();
- LCD_Init();
- LCD_Send('U');
- LCD_Send('G');
- LCD_Send('e');
- LCD_Send('n');
- LCD_Send('t');
- //Opdracht 1
- /*
- LCD_printString("De Dies Natalis stond dit jaar volledig in het teken van de 200e verjaardag van de UGent en was het ankerevent in het jubileumjaar, waarin maatschappelijk engagement centraal staat.");
- LCD_Clear();
- LCD_Delay(255);
- LCD_printString("Na de zitting vond een feestelijk concert plaats in de Opera Gent, met onder meer de universitaire hymne.");
- */
- while(1);
- }
- //-----------------------------------------------------------------------------
- // LCD_Init Robust version written by P. Van Torre DEC 2014
- //-----------------------------------------------------------------------------
- //
- void LCD_Init (void)
- {
- //wait a while after power on
- LCD_Delay(2550);
- //go to 8-bit mode no matter what (8 -> 8 / 4 -> 8)
- LCD_Clock(0x30);
- LCD_Delay(2550);
- LCD_Clock(0x30);
- LCD_Delay(250);
- LCD_Clock(0x30);
- LCD_Delay(250);
- //now go to 4-bit mode
- LCD_Clock(0x20);
- LCD_Delay(250);
- //interface definitely in 4-bit mode now, independent of history
- //4-bit 2-line
- LCD_Clock(0x20);
- LCD_Clock(0x80);
- LCD_Delay(250);
- //no shift ; cursor right
- LCD_Clock(0x10);
- LCD_Clock(0x40);
- LCD_Delay(250);
- //display on ; cursor off ; no blinking
- LCD_Clock(0x00);
- LCD_Clock(0xC0);
- LCD_Delay(250);
- //cursor moves right ; no display shift
- LCD_Clock(0x00);
- LCD_Clock(0x60);
- LCD_Delay(250);
- LCD_uitschrijvenGetal(8653);
- }
- //-----------------------------------------------------------------------------
- // LCD_Delay
- //-----------------------------------------------------------------------------
- //
- void LCD_Delay (int time)
- {
- int n,m;
- for (n=0;n<time;n++)
- {
- for (m=0;m<255;m++);
- }
- }
- //-----------------------------------------------------------------------------
- // LCD_Clock
- //-----------------------------------------------------------------------------
- //
- void LCD_Clock (char lcddata)
- {
- LCD = lcddata;
- LCD &= ~EN;
- LCD_Delay(10);
- LCD |= EN;
- LCD_Delay(10);
- LCD &= ~EN;
- LCD_Delay(10);
- }
- //-----------------------------------------------------------------------------
- // LCD_Busy PVT2014
- //-----------------------------------------------------------------------------
- //
- void LCD_Busy (void)
- {
- bit busy=1;
- unsigned char timeout=0;
- while(busy&++timeout)
- {
- LCD=0xF1; //check busy flag command
- LCD_Delay(1);
- LCD |= EN;
- LCD_Delay(1);
- busy=((LCD&0x80)==0x80);
- LCD &= ~EN;
- LCD_Delay(1);
- // 2 cycles in 4-bit mode
- LCD |= EN;
- LCD_Delay(1);
- LCD &= ~EN;
- LCD_Delay(1);
- }
- }
- //-----------------------------------------------------------------------------
- // LCD_Send
- //-----------------------------------------------------------------------------
- //
- void LCD_Send (char teken)
- {
- LCD_Clock(teken & 0xf0 | RS);
- LCD_Clock(((teken & 0x0f)<<4) | RS);
- LCD_Busy(); //wait until LCD ready
- }
- /*
- void binairNaarDecimaal(unsigned long input){
- int decimaalGetal = 0, i = 0, rest;
- while(input != 0) {
- rest = input%10;
- input /= 10;
- decimaalGetal += rest * pow(2,i);
- ++i;
- }
- return decimaalGetal;
- }
- */
- void LCD_uitschrijvenGetal(unsigned long input){
- int teller = 0;
- int getalInArray[16]; //Getal kan maximum 16 tekens bevatten
- while(input > 0){
- getalInArray[teller] = (input%10);
- input = input / 10;
- teller++;
- }
- int i = 0;
- for(i = teller-1; i >= 0 ; i--){
- LCD_Send(getalInArray[teller]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement