📄 lcd_demo.c
字号:
SetAddress(address,address);
if(window==1)PutCharR(bmp001[d_where]);//右边
else PutCharL(bmp001[d_where]);//左边
SetPage(3,3);
SetAddress(address,address);
if(window==1)PutCharR(bmp001[d_where+width]);
else PutCharL(bmp001[d_where+width]);
}
x_add++;
d_where++;
}
}
void Draw_a(uchar d_where,uint x_add,uchar layer,uchar width)
{
uchar x,i=0,address; //address表示显存的物理地址
uchar page=0; //page表示上下两页
uchar window=0; //window表示左右两页
//putcharR //右边
//putcharL //左边
d_where=d_where*16;
for (x=width;x>1;x--)
{
if (x_add>60) {window=1;address=x_add%61;}
else address=x_add;
if(layer==0) //显示一行八个字
{
SetPage(0,0);
SetAddress(address,address);
if(window==1)PutCharR(bmp009[d_where]);//右边
else PutCharL(bmp009[d_where]);//左边
SetPage(1,1);
SetAddress(address,address);
if(window==1)PutCharR(bmp009[d_where+width]);
else PutCharL(bmp009[d_where+width]);
}
else
{ //显示第二行八个汉字
SetPage(2,2);
SetAddress(address,address);
if(window==1)PutCharR(bmp009[d_where]);//右边
else PutCharL(bmp009[d_where]);//左边
SetPage(3,3);
SetAddress(address,address);
if(window==1)PutCharR(bmp009[d_where+width]);
else PutCharL(bmp009[d_where+width]);
}
x_add++;
d_where++;
}
}
/****************************************************************************
蜂明器报警程序
*****************************************************************************/
void Beep_Alarm(uchar time)
{
uchar i;
for( i=time; i>0;i--){
Io_Set(BEEP);
delay1s(2);
Io_Clr(BEEP);
delay1s(2);
}
}
void IRQ_Timer0(void) __irq
{
key_code= Scan_Key();
T0IR = 0x01; /* 清除中断标志 */
VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
}
void Timer0_init(void)
{
/* 定时器0初始化 */
T0TC = 0; /* 定时器设置为0 */
T0PR = 0; /* 时钟不分频 */
T0MCR = 0x03; /* 设置T0MR0匹配后复位T0TC,并产生中断标志 */
T0MR0 = Fpclk / 1000; /* 1M秒钟定时 */
T0TCR = 0x01; /* 启动定时器 */
/* 设置定时器0中断IRQ */
VICIntSelect = 0x00; /* 所有中断通道设置为IRQ中断 */
VICVectCntl0 = 0x20 | 0x04; /* 设置定时器0中断通道分配最高优先级 */
VICVectAddr0 = (uint)IRQ_Timer0; /* 设置中断服务程序地址 */
VICIntEnable = 1 << 0x04; /* 使能定时器0中断 */
}
//液晶显示规则
// M(左) S(右)
// page page
// 0 | 0
// 1 | 1
// 2 | 2
// 3 | 3
void delay1s(unsigned char i)
{
while(i>1)
{
i--;
delayms(20);
}
}
//显示动态的等待图标
void wait1(unsigned char i)
{
clrscr(); //
DrawBmp1(0,60,Bmptc); //
for(;i>1;i--)
{delay1s(2);
DrawBmp1(76,19,Bmpt1); //
delay1s(2);
DrawBmp1(76,19,Bmpt2); //
delay1s(2);
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt3); //
delay1s(2);
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt4); //
delay1s(2);
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt5); //
delay1s(2);
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt6); //
delay1s(2);
// DrawBmp1(0,60,Bmptc); //
DrawBmp1(76,19,Bmpt7); //
}
}
void init_port(void)
{
//port initialized
IODIR1=0x00FF0000;
IODIR0=0x40610010;
PINSEL1=1<<24;
}
uchar screen,alarm_hour,alarm_min;
void Display( uchar data)
{uint datas;
uint times;
uint bak;
if(data==1)
{ //clrscr(); //
ReadRTC();
Ad_fun();
}
if(data==2) //2,3界面一样的!
{ // clrscr(); //clr
Draw_word(0,32-8,0,16); //
Draw_word(1,48-8,0,16); //
Draw_word(2,64,0,16); //
Draw_word(3,80,0,16);
times=CTIME0;
datas=CTIME1;
bak=(times>>16)&0x1f;
Draw_a(alarm_hour/10,48-8,1,8);
Draw_a(alarm_hour%10,56-8,2,8);
Draw_a(10,56,2,8);
Draw_a(alarm_min/10,56+8,1,8);
Draw_a(alarm_min%10,56+8+8,1,8);
}
if(data==3)
{ // clrscr(); //clr
Draw_word(0,32-8,0,16); //
Draw_word(1,48-8,0,16); //
Draw_word(2,64,0,16); //
Draw_word(3,80,0,16);
times=CTIME0;
datas=CTIME1;
bak=(times>>16)&0x1f;
Draw_a(alarm_hour/10,48-8,1,8);
Draw_a(alarm_hour%10,56-8,2,8);
Draw_a(10,56,2,8);
Draw_a(alarm_min/10,64,1,8);
Draw_a(alarm_min%10,72,1,8);
}
}
void key_do(void)
{
//Draw_a(key_code/10,24,1,8);
// Draw_a(key_code%10,32,1,8);
switch(screen)
{
case 1 :
if(key_code==fun){screen=2;clrscr();} key_code=0;
break;
case 2 : //设置闹铃分
if(key_code==fun){screen=1; clrscr();}
else if(key_code==add)
{
alarm_hour++; if(alarm_hour==24){alarm_hour=0;}
Draw_a(alarm_hour/10,48-8,1,8);
Draw_a(alarm_hour%10,56-8,2,8);
}
else if(key_code==dec)
{
alarm_hour--; if(alarm_hour==0){alarm_hour=23;}
Draw_a(alarm_hour/10,48-8,1,8);
Draw_a(alarm_hour%10,56-8,2,8);
}
else if(key_code==ok)
{screen=3; clrscr();}
key_code=0;
break;
//设置闹铃秒
case 3 :
if(key_code==fun){screen=1; clrscr();}
else if(key_code==add)
{
alarm_min++; if(alarm_min==60){alarm_min=0;}
Draw_a(alarm_hour/10,48-8,1,8);
Draw_a(alarm_hour%10,56-8,1,8);
Draw_a(alarm_min/10,56+8,1,8);
Draw_a(alarm_min%10,56+8+8,1,8);
}
else if(key_code==dec)
{
alarm_min--; if(alarm_min==0){alarm_min=0;}
Draw_a(alarm_hour/10,48-8,1,8);
Draw_a(alarm_hour%10,56-8,1,8);
// Draw_a(10,56+8+8,1,8);
Draw_a(alarm_min/10,56+8,1,8);
Draw_a(alarm_min%10,56+8+8,1,8);
}
else if(key_code==ok)
{screen=1; clrscr();}
key_code=0;
break;
}
}
//演示程序
void main()
{
uchar key_code=0; screen=1;
init_port();
lcdini(); //reset
RTCInit();
clrscr(); //clr
AD0CR|=(1<<1)|((Fpclk/1000000-1)<<8)|(0<<16)|(0<<17)|(1<<21)|(0<<22)|(1<<24)|(0<<27);
data=AD0DR1;
/*for(data=15;data>0;data--){
Draw_a(data,8*data,0,8);
delay1s(3);
}
clrscr();
for(data=0;data<15;data++){
Draw_a(data,8*data,1,8);
delay1s(3);
}
*/
delay1s(8);
clrscr();
/* clrscr();
Draw_word(0,0,1,16); //
Draw_word(1,16,1,16); //
Draw_word(2,32,1,16); //
Draw_word(3,48,1,16); //
Draw_word(0,64,0,16); //
Draw_word(1,80,0,16); //
Draw_word(2,96,0,16); //
delay1s(8); */
clrscr(); //
DrawBmp(0,112,ARMKIT_bmp);
DrawBmp(1,119,Bmp002); //
delay1s(8);
clrscr(); //
DrawBmp1(0,122,Bmp012); //LOGO
delay1s(8);
clrscr(); //
Timer0_init();
while(1)
{
// delay1s(3);
// if(key_code>0){
key_do();
// }
Display(screen);
// Beep_Alarm(key_code);
/* clrscr(); //
DrawBmp1(10,101,Bmp07); //
delay1s(8);
clrscr(); //
wait1(3);
DrawBmp1(0,122,Bmp04); //
delay1s(8);
clrscr(); //
wait1(3);
DrawBmp1(0,122,Bmp03); //超前科技
delay1s(8);
clrscr(); //
wait1(3);
clrscr(); //
DrawBmp1(10,101,Bmp05); //
delay1s(8);
clrscr(); //
wait1(3);
clrscr(); //
DrawBmp1(10,101,Bmp06); //
delay1s(8);
clrscr(); //
wait1(3);
clrscr(); //
DrawBmp1(10,101,Bmp08); //
delay1s(8);
clrscr(); //
wait1(3);
clrscr(); //
DrawBmp1(0,122,Bmp01); //
wait1(8); */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -