⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 本程序是DSP2407的1602液晶显示程序
💻 C
字号:
// 1602的写时序是使能信号在由高到低时写进去的,
//前面可以没有使能信号先置低这条指令,在由高到低的变化
//之前,一定要先赋要送出去的值到IO端口,如果在这之前就有
//由高到低的变化就会送出去乱码,即不是自己想要的值
#include"LF2407.H"
#define E_H  *PFDATDIR=*PFDATDIR|0x0001
#define E_L  *PFDATDIR=*PFDATDIR&0x0FFFE
#define RW_H  *PFDATDIR=(*PFDATDIR|0x0002)
#define RW_L  *PFDATDIR=(*PFDATDIR&0x0FFFD)
#define RS_H  *PFDATDIR=(*PFDATDIR|0x0004)
#define RS_L  *PFDATDIR=(*PFDATDIR&0x0FFFA)
#define PFSC  *PFDATDIR=*PFDATDIR|0x0F00
#define PESC  *PEDATDIR=*PEDATDIR|0x0FF00
#define PESR  *PEDATDIR=*PEDATDIR&0x00FF
#define uchar unsigned char
#define uint  unsigned int
uchar tab1[]={"     Hello!     "};
uchar tab2[]={" I am zhuyubing "};
uchar tab3[]={"F:1500r/min sShi"};
uchar tab4[]={"A:1500r/min nShi"};
uchar tabnum[]={"0123456789"};
void SystemInit();
void LCD1602init();
void writecommand(uchar command);
void kjdisplay();
void readstat();
void delay(unsigned int i);
main()
{SystemInit();
LCD1602init();
//while(1)//循环是否都可以
kjdisplay();
}
void SystemInit()
{   asm(" SETC	INTM ");	/* 关闭总中断 */
	asm(" CLRC  SXM  ");	/* 禁止符号位扩展 */ 
	asm(" CLRC  CNF  ");    /* B0块映射为 on-chip DARAM*/
	asm(" CLRC  OVM  ");    /* 累加器结果正常溢出*/
    *SCSR1=0x02FC;          /* 系统时钟CLKOUT=20*2=40M */
    *WDCR=0x0E8;             //不是能看门狗,软件禁止看门狗
    *IMR=0x0000;
    *IFR=0x0FFFF;
    *MCRC=*MCRC&0x0E000;//IOPE口和IOPF0-4口为一般I/O口
    *MCRA=*MCRA&0x8FFF;
}
void LCD1602init()//LCD1602初始化函数
{delay(150);//可以不要
writecommand(0x38);//可以不要
delay(50);//可以不要
writecommand(0x38);//可以不要
delay(50);//可以不要
writecommand(0x38);//可以不要
writecommand(0x38);//可以不要
writecommand(0x08);
writecommand(0x01);
writecommand(0x06);
writecommand(0x0c);
}
void writecommand(uchar command)//LCD1602写命令函数
{readstat();
PESC;
PFSC;
RS_L;
RW_L;
*PEDATDIR=*PEDATDIR&0x0FF00|command;
//在此条指令之后只要使能信号有个由高到低的跳变即可写液晶

//E_L;//可以不要
//asm(" NOP");//可以不要
//asm(" NOP");//可以不要
//asm(" NOP");//可以不要
E_H;
//delay(5);//可以不要
E_L;
}
void readstat()
{unsigned int stat;
 PESR;
 PFSC;
 while(1)
 {
 RS_L;
 E_H;
 RW_H;
 stat=*PEDATDIR&0x0080;
 if(stat==0)break;
 }
}
void writedata(uchar data)//LCD1602写数据函数
{readstat();
PESC;
PFSC;
RS_H;
RW_L;
*PEDATDIR=*PEDATDIR&0x0FF00|data;
//在此条指令之后只要使能信号有个由高到低的跳变即可写液晶
//如果在这之前就有
//由高到低的变化就会送出去乱码,即不是自己想要的值
E_L;//可以不要
asm(" NOP");//可以不要
asm(" NOP");//可以不要
asm(" NOP");//可以不要
E_H;
//delay(5);//可以不要
E_L;
}
void kjdisplay()//开机显示画面
{uchar address=0x80,add=0,data;
 for(add=0;add<16;add++,address++)
 {writecommand(address);
  data=tab1[add];
  writedata(data);
 }
 address=0xc0;
 for(add=0;add<16;add++,address++)
 {writecommand(address);
  data=tab2[add];
  writedata(data);
 }
} 
void delay(unsigned int i)
{ unsigned int j;
 for(;i>0;i--)
 for(j=1000;j>0;j--);
} 
void interrupt nothing()
{asm(" CLRC	INTM ");
return;
}












⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -