/******************************************************************************* * Function Name : Chk_DMA_Busy * Description : Check whether the DMA is busy * Input : None * Output : None * Return : None * Attention : None *******************************************************************************/ void Chk_DMA_Busy(void) { uint8_t temp; do { LCD_WriteCmd(0xbf); temp = LCD_ReadData(); }while((temp&0x01)==0x01); }
//****************************************************************************** //*函数名称:void LCD_Point(unsigned char x,unsigned char y,unsigned char color)* //*函数功能:使用绘图的方法,在(x,y)处画一个16*16点阵的图案,也可以是字符 * //*形式参数:unsigned char x,unsigned char y,unsigned char color * //* x取值范围:0~127 * //* y取值范围:0~63 (针对CM12864-12型液晶) * //*形参说明:坐标水平位置,坐标垂直位置 * //*液晶屏坐标说明: * //* ________________128个像素______________________ * //* |(0,0) (7,0)| * //* | | * //* 64 | | * //* 个 |(0,31) (7,31)| * //* 像 |(8,0) (15,0)| * //* 素 | | * //* | | * //* |(8,31) (15,31)| * //* |______________________________________________| * //* * //*返回参数:无 * //*使用说明:此函数适用于CM12864-12型液晶 * //****************************************************************************** void LCD_Point(unsigned char x,unsigned char y,unsigned char color) { unsigned char i,AddrX,AddrY; //寄存器地址 unsigned char BitTemp; //该点在16bit的位置 unsigned char DataH,DataL; AddrX = x>>4; // x/16 AddrY = y&0x3F; // y%64 if(y > 31) { AddrX += 8; AddrY -= 32; } BitTemp = x&0x0F; // x%16 LCD_GraphModeSet(0x00); //先关闭图形显示功能 //LCD_Write(LCD_COMMAND,LCD_EXTEND_FUNCTION); for(i=0;i<4;i++) { LCD_GDRAM_AddressSet(0x80+AddrY); LCD_GDRAM_AddressSet(0x80+AddrX); //LCD_Write(LCD_COMMAND,LCD_BASIC_FUNCTION); //基本指令集 DataH = LCD_ReadData(); DataH = LCD_ReadData(); DataL = LCD_ReadData(); //DataH = LCD_ReadData(); //DataL = LCD_ReadData(); } if(color == LCD_COLOR_BLACK) { if(BitTemp > 7) { DataL |= (0x80>>(BitTemp-8)); } else {
//********************************************************************************* //*函数名称:void LCD_DisplayStrings(unsigned char x,unsigned char y,unsigned char code *p) * //*函数功能:在(文本区)ucAdd指定的位置显示一串ASCII * //*形式参数:unsigned char x,unsigned char y,const char *p * //*形参说明:指定的位置,要显示的字符串 * //*地址必须是: x<16, y<4 * //*返回参数:无 * //*使用说明:使用之前要初始化液晶 * //********************************************************************************* void LCD_DisplayStrings(unsigned char x,unsigned char y,const char *p) { unsigned char length,addr; unsigned char AddrEO; //x地址是奇偶 unsigned char Data1; y &= 0x03; //y < 4 x &= 0x0F; //x < 16 switch( y ) { case 0: addr = 0x80; break; case 1: addr = 0x90; break; case 2: addr = 0x88; break; case 3: addr = 0x98; break; } addr += x/2; AddrEO = x&0x01; length = strlen(p); LCD_Write(LCD_COMMAND,LCD_BASIC_FUNCTION); //基本指令动作 LCD_DDRAM_AddressSet(addr); if(AddrEO == 0x01) { Data1 = LCD_ReadData(); LCD_DDRAM_AddressSet(addr); LCD_Write(LCD_DATA, Data1); } for( ; length ; length -- ) LCD_Write(LCD_DATA, *(p++)); }
uint16_t LCD_ReadReg(uint16_t _reg) { LCD_WriteIndex(_reg); uint16_t LCD_RAM = LCD_ReadData(); return LCD_RAM; }