| 
 
| //写指令        输入        RS=L,R/W=L,D0-D7=指令码,E=高脉冲        输出        无
 //读数据        输入        RS=H,R/W=H,E=H        输出        D0-D7=数据
 //写数据        输入        RS=H,R/W=L,D0-D7=数据,E=高脉冲        输出        无
 
 
 
 
 #include"DSP28_Device.h"
 
 
 #define lcd_rs GpioDataRegs.GPADAT.bit.GPIOA8
 #define lcd_rw GpioDataRegs.GPADAT.bit.GPIOA9
 #define lcd_ep GpioDataRegs.GPADAT.bit.GPIOA10
 #define D0 GpioDataRegs.GPADAT.bit.GPIOA0
 #define D1 GpioDataRegs.GPADAT.bit.GPIOA1
 #define D2 GpioDataRegs.GPADAT.bit.GPIOA2
 #define D3 GpioDataRegs.GPADAT.bit.GPIOA3
 #define D4 GpioDataRegs.GPADAT.bit.GPIOA4
 #define D5 GpioDataRegs.GPADAT.bit.GPIOA5
 #define D6 GpioDataRegs.GPADAT.bit.GPIOA6
 #define D7 GpioDataRegs.GPADAT.bit.GPIOA7
 
 
 
 void Lcd_Init(void);//初始化LCD
 
 void delay_1ms(unsigned int );//延时1m
 void delay_40us(unsigned int);//延时40us
 
 void lcd_write_command(unsigned int);//写命令函数
 void lcd_write_data(unsigned char);//写数据函数
 
 int lcd_check_busy(void);//检查忙信号。
 void lcd_display_pose(unsigned int, unsigned int);//显示位置函数。
 unsigned char dis1[]={"jiangkeqin"};//第一行要显示数据。
 unsigned char dis2[]={"18995947988"};//第二行要显示数据。
 
 
 void main()
 {
 unsigned int i;
 InitSysCtrl();                                          //初始化系统函数。
 DINT;
 IER=0X0000;                                             //禁止所有CPU中断。
 IFR=0x0000;                                            //清楚所有CPU中断
 InitPieCtrl();                                         //初始化中断向量。
 InitPieVectTable();                                    //初始化中断向量表。
 InitPeripherals();                                     //初始化中断CPU定时器模块。
 InitGpio();                                            //初始化GPIIO口。
 
 EINT;                                                 //使能全局中断。
 
 ERTM;                                                   //使能实时中断。
 
 Lcd_Init();  //初始化LCD。
 delay_1ms(10);
 lcd_display_pose(0,0);//设计第一行显示位置。
 for(i=0;dis1[i]!='\0';i++)//第一行显示数据。
 {
 while(lcd_check_busy());//检查忙信号。
 lcd_write_data(dis1[i]);//写第i个字符。
 }
 delay_1ms(10);
 
 lcd_display_pose(4,1);//从第二行第5个开始写。
 for(i=0;dis2[i]!='\0';i++)//第二行显示数据。
 {
 while(lcd_check_busy());
 lcd_write_data(dis2[i]);
 }
 while(1);
 
 
 
 
 }
 
 
 int lcd_check_busy()//检查忙信号。忙返回1,不忙返回0.
 {
 int result;
 lcd_rs=0;
 lcd_rw=1;
 lcd_ep=1;
 result=D7;
 // ep=0;///?读数据和读状态ep=H;
 delay_40us(1);//命令执行时间为40us.
 
 return result;
 
 
 
 }
 
 
 
 
 void lcd_write_command(unsigned int com)//写指令函数。
 {
 lcd_rs=0;//
 lcd_rw=0;//
 lcd_ep=1;//容许 下降沿触发1-0;
 D0=com&0x0001;         //把8位数据写到16位的串口的低8位中去A0~A7中,保留高8位数据。例如把0x38写进去。
 D1=(com>>1)&0x0001;
 D2=(com>>2)&0x0001;
 D3=(com>>3)&0x0001;
 D4=(com>>4)&0x0001;
 D5=(com>>5)&0x0001;
 D6=(com>>6)&0x0001;
 D7=(com>>7)&0x0001;
 lcd_ep=0;//下降沿触发1---0???
 delay_40us(1);            //写指令所要时间为40us
 
 }
 
 void lcd_write_data(unsigned char data)//写数据函数。
 {
 while(lcd_check_busy());
 lcd_rs=1;
 lcd_rw=0;
 lcd_ep=1;
 D0=data&0x0001;         //把8位数据写到16位的串口的低8位中去A0~A7中,保留高8位数据。例如把0x38写进去。
 D1=(data>>1)&0x0001;
 D2=(data>>2)&0x0001;
 D3=(data>>3)&0x0001;
 D4=(data>>4)&0x0001;
 D5=(data>>5)&0x0001;
 D6=(data>>6)&0x0001;
 D7=(data>>7)&0x0001;
 lcd_ep=0;
 delay_40us(1);
 
 }
 
 void lcd_display_pose(unsigned int x,unsigned int y)
 {
 unsigned int address;
 
 if(y==1)
 address=0x80+x;
 else
 address=0xc0+x;
 while(lcd_check_busy());
 lcd_write_command(address);
 
 
 }
 
 //初始化LCD程序。
 
 void Lcd_Init()
 {
 delay_1ms(15);
 lcd_write_command(0x38);
 delay_1ms(5);
 lcd_write_command(0x38);
 delay_1ms(5);
 lcd_write_command(0x38);
 
 
 
 while(lcd_check_busy());//判断LCD忙信号。
 lcd_write_command(0x38);
 
 while(lcd_check_busy());//判断LCD忙信号。
 lcd_write_command(0x08);//显示关闭。
 
 while(lcd_check_busy());//判断LCD忙信号。
 lcd_write_command(0x01);//显示清屏
 delay_40us(41);//清屏执行时间为1.64ms。
 
 while(lcd_check_busy());//判断LCD忙信号。
 lcd_write_command(0x06);//显示光标移动设置。
 
 while(lcd_check_busy());//判断LCD忙信号。
 lcd_write_command(0x0C);//显示开及光标设置
 
 
 }
 
 
 void delay_1ms(unsigned int t1)//延时d1ms*1ms.
 {
 
 unsigned int k1,j1;
 while(t1>0)
 {
 for(k1=0;k1<1000;k1++)//延时1ms
 {
 for(j1=0;j1<150;j1++){}
 
 
 }
 
 
 t1--;
 }
 
 
 
 
 }
 
 
 void delay_40us(unsigned int t2)
 {
 unsigned int k2;
 while(t2>0)
 {
 
 for(k2=0;k2<6000;k2++){}//延时40us。
 t2--;
 }
 
 }
 
 
 
 那个大神帮我看看,哪儿有问题啊
 | 
 |