//This function sets cursor position void LCD_Cursor(unsigned char Row,unsigned char Col){ switch(Row){ case 1: LCD_Command(0x80+ Col -1);break; case 2: LCD_Command(0xC0+ Col -1);break; default: break; } }
//LCDShow:在HD44780显示屏上显示数据----------------------------------------* //功 能:在HD44780显示屏显示str所指向的32个数据 * //参 数:str=待显示的数组 * //返 回:无 * //内部调用函数:LCD_Command * //-------------------------------------------------------------------------* void LCDShow(INT8U str[]) { INT8U i; //1. LCD初始化 LCDInit(); //2. 显示第1行16个字符 //2.1设置显示首地址 LCDCtrl &= ~(1 << LCDRS); //RS,R/W = 00(写的是指令) LCDCtrl &= ~(1 << LCDRW); LCD_Command(0x80); //后7位为DD RAM地址(0x00) //2.2写16个数据到DD RAM LCDCtrl |= 1 << LCDRS; //RS,R/W = 10(写的是数据) LCDCtrl &= ~(1 << LCDRW); //将要显示在第1行上的16个数据逐个写入DD RAM中 for (i = 0;i < 16;i++) { LCD_Command(str[i]); } //3. 显示第2行16个字符 //3.1设置显示首地址 LCDCtrl &= ~(1 << LCDRS); //RS,R/W = 00(写的是指令) LCDCtrl &= ~(1 << LCDRW); LCD_Command(0xC0); //后7位为DD RAM地址(0x40) //3.2再写16个数据到DD RAM LCDCtrl |= 1 << LCDRS; //RS,R/W = 10(写的是数据) LCDCtrl &= ~(1 << LCDRW); //将要显示在第2行上的16个数据逐个写入DD RAM中 for (i = 16;i < 32;i++) { LCD_Command(str[i]); } }
void LCDInit() { LCD_PinInit(); Delay_ms(20); GPIO_ResetBits(RS_Port, RS_Pin); LCD_Send(0x3); Delay_ms(5); LCD_Send(0x2); Delay_ms(5); LCD_Send(0x0); LCD_Command(0x28); LCD_Command(0x08); LCD_Command(0x01); LCD_Command(0x06); LCD_Command(0x0c); }
/*============================================================================*/ void LCD_CreateChar(unsigned charnum, const unsigned char *chardata){ unsigned char i; charnum &= 0x07; LCD_Command(E_SET_CGRAM_ADDR | (charnum << 3)); for (i = 0; i < 8; i++) LCD_Write(chardata[i]); }
main(){ DDRD = 0x3E; // set keypad I/O data direction register NewKey = 0; // reset key variables LastKey = 0xFF; // Initialize the LCD LCD_Command(0x3C); // initialize command LCD_Command(0x0C); // display on, cursor off LCD_Command(0x06); LCD_Command(0x01); // Display Header Information on LCD LCD_Command(LINE_1); // goto lcd line 1 LCDprint("Keypad Test"); LCD_Command(LINE_2); // goto lcd line 2 LCDprint("Press Keys"); LCD_Command(LINE_3); // goto lcd line 3 // main loop .. endless for( ; ;){ if(kbhit()){ // if new key pressed cprint(NewKey); // display it } } }
void LCD_Goto(char vrsta, char stolpec) { char command; if(vrsta == 1) command = 0x80; else if(vrsta == 2) command = 0xc0; // Ne dela. Ne vem zakaj else return; command += stolpec; LCD_Command(command); }
//LCDInit:初始化LCD函数----------------------------------------------------* //功 能:初始化Lcd(HD44780),设置显示方式,清屏,AC自动+1 * //参 数:无 * //返 回:无 * //内部调用函数:LCD_Command * //-------------------------------------------------------------------------* void LCDInit(void) { INT16U i; //定义数据口(PTB0-7)为输出 LCDData_D = 0xFF; //数据口为输出 //定义控制口(PTC0-2)为输出 LCDCtrl_D |= (1<<LCDE); LCDCtrl_D |= (1<<LCDRS); LCDCtrl_D |= (1<<LCDRW); //设置指令 LCDCtrl &= ~(1<<LCDRS); //RS、R/W=00,写指令 LCDCtrl &= ~(1<<LCDRW); LCD_Command(0x38); //||||||||____ 可设任意值(0/1) //||||||______ F = 0,5*7点阵模式 //|||||_______ N = 1,2行显示 //||||________ DL = 1,8位数据总线 //|||_________ 固定为001 LCD_Command(0x08); //关显示,关光标显示,不闪烁 LCD_Command(0x01); //清屏 for (i=0; i<20000; i++); //延时>1.6ms LCD_Command(0X06); LCD_Command(0x14); //光标右移一个字符位,AC自动加1 LCD_Command(0x0C); //开显示,关光标显示,不闪烁 }
/*==================================================================================================================================================================================*/ void LCD_Init( void (*RS_Control)(unsigned char c), void (*RW_Control)(unsigned char c), void (*EN_Control)(unsigned char c), void (*DataControl)(unsigned char c), void (*WaitusFcn)(unsigned int time)){ __lcd_dvr_io_pins.RS_Control = RS_Control; __lcd_dvr_io_pins.RW_Control = RW_Control; __lcd_dvr_io_pins.EN_Control = EN_Control; __lcd_dvr_io_pins.DataControl = DataControl; __lcd_dvr_io_pins.WaitusFcn = WaitusFcn; __lcd_dvr_io_pins.EN_Control(0); __lcd_dvr_io_pins.RS_Control(0); if(__lcd_dvr_io_pins.RW_Control!=NULL) __lcd_dvr_io_pins.RW_Control(0); __lcd_dvr_io_pins.WaitusFcn(LCD_INIT_DELAY_US); LCD_IOWrite4(0x03); __lcd_dvr_io_pins.WaitusFcn(5); LCD_Strobe(); __lcd_dvr_io_pins.WaitusFcn(200); LCD_Strobe(); __lcd_dvr_io_pins.WaitusFcn(200); LCD_IOWrite4(0x02); __lcd_dvr_io_pins.WaitusFcn(120); LCD_Command(E_FUNCTION_SET | BIT_DL_DATALENGTH_4 | BIT_N_DISP_LINES_2 | BIT_F_FONT_5_10); LCD_Command(E_DISPLAY_ON_OFF_CTRL | BIT_D_DISPLAY_OFF); LCD_Command(E_CLEAR_DISPLAY); LCD_Command(E_ENTRY_MODE_SET | BIT_S_AUTOSCROLL_OFF | BIT_ID_INCREMENT_CURSOR); }
int main(void) { binToDecDigits(1234, display, 4); scheduler_init(display); serial_init(onReceive); scheduler_addPeriodicTask(sendText, 5000); LCD_Initalize(); LCD_Command(HD44780_DISPLAY_ONOFF|HD44780_DISPLAY_ON); LCD_Text("Ala ma kota!"); scheduler_run(); }
int main() { PINSEL0 = 0x00000000; PINSEL1 = 0x00000000; //PINSEL2 = 0x00000000; Init_Peripherals(); adc_data(); DelaymSec(40); Init_Peripherals(); LCD_4Bit_Mode(); LCD_Init(); LCD_Command(0x01); DelaymSec(15); while(1) { xTaskCreate(IR1,"IR1",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR1); xTaskCreate(IR2,"IR2",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR2); xTaskCreate(IR3,"IR3",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR3); xTaskCreate(IR4,"IR4",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR4); xTaskCreate(IR5,"IR5",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR5); xTaskCreate(IR6,"IR6",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR6); xTaskCreate(IR7,"IR7",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR7); xTaskCreate(IR8,"IR8",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR8); xTaskCreate(IR2_IR3,"IR2_IR3",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR2_IR3); xTaskCreate(IR3_IR4,"IR3_IR4",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR3_IR4); xTaskCreate(forward,"forward",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xforward); xTaskCreate(IR2_IR3_IR4,"IR2_IR3_IR4",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xIR2_IR3_IR4); xTaskCreate(lcdprint,"Display",configMINIMAL_STACK_SIZE,NULL,tskIDLE_PRIORITY+1,&xdisplay); vTaskStartScheduler(); } }
void LCD_Cursor_ShiftRight() { LCD_Command(0x14); }
void LCD_DisplayOn_CursorAndBlinkOn() { LCD_Command(0x0f); }
void LCD_Cursor_ShiftLeft() { LCD_Command(0x10); }
void LCD_DisplayOn_CursorAndBlinkOff() { LCD_Command(0x0c); }
void LCD_DisplayOn_CursorOnBlinkOff() { LCD_Command(0x0e); }
//This Function puts LCD cursor to Home position void LCD_Home(void) { LCD_Command(0x80); }
/*============================================================================*/ void LCD_ScrollPos(unsigned char left_rigth){ LCD_Command(E_CURSOR_DISPLAY_SHIFT | BIT_SC_SHIFT_DISPLAY | ((left_rigth)? BIT_RL_SHIFT_LEFT: BIT_RL_SHIFT_RIGHT)); }
void LCD_CursorDecrement_ShiftOn() { LCD_Command(0x05); }
void LCD_CursorIncrement_ShiftOff() { LCD_Command(0x06); }
/*============================================================================*/ void LCD_Cursor(enum enLCDCursorModes mode){ __lcd_dispctrl &= 0xFC; __lcd_dispctrl |= mode; LCD_Command(E_DISPLAY_ON_OFF_CTRL | __lcd_dispctrl); }
void LCD_CursorDecrement_ShiftOff() { LCD_Command(0x04); }
// Clear display, cursor to home void LCD_Clear() { LCD_Command(0x01); }
// Display Function (default 2x40 size) void LCD_DisplayFunction() { LCD_Command(0x3c); }
void LCD_Display_ShiftRight() { LCD_Command(0x1c); }
void LCD_Display_ShiftLeft() { LCD_Command(0x18); }
void LCD_CursorIncrement_ShiftOn() { LCD_Command(0x07); }
//This function enables LCD's internal funcions void LCD_Init(void) { LCD_Command(0x28); LCD_Command(0x0C); LCD_Command(0x06); }
// Display, cursor and blink off void LCD_DisplayOff() { LCD_Command(0x08); }
void LCD_CursorHome() { LCD_Command(0x02); }
/*============================================================================*/ void LCD_AutoScroll(unsigned char on_off){ LCD_Command(E_ENTRY_MODE_SET | ((on_off)? BIT_S_AUTOSCROLL_ON:BIT_S_AUTOSCROLL_ON) | BIT_ID_INCREMENT_CURSOR); }