void lcd_write(bit start, uchar in_data) { uchar Hdata,Ldata; while(lcd_busy()); Hdata=in_data&0xf0; //取高四位 Ldata=(in_data<<4)&0xf0; //取低四位 if(start==0) LCD_RS = 0; //写入命令 else LCD_RS = 1; //写入数据 LCD_RW = 0; LCD_EN = 0; delayNOP(); P0 = Hdata; //发送高四位 LCD_EN = 1; delayNOP(); LCD_EN = 0; delayNOP(); P0 = Ldata; //发送低四位 LCD_EN = 1; delayNOP(); LCD_EN = 0; delayNOP(); }
/*写数据 */ void write_data(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P2 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
void lcd_wdat(uchar dat) { while(lcd_busy()); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
/*写指令数据到LCD */ void lcd_wcmd(uchar cmd) { while(lcd_busy()); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P2 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
//**************************************************************************** //Routine for reading a byte from MMC/SD-Card //Software SPI //**************************************************************************** unsigned char Read_Byte_MMC() { unsigned char temp=0; unsigned char i; SPI_DO=1; for (i=0;i<8;i++) //MSB First { SPI_CLK=0; //Clock Low if(Init_Flag) delayNOP(); SPI_CLK=1; //Clock High if(Init_Flag) delayNOP(); temp=(temp<<1)|SPI_DO; //read mmc data out pin } return (temp); }
/********************************************************** * 检查LCD忙状态 * lcd_busy为1时,忙,等待。 * lcd-busy为0时,闲,可写指令与数据 **********************************************************/ bit lcd_busy() { bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); }
//**************************************************************************** void Write_Byte_MMC(uchar value) { unsigned char i; for (i=0;i<8;i++) { if (value&0x80) SPI_DI=1; //Send bit by bit(MSB First) else SPI_DI=0; SPI_CLK=0; //Clock low if(Init_Flag) delayNOP(); SPI_CLK=1; //Clock High if(Init_Flag) delayNOP(); value <<=1; } }