|
程序和接线图如下:<br />/*************************************************************<br />FUNCTIONn: LCD driver 8080<br />AUTHOR: 科技<br />DESCRIPTION: RA8803 <br />E-mail: <br />CREAT DATE: 2006-2-25<br />MODIFICATION DATE: <br />***************************************************************/<br />#include <pic.h>//定义三个头文件<br /><br />#define RW_WR RC1<br />#define E_RD RC0<br />#define CS RC2<br />#define RS RC4<br />#define RST RC5<br />#define DATA_BUS PORTD<br />#define BUSY RC3<br />unsigned char font[]=<br />{<br /> 0xd2,0xab,0xd3,0xee,0xbf,0xc6,0xbc,0xbc,//耀宇科技<br /> 0xd2,0xab,0xd3,0xee,0xbf,0xc6,0xbc,0xbc//耀宇科技<br />};<br />//***************************************以下为函数申明<br />void Delay(unsigned char shijian);<br />void Write_Data(unsigned char dat);<br />void Write_Instruction(unsigned char cmd);<br />void LCD_Controller_Register(unsigned char dat);<br />void Misc_Register(unsigned char dat);<br />void Advance_Power_Setup_Register(unsigned char dat);<br />void Advance_Display_Setup_Register(unsigned char dat);<br />void Cursor_Control_Register(unsigned char dat);<br />void Cursor_Size_Control_Register(unsigned char dat);<br />void Memory_Access_Mode_Register(unsigned char dat);<br />void Active_Window(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);<br />void Display_Window(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2);<br />void Cursor_Position_Register(unsigned char x,unsigned char y);<br />void Begin_Segment_Position_Register(unsigned char x);<br />void Shift_Action_Range(unsigned char y1,unsigned char y2);<br />void Blink_Time_Register(unsigned char dat);<br />void Frame_Rate_Polarity_Change_At_Common_A_B_Register(unsigned char dat1,unsigned char dat2);<br />void Shift_Clock_Control_Register(unsigned char dat);<br />void Interrupt_Setup_And_Status_Register(unsigned char at);<br />void Font_Control_Register(unsigned char dat);<br />void Font_Size_Control_Register(unsigned char dat);<br />void Display_Chinese(unsigned char fnt[]);<br />void Initial(void);<br /><br />/***********************************<br />** 函数名称: Delay<br />** 功能描述: 延时时间=(n*9+17)*12/F<br />** 输 入: n<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: 无<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />void Delay(unsigned char shijian)<br />{ unsigned char i; <br /> for(i=shijian;i!=0;i--)//以10MS为基数的延时函数<br />{<br />unsigned int d=1000;//10MS延时函数,1000为10MS,2000为20MS<br />asm("clrwdt");<br />while(--d){;}<br />}<br />}<br />/****************************************<br />** 函数名称: Write_Data<br />** 功能描述: 传送数据<br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Busy,<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Write_Data(unsigned char dat) <br />{ //while(BUSY);<br /> DATA_BUS=dat;<br /> E_RD=1;//置读取位为高,不能读<br /> RS=1;<br /> CS=0;<br /> RW_WR=0;<br /> Delay(1);<br /> RW_WR=1;<br /> CS=1;<br /> Delay(5);<br /> return;<br />}<br /><br />/******************************************<br />** 函数名称: Write_Instruction<br />** 功能描述: 传送命令<br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Busy,<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Write_Instruction(unsigned char cmd)<br />{ //while(BUSY);<br /> DATA_BUS=cmd;<br /> E_RD=1;//置读取位为高,不能读<br /> RS=0;//为低时,存取缓存器,为高时,存取数据<br /> CS=0;//片选端,为0时选通RA8803,为1时禁止工作<br /> RW_WR=0;//写入信号,低电位动作,<br /> Delay(1);<br /> RW_WR=1;<br /> CS=1;<br /> Delay(5);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: LCD_Controller_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void LCD_Controller_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x00);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Misc_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Misc_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x01);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Advance_Power_Setup_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Advance_Power_Setup_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x02);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br /><br />/***********************************<br />** 函数名称: Advance_Display_Setup_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Advance_Display_Setup_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x03);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Cursor_Control_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Cursor_Control_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x10);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Cursor_Size_Control_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Cursor_Size_Control_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x11);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Memory_Access_Mode_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Memory_Access_Mode_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x12);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Active_Window<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Active_Window(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)<br />{<br /> Write_Instruction(0x40); //Active Window Left Register<br /> Write_Instruction(x1);<br /> Write_Instruction(0x20); //Active Window Right Register<br /> Write_Instruction(x2);<br /> Write_Instruction(0x50); //Active Window Top Register<br /> Write_Instruction(y1);<br /> Write_Instruction(0x30); //Active Window Bottom Register<br /> Write_Instruction(y2);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Display_Window<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Display_Window(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)<br />{<br /> Write_Instruction(0x41); //Display Window Left Register<br /> Write_Instruction(x1);<br /> Write_Instruction(0x21); //Display Window Right Register<br /> Write_Instruction(x2);<br /> Write_Instruction(0x51); //Display Window Top Register<br /> Write_Instruction(y1);<br /> Write_Instruction(0x31); //Display Window Bottom Register<br /> Write_Instruction(y2);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Cursor_Position_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Cursor_Position_Register(unsigned char x,unsigned char y)<br />{<br /> Write_Instruction(0x60);<br /> Write_Instruction(x);<br /> Write_Instruction(0x70);<br /> Write_Instruction(y);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Begin_Segment_Position_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Begin_Segment_Position_Register(unsigned char x)<br />{<br /> Write_Instruction(0x61);<br /> Write_Instruction(x);<br /> return;<br />}<br /><br /><br />/***********************************<br />** 函数名称: Shift_Action_Range<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Shift_Action_Range(unsigned char y1,unsigned char y2)<br />{<br /> Write_Instruction(0x71);<br /> Write_Instruction(y1);<br /> Write_Instruction(0x72);<br /> Write_Instruction(y2);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Blink_Time_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Blink_Time_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x80);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Frame_Rate_Polarity_Change_At_Common_A_B_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Frame_Rate_Polarity_Change_At_Common_A_B_Register(unsigned char dat1,unsigned char dat2)<br />{<br /> Write_Instruction(0x81);<br /> Write_Instruction(dat1);<br /> Write_Instruction(0x91);<br /> Write_Instruction(dat2);<br /> return;<br />}<br /><br /><br />/***********************************<br />** 函数名称: Shift_Clock_Control_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Shift_Clock_Control_Register(unsigned char dat)<br />{<br /> Write_Instruction(0x90);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Interrupt_Setup_And_Status_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Interrupt_Setup_And_Status_Register(unsigned char dat)<br />{<br /> Write_Instruction(0xa0);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Font_Control_Register(<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Font_Control_Register(unsigned char dat)<br />{<br /> Write_Instruction(0xf0);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Font_Size_Control_Register<br />** 功能描述: <br />** 输 入: dat<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块: Write_Instruction<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-25<br />******************************************/<br />#pragma disable<br />void Font_Size_Control_Register(unsigned char dat)<br />{<br /> Write_Instruction(0xf1);<br /> Write_Instruction(dat);<br /> return;<br />}<br /><br />/***********************************<br />** 函数名称: Display_Chinese<br />** 功能描述: Display_Chinese<br />** 输 入: value<br />** 输 出 : 无<br />** 全局变量:无<br />** 调用模块:LCD_Controller_Register,Cursor_Position_Register,Write_Data<br />** <br />** 作 者: 耀宇科技<br />** 日 期: 2006-2-10<br />******************************************/<br />#pragma disable<br />void Display_Chinese(unsigned char fnt[])<br />{<br /> register unsigned char i,j;<br /> LCD_Controller_Register(0xcd);<br /> Cursor_Position_Register(0x00,0x00);<br /> for(i=0;i<0x10;i+=2)<br /> {<br /> for(j=0;j<0x0f;j++)<br /> {<br /> Write_Data(fnt);<br /> Write_Data(fnt[i+1]);<br /> }<br /> }<br /> return;<br />}<br /><br />#pragma disable<br />void Initial(void)<br />{<br /> TRISD=0X00;//设定数据端口为输出<br /> TRISC=0X08;//RC3为输入,液晶端口状态忙位检测<br /> PORTC=0Xff;//先输出0清端口状态<br /> PORTD=0Xff;//清零端口<br /> Delay(30);//延时300ms<br /> RST=0;//复位信号置低电平<br /> Delay(30);//延时300ms<br /> RST=1;//复位信号置低电平<br /> Delay(10);//延时100ms<br /> // while(BUSY);//忙信号检测<br /> LCD_Controller_Register(0xcd);//缓存器00H正常模式,屏幕开启<br /> Misc_Register(0xf1);//输出允许,BUSY高电平触发,4MHZ频率<br /> Advance_Power_Setup_Register(0x10);<br /> Advance_Display_Setup_Register(0x80);<br /> Cursor_Control_Register(0x6b);<br /> Cursor_Size_Control_Register(0x00);<br /> Memory_Access_Mode_Register(0x91);<br /> Active_Window(0x00,0x00,0x1d,0x7f);<br /> Display_Window(0x00,0x00,0x1d,0x7f);<br /> Begin_Segment_Position_Register(0x0);<br /> Shift_Action_Range(0x00,0x9f);<br /> Blink_Time_Register(0xaa);<br /> Frame_Rate_Polarity_Change_At_Common_A_B_Register(0x00,0x00);<br /> Shift_Clock_Control_Register(0x10);<br /> Interrupt_Setup_And_Status_Register(0x11);<br /> Font_Control_Register(0xa0);<br /> Font_Size_Control_Register(0x0f);<br /> Cursor_Position_Register(0x00,0x00);<br />}<br /><br />//#pragma disable<br />//void Step(void) interrupt 0<br />//{<br /> // while(IE0==1);<br /> // return;<br />//}<br /><br />main()<br />{ Initial();<br /> while(1)<br /> { RS=0;<br /> LCD_Controller_Register(0xcd);<br /> Delay(600);<br /> Delay(600);<br /> Display_Chinese(font);<br /> Delay(600);<br /> Delay(600);<br /> }<br />}<br /><br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20077/2007715181545318.pdf'>https://bbs.21ic.com/upfiles/img/20077/2007715181545318.pdf</a> |
|