#include "DSP28_Device.h" //有问题
#define D0 GpioDataRegs.GPFDAT.bit.GPIOF0 ////串行数据输出高
#define D1 GpioDataRegs.GPFDAT.bit.GPIOF1 ////串行数据输出高
#define D2 GpioDataRegs.GPFDAT.bit.GPIOF9 ////串行数据输出高
#define D3 GpioDataRegs.GPFDAT.bit.GPIOF8 ////串行数据输出高
#define D4 GpioDataRegs.GPFDAT.bit.GPIOF13 ////串行数据输出高
#define D5 GpioDataRegs.GPFDAT.bit.GPIOF12 ////串行数据输出高
#define D6 GpioDataRegs.GPFDAT.bit.GPIOF11 ////串行数据输出高
#define D7 GpioDataRegs.GPFDAT.bit.GPIOF10 ////串行数据输出高
#define RS GpioDataRegs.GPFDAT.bit.GPIOF2 ////串行数据输出高
#define EN GpioDataRegs.GPFDAT.bit.GPIOF3 ////串行数据输出高
#define uint unsigned int
#define uchar unsigned char
void LCD_disp_char(uchar x,uchar y,uchar dat); //x=0-16,y=1-2
void WriteLcdCom(unsigned char c);
void WriteLcdDat(unsigned char d);
void delay(unsigned int data);
/*要显示的字符*/
unsigned int k;
unsigned char str1[]={"1234567890123456"};
unsigned char str2[]={"1234123412341234"};
/*主函数*/
void main(void)
{
/*初始化系统*/
InitSysCtrl();
/*关中断*/
DINT;
IER = 0x0000;
IFR = 0x0000;
/*初始化PIE*/
InitPieCtrl();
/*初始化PIE中断矢量表*/
InitPieVectTable();
/*Gpio初始化函数*/
InitGpio();
delay(2000);
EN=0; //开始时和结束时都为低电平,写指令或者数据中为高电平,1-0执行指令
WriteLcdCom(0x38); //显示模式设置
WriteLcdCom(0x0c); //开显示,无光标,光标不闪烁
WriteLcdCom(0x06); //读写字符后地址指针加一设置
WriteLcdCom(0x01); //清屏
/* WriteLcdCom(0x01); //清屏
WriteLcdCom(0x80); //第一行数据指针地址
for(k=0;k<16;k++) //16个字节
{
WriteLcdDat(str1[k]);
delay(200);
}
*/
WriteLcdCom(0xc0); //第二行数据指针的地址
for(k=0;k<16;k++)
{
WriteLcdDat(str2[k]);
delay(200);
}
/*
LCD_disp_char(5,1,'a');
delay(10000);
*/
}
/*************显示一个字符函数*********/
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
uchar address;
if(y==1)
address=0x80+x;
else
address=0xc0+x;
WriteLcdCom(address);
WriteLcdDat(dat);
}
/**************写地址函数*****************/
void WriteLcdCom(unsigned char str)
{
RS=0; //写指令
if(str&0x01)//并行口8位二进制数据一起写,不需要延时
D0=1;
else
D0=0; //先写高位还是地位??
if(str&0x02)
D1=1;
else
D1=0;
if(str&0x04)
D2=1;
else
D2=0;
if(str&0x08)
D3=1;
else
D3=0;
if(str&0x10)
D4=1;
else
D4=0;
if(str&0x20)
D5=1;
else
D5=0;
if(str&0x40)
D6=1;
else
D6=0;
if(str&0x80)
D7=1;
else
D7=0;
EN=1; //1-0下降沿 执行指令
delay(1);
EN=0; //20很长时间
delay(20); //执行完指令后,为低电平
}
/**************写数据函数*****************/
void WriteLcdDat(unsigned char str)
{
RS=1;//写数据
if(str&0x01)
D0=1;
else
D0=0;
if(str&0x02)
D1=1;
else
D1=0;
if(str&0x04)
D2=1;
else
D2=0;
if(str&0x08)
D3=1;
else
D3=0;
if(str&0x10)
D4=1;
else
D4=0;
if(str&0x20)
D5=1;
else
D5=0;
if(str&0x40)
D6=1;
else
D6=0;
if(str&0x80)
D7=1;
else
D7=0;
EN=1;
delay(1);
EN=0;
delay(20);
}
/*延时函数*/
void delay(unsigned int data)
{
unsigned int delayt;
while(data--)
{
for(delayt=0;delayt<100;delayt++);
}
}
//===========================================================================
// No more.
//===========================================================================
LCD_disp_char(5,1,'a');这条语句中为什么第三个一定要加引号,我不加引号显示的是乱码 它不是char么? 不加引号应该可以的啊。不加引号源程序要怎么改~~急求要做一个AD采集显示的 搞了好几天都没搞出来
|