📄 lcd12864a_430.c
字号:
LCD_Display(Number5,0,5,0);
LCD_Display(Number6,0,6,0);
LCD_Display(Number7,0,7,0);
LCD_Display(Number8,0,8,0);
LCD_Display(Number9,0,9,0);*/
/*LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);
LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);
LCD_Clear(0x00); LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);
LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);LCD_Delayt(65000);*/
}
}
//---------------------------------------------------------
void InitOsc(void) {
unsigned char i,j; //设置系统时钟
BCSCTL1 = 0x00; //启动XT2晶振,ACLK为XT1(32KHz)
BCSCTL2 = 0x88; //MCLK为XT2不分频;SMCLK为XT2,4MHz
j=0;
while(1) {
IFG1 &= ~OFIFG; //清OSCFault标志
for (i=0xFF;i>0;--i); //延时等待
if ((IFG1 & OFIFG)!=0) {
BCSCTL1 = 0x00; //启动XT2晶振,ACLK为XT1(32KHz)
BCSCTL2 = 0X88; //MCLK为XT2不分频,SMCLK为XT2不分频
j++; //如果检测到振荡器失效,则计数
if (j>10) //如果计数值超过10次,则认为是硬件问题
; //OSCFault();
}
else {
for (i=0xFF;i>0;--i); //等待振荡器达到足够的幅度
IFG1 &= ~OFIFG; //清OSCFault标志
IE1 |= OFIE + ACCVIE; //振荡器故障,FLASH非法访问中断允许
break;
}
}
}
//---------------------------------------------------------
void LCD_Initialization(void) {
LCD_DATA_DIR = 0xff;
LCD_DATA_OUT = 0x00; //设置8位数据端口
LCD_RST_DIR |= LCD_RST;
LCD_CS1_DIR |= LCD_CS1;
LCD_CS2_DIR |= LCD_CS2; //复位和片选输出
LCD_RST_LO;
LCD_CS1_LO;
LCD_CS2_LO;
LCD_DI_DIR |= LCD_DI;
LCD_EN_DIR |= LCD_EN;
LCD_RW_DIR |= LCD_RW;
LCD_RW_LO;
LCD_EN_LO; //设置EN DI和RW
LCD_Delayt(5);
LCD_RST_HI;
LCD_WriteByte(LCD_DisplayON,LCD_Instrument|LCD_Chip1);
LCD_WriteByte(LCD_DisplayON,LCD_Instrument|LCD_Chip2);
LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip1);
LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip2);
LCD_Clear(0x00);
}
unsigned char LCD_ReadByte(unsigned char flag) {
unsigned char LCD_Result=0x00;
LCD_EN_LO;;
LCD_RW_HI;
if((flag&LCD_Data)==0x01)
LCD_DI_HI;
else
LCD_DI_LO;
if ((flag&LCD_Chip1)==0x02)
LCD_CS1_HI;
else
LCD_CS2_HI;
LCD_EN_HI;
//LCD_Delayt(2);
LCD_DATA_DIR = 0x00;
LCD_Result=(LCD_DATA_IN&0xFF);
LCD_DATA_DIR = 0xFF;
LCD_EN_LO;
LCD_CS1_LO;
LCD_CS2_LO;
return LCD_Result;
}
void LCD_WriteByte(unsigned char I_Data,unsigned char flag) {
unsigned char itemp=0;
do {
itemp=LCD_ReadByte(flag&0xFE);
} while(itemp&0x80);
//LCD_Delayt(2);
LCD_EN_LO;
LCD_RW_LO;
if((flag&LCD_Data)==0x01)
LCD_DI_HI;
else
LCD_DI_LO;
if ((flag&LCD_Chip1)==0x02)
LCD_CS1_HI;
else
LCD_CS2_HI;
LCD_EN_HI;
LCD_DATA_OUT = I_Data;
//LCD_Delayt(2);
LCD_EN_LO;
LCD_CS1_LO;
LCD_CS2_LO;
}
unsigned char LCD_Location(unsigned char XPos,unsigned char YPos)
{ unsigned char ce_flag=YPos<64?LCD_Chip1:LCD_Chip2;
XPos=XPos&0x07;
YPos=YPos&0x3F;
LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip1);
LCD_WriteByte(LCD_StartLine,LCD_Instrument|LCD_Chip2);
LCD_WriteByte((LCD_XAddress+XPos),ce_flag&0xFE);
LCD_WriteByte((LCD_YAddress+YPos),ce_flag&0xFE);
return ce_flag;
}
void LCD_Clear(unsigned char I_Data)
{ unsigned char xtemp,ytemp;
for (xtemp=0;xtemp<8;xtemp++)
{ LCD_Location(xtemp,0);
LCD_Location(xtemp,64);
for (ytemp=0;ytemp<64;ytemp++)
{ LCD_WriteByte(I_Data,LCD_Data|LCD_Chip1);
LCD_WriteByte(I_Data,LCD_Data|LCD_Chip2);
}
}
}
void LCD_ClearRange(unsigned char Start_XPos,unsigned char Start_YPos,
unsigned char End_XPos,unsigned char End_YPos)
{ unsigned char XPos,YPos,flag;
for (XPos=Start_XPos;XPos<End_XPos;XPos++)
{ flag=LCD_Location(XPos,Start_YPos);
for (YPos=Start_YPos;YPos<End_YPos;YPos++)
{ if (YPos==64)
flag=LCD_Location(XPos,64);
LCD_WriteByte(0x00,flag|LCD_Data);
}
}
}
void LCD_Delayt(unsigned int dtime)
{ unsigned int itemp;
for (itemp=0;itemp<dtime;itemp++);
}
void LCD_Delayl(unsigned int dtime)
{ unsigned int itemp;
for (itemp=0;itemp<dtime;itemp++)
LCD_Delayt(10000);
}
void LCD_Display(const unsigned char *Buffer,unsigned char Start_XPos,
unsigned char Start_YPos,unsigned char Rotate)
{ unsigned char XPos,YPos,flag;
unsigned char Width=Buffer[0],Height=Buffer[1];
for (XPos=0;XPos<Height;XPos++)
{ flag=LCD_Location((XPos+Start_XPos),Start_YPos);
for (YPos=0;YPos<Width;YPos++)
{ if ((YPos+Start_YPos)==64)
flag=LCD_Location((XPos+Start_XPos),64);
if(Rotate == 1)
{ LCD_WriteByte((0xFF-Buffer[XPos*Width+YPos+2]),flag|LCD_Data);
} else {
LCD_WriteByte(Buffer[XPos*Width+YPos+2],flag|LCD_Data);
}
}
}
}
void LCD_DispNum(unsigned char dates,unsigned char Start_XPos,
unsigned char Start_YPos,unsigned char Rotate) {
//这是一个,注意仅仅是一个哦,显示数据的地方哦
switch (dates) {
case 0:
LCD_Display(Number0,Start_XPos,Start_YPos,Rotate);
break;
case 1:
LCD_Display(Number1,Start_XPos,Start_YPos,Rotate);
break;
case 2:
LCD_Display(Number2,Start_XPos,Start_YPos,Rotate);
break;
case 3:
LCD_Display(Number3,Start_XPos,Start_YPos,Rotate);
break;
case 4:
LCD_Display(Number4,Start_XPos,Start_YPos,Rotate);
break;
case 5:
LCD_Display(Number5,Start_XPos,Start_YPos,Rotate);
break;
case 6:
LCD_Display(Number6,Start_XPos,Start_YPos,Rotate);
break;
case 7:
LCD_Display(Number7,Start_XPos,Start_YPos,Rotate);
break;
case 8:
LCD_Display(Number8,Start_XPos,Start_YPos,Rotate);
break;
case 9:
LCD_Display(Number9,Start_XPos,Start_YPos,Rotate);
break;
}
}
void LCD_DispNums(unsigned char dates,unsigned char Start_XPos,
unsigned char Start_YPos,unsigned char Rotate){
unsigned int itemp,jtemp; // 显示一组数据
jtemp = dates;
itemp = dates/10000;
LCD_DispNum(itemp,Start_XPos,Start_YPos,Rotate);
jtemp = jtemp - itemp*10000;
itemp = jtemp/1000;
LCD_DispNum(itemp,Start_XPos,Start_YPos+8,Rotate);
jtemp = jtemp - itemp*1000;
itemp = jtemp/100;
LCD_DispNum(itemp,Start_XPos,Start_YPos+16,Rotate);
//LCD_DispNum(itemp,Start_XPos,Start_YPos,Rotate);
jtemp = jtemp - itemp*100;
itemp = jtemp/10;
LCD_DispNum(itemp,Start_XPos,Start_YPos+24,Rotate);
//LCD_DispNum(itemp,Start_XPos,Start_YPos+8,Rotate);
itemp = jtemp - itemp*10;
LCD_DispNum(itemp,Start_XPos,Start_YPos+32,Rotate);
//LCD_DispNum(itemp,Start_XPos,Start_YPos+16,Rotate);
}
void delay(unsigned int time)
{
int i;
int j,k;
for(j=0;j<time;j++)
{for (k=0;k<time;k++)
for(i=0;i<time;i++)
_NOP();
}
}
void second()
{
unsigned char i,j=0;
for(i=0;i<10;i++)
{
LCD_DispNums(i,2,32,0);
delay(58);}
if(i==9)
{
j=j+1;
LCD_DispNums(j,2,24,0);
delay(58);}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -