📄 lcdtest.c
字号:
char logopaw[40*40/8]={
/*-- 调入了一幅图像:梅花鹿脚 --*/
/*-- 宽度x高度=40x40 --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0x00,0x00,
0x1F,0xC0,0xFC,0x00,0x00,0x1F,0xC1,0xFC,0x00,0x00,0x1F,0xE1,0xFE,0x00,0x00,0x3F,
0xE3,0xFE,0x00,0x00,0x3F,0xE3,0xFE,0x00,0x00,0x3F,0xE3,0xFE,0x00,0x00,0x1F,0xE7,
0xFE,0x00,0x00,0x1F,0xE7,0xFC,0x00,0x00,0x1F,0xE7,0xFC,0x00,0x0F,0x0F,0xE7,0xF8,
0x00,0x1F,0x8F,0xE3,0xF8,0x00,0x3F,0xC7,0xC3,0xF0,0xF0,0x3F,0xE1,0x01,0xE1,0xF8,
0x3F,0xE0,0x00,0x03,0xF8,0x3F,0xF0,0x00,0x07,0xF8,0x3F,0xF0,0x00,0x07,0xFC,0x1F,
0xF0,0x18,0x0F,0xF8,0x1F,0xF0,0xFE,0x0F,0xF8,0x0F,0xF1,0xFF,0x0F,0xF8,0x07,0xE3,
0xFF,0x8F,0xF8,0x03,0xC7,0xFF,0xCF,0xF0,0x00,0x0F,0xFF,0xEF,0xE0,0x00,0x1F,0xFF,
0xF7,0xC0,0x00,0x3F,0xFF,0xF0,0x00,0x00,0x3F,0xFF,0xF8,0x00,0x00,0x7F,0xFF,0xFC,
0x00,0x00,0x7F,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0xFC,0x00,0x00,0xFF,0xFF,0xFE,0x00,
0x00,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFE,0x00,0x00,0xFF,0xFF,0xFC,0x00,0x00,
0x7F,0xE3,0xF8,0x00,0x00,0x1E,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
System_Init();
Init_Port(); //for PCF8563
//LCD_Graphic(20,3,logopaw,40/8,40); //画一个图形
//LCD_ReadGraphic(15,2,logopaw,40,40); 不能用
Calt_Disp_Init();
WR_PCF8563_Data();
// Show_Picture(32,44,logopaw,40/8,40,0); //在中间显示 位图
//Show_Picture(12,64+20,logopaw,40/8,40,0);
//Fill_Area(0,0,10,27,1);
//Fill_Area(32,12,7,10,1);
_EINT();
while(1)
{
Intrrupt_Key_Pro();
PCF8563_get_BCDtime(time); //调试时在这个函数处step over(F10),Watch PCF_time 和 time可以看到读出来的时钟
Get10B_2(time); //
//Get10B(PCF_time);
//for(uchar i=0;i<6;i++)//此时给出的应是地址
//{
// LCD_Text(2,1,Get_AscII); //OK 将时间显示在整行上面.
//for(uchar i=0;i<6;i+2)
//{
//分别显示秒分时日月年,可写成单独函数.来写入到任意行与列数据
// LCD_Text_SigBT(3,0,&Get_AscII[0]); //显示单个字符---显示年
// LCD_Text_SigBT(3,1,&Get_AscII[2]); //显示单个字符---显示月
// LCD_Text_SigBT(3,2,&Get_AscII[4]); //显示单个字符---显示日
// LCD_Text_SigBT(3,3,&Get_AscII[6]); ////显示单个字符---显示时
// LCD_Text_SigBT(3,4,&Get_AscII[8]); //显示单个字符---显示分
// LCD_Text_SigBT(3,5,&Get_AscII[10]); //显示单个字符---显示秒
for(uchar i=0;i<6;i++) //只能对确知的0~3行进行显示.
{
LCD_Text_SigBT(3,1+i,&Get_AscII[i*2]);
}
Disp_Row_Line_Posit(1,1,&Get_AscII[0]);
Disp_Row_Line_Posit(1,3,&Get_AscII[2]);
Disp_Row_Line_Posit(1,5,&Get_AscII[4]);
Disp_Row_Line_Posit(2,1,&Get_AscII[6]);
Disp_Row_Line_Posit(2,3,&Get_AscII[8]);
Disp_Row_Line_Posit(2,5,&Get_AscII[10]);
// Disp_Row_Line_Poist(1,1,&Get_AscII[2]); //可显示任一行任一列的任意时间值.
//LCD_Text_SigBT(3,i+1,&Get_AscII[i+1]); //显示单个字符
//}
//LCD_Text(2,1,RealTime); //如果不行,将RealTime折分成两个数组.分别显示
//}
//for(uchar j=6;j<12;j++)
//{
// LCD_Text(3,1+j-6,&RealTime[j]);
//}
Delay_PCF8563(10);
//LCD_Text(2,1,PCF_time);
};
}
void Calt_Disp_Init()
{
LCD_Text(0,1,text);
//对于时钟日历:
LCD_Text(1,0,Calt_N_2); // 20 位置:0
LCD_Text(1,2,Calt_Y); // 年 位置:2
LCD_Text(1,4,Calt_M); //月 位置:4
LCD_Text(1,6,Calt_D); //日 位置:6
LCD_Text(2,2,Calt_H);
LCD_Text(2,4,Calt_Min);
LCD_Text(2,6,Calt_Sec);
}
//可显示任一行任一列的任意时间值. 一个特定的值
void Disp_Row_Line_Posit(unsigned char Row,unsigned char Line,unsigned char*Value)
{
if(Row>3||Line>7)
return ;
else
{
LCD_Text_SigBT(Row,Line,Value);
}
}
void Get10B_2(unsigned char *time)
{
// uchar j=0;
// uint temp;
for(uchar s=0;s<12;s++)
{
Get_Value[s]=*time++; //将数据复制
}
for(uchar t=0;t<12;t++) //每个项目值加0x30得到想要在LCD12864液晶上显示的ASCII值.
{
Get_AscII[11-t]=Get_Value[t];
}
for(uchar t=0;t<12;t++)
{
Get_AscII[t]+=0x30;
}
//uchar i;
//for(i=0;i<12;i++)
//{
//Get_AscII[12-i]=time[i]+'0';
//}
}
/*
unsigned char BCDGet(unsigned char *Copyof_PCF_time)
{
uchar j=0,temp;
for(uchar s=0;s<6;s++)
{
temp=Copy_PCF_time[s];
BCD10Time[j++] = temp%10; //低位在前,高位在后. 在后面将值反过来
BCD10Time[j++] = temp/10;
}
}
*/
// 将高位与低位分开,然后置于相反地.
//加'0'
void Get10B(unsigned char *PCF_time)
{ uchar j=0;
uint temp;
for(uchar s=0;s<6;s++)
{
Copy_PCF_time[s]=*PCF_time++; //将数据复制
}
for(uchar s=0;s<6;s++)
{
temp=(unsigned int)Copy_PCF_time[s];
BCD10Time[j++] = (unsigned char)temp%0x10; //低位在前,高位在后. 在后面将值反过来
BCD10Time[j++] = (unsigned char)temp/0x10;
}
//*RealTime = *time;
//BCDGet(Copy_PCF_time);
for(uchar t=0;t<12;t++) //每个项目值加0x30得到想要在LCD12864液晶上显示的ASCII值.
{
RealTime[11-t]=BCD10Time[t];
}
for(uchar t=0;t<12;t++)
{
RealTime[t]+=0x30;
}
}
void Init_Port(void)
{
P3SEL=0x00; // iic
P3DIR=BIT3; // iic
P4DIR=0x01;
P4SEL=0;
//P5SEL &=~BIT0;
//P5DIR |=BIT0;
//P5OUT &=~BIT0;
//return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -