?? anjian.c
字號:
#include <reg52.h>
#include<string.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
sbit cs = P2^5;
sbit std = P2^6;
sbit sclk = P2^7;
uchar number=0;
uchar count=0;
uchar list=0;
//uchar idata tt[10]={0x07,0x06,0x06,0x17,0x25};
uchar idata tab1[64];
uchar idata buffer[12];
uchar code tab2[]={
" 時間 "
" 電壓設置 "
" 電壓值 "
" 電壓統計量 "
};
uchar idata tab3[]={
"2007-05-31 16:33"
"2007-05-30 16:33"
"電壓值: 220.5V "
"電壓值: 220.5V "
};
uchar code tab4[]={
"*-------------* "
"上限電壓: 107% "
"下限電壓: 90% "
"*-------------* "
};
uchar code tab5[]={
" 整點電壓值 "
"上限電壓時間間隔"
"下限電壓時間間隔"
" 停電時間間隔 "
};
void wr_lcd (uchar dat_comm,uchar content);
void delay (uint us);
//uchar keywork(uchar p,uchar k);
/*------------------初始化-----------------*/
void init_lcd (void)
{
wr_lcd (comm,0x30); /*30---基本指令動作*/
wr_lcd (comm,0x01); /*清屏,地址指針指向00H*/
delay (100);
wr_lcd (comm,0x06); /*光標的移動方向*/
wr_lcd (comm,0x0c); /*開顯示,關游標*/
}
/*---------------顯示漢字----------------*/
void chn_disp (uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
}
/*---------------顯示字----------------*/
void chn_disp1 (uchar idata *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
j=0;
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
}
/*---------------顯示電壓----------------*/
void chn_disp2 (uchar idata *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
for (j=0;j<4;j++)
{
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
}
/*--------------顯示點陣----------------*/
void lat_disp (uchar data1,uchar data2)
{
uchar i,j,k,x;
x=x1;
for(k=0;k<2;k++)
{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data1);
}
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2+1);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data2);
wr_lcd (dat,data2);
}
}
x=x2;
}
wr_lcd (comm,0x36);
}
/*---------------反白 ---------------------*/
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)
{
uchar i,j;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y0+j);
wr_lcd (comm,x0+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data2);
}
}
wr_lcd (comm,0x36);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
uchar a,i,j;
delay (50);
a=content;
cs=1;
sclk=0;
std=1;
for(i=0;i<5;i++)
{
sclk=1;
sclk=0;
}
std=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1; //data
else
std=0; //command
sclk=1;
sclk=0;
std=0;
sclk=1;
sclk=0;
for(j=0;j<2;j++)
{
for(i=0;i<4;i++)
{
a=a<<1;
std=CY;
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)
{
sclk=1;
sclk=0;
}
}
}
/*-----------------------------------*/
void delay (uint us) //delay time
{
while(us--);
}
/*---------------數據處理--------------------*/
void transfer(uchar idata tt[])
{ uchar i, time;
for(i=0;i<6;i++)
{
time=tt[i];
buffer[2*i+1]=time&0x0f;
buffer[2*i]=time>>4;
}
}
void convent( uchar idata buffer[])
{ uchar i, time;
uchar idata pp[]={"-- :"};
uchar idata buffer1[12];
for(i=0;i<12;i++)
{ time=buffer[i];
switch(time)
{ case 0:buffer1[i]='0'; break;
case 1:buffer1[i]='1'; break;
case 2:buffer1[i]='2'; break;
case 3:buffer1[i]='3'; break;
case 4:buffer1[i]='4'; break;
case 5:buffer1[i]='5'; break;
case 6:buffer1[i]='6'; break;
case 7:buffer1[i]='7'; break;
case 8:buffer1[i]='8'; break;
case 9:buffer1[i]='9'; break;
default: break;
}
}
for(i=0;i<4;i++)
{ tab1[i]=buffer1[i];
tab1[3*i+4]=pp[i];
tab1[3*i+5]=buffer1[2*i+4];
tab1[3*i+6]=buffer1[2*i+5];
}
}
/*-----------------1#鍵------------------*/
void key1(uchar flag[])
{
number++;
if(number==3)
number=1;
flag[1]=number;
if(flag[1]==1)
{ flag[3]=1;
flag[2]=1;
init_lcd ();
lat_disp (0x00,0x00);
chn_disp (tab2);
}
if(flag[1]==2)
{ if(flag[4]==1)
{ init_lcd ();
lat_disp (0x00,0x00);
convent(buffer);
chn_disp1 (tab1);
flag[5]=1;
}
if(flag[4]==2)
{ init_lcd ();
lat_disp (0x00,0x00);
chn_disp2 (tab3);
}
if(flag[4]==3)
{ init_lcd ();
lat_disp (0x00,0x00);
chn_disp (tab4);
}
if(flag[4]==4)
{ init_lcd ();
lat_disp (0x00,0x00);
chn_disp (tab5);
}
flag[1]=1;
}
}
/*-----------------2#鍵------------------*/
void key2(uchar flag[])
{ count++;
if(count==5)
count=1;
flag[4]=count;
if(flag[2]==1)
{ if(flag[4]==1)
{ con_disp (0x00,0x00,0x98,0x90,8,16);
con_disp (0xff,0xff,0x80,0x80,8,16);
}
if(flag[4]==2)
{ con_disp (0x00,0x00,0x80,0x80,8,16);
con_disp (0xff,0xff,0x90,0x90,8,16);
}
if(flag[4]==3)
{ con_disp (0x00,0x00,0x90,0x90,8,16);
con_disp (0xff,0xff,0x88,0x80,8,16);
}
if(flag[4]==4)
{ con_disp (0x00,0x00,0x88,0x80,8,16);
con_disp (0xff,0xff,0x98,0x90,8,16);
}
}
}
/*-----------------3#鍵------------------*/
void key3(uchar flag[])
{
list++;
if(list==15)
list=1;
flag[6]=list;
if(flag[5]==1)
{ lat_disp (0x00,0x00);
chn_disp1 (tab1);
if(flag[6]==1)
{ con_disp (0x00,0x00,0x87,0x80,1,16);
con_disp (0xff,0x00,0x80,0x80,1,16);
}
if(flag[6]==2)
{ con_disp (0x00,0xff,0x80,0x80,1,16);}
if(flag[6]==3)
{ con_disp (0x00,0x00,0x80,0x80,1,16);
con_disp (0xff,0x00,0x81,0x80,1,16);
}
if(flag[6]==4)
{ con_disp (0x00,0xff,0x81,0x80,1,16); }
if(flag[6]==5)
{ con_disp (0x00,0x00,0x81,0x80,1,16);
con_disp (0xff,0x00,0x82,0x80,1,16);
}
if(flag[6]==6)
{ con_disp (0x00,0xff,0x82,0x80,1,16); }
if(flag[6]==7)
{ con_disp (0x00,0x00,0x82,0x80,1,16);
con_disp (0xff,0x00,0x83,0x80,1,16);
}
if(flag[6]==8)
{ con_disp (0x00,0xff,0x83,0x80,1,16); }
if(flag[6]==9)
{ con_disp (0x00,0x00,0x83,0x80,1,16);
con_disp (0xff,0x00,0x84,0x80,1,16);
}
if(flag[6]==10)
{ con_disp (0x00,0xff,0x84,0x80,1,16); }
if(flag[6]==11)
{ con_disp (0x00,0x00,0x84,0x80,1,16);
con_disp (0xff,0x00,0x85,0x80,1,16);
}
if(flag[6]==12)
{ con_disp (0x00,0xff,0x85,0x80,1,16); }
if(flag[6]==13)
{ con_disp (0x00,0x00,0x85,0x80,1,16);
con_disp (0xff,0x00,0x86,0x80,1,16);
}
if(flag[6]==14)
{ con_disp (0x00,0xff,0x86,0x80,1,16); }
if(flag[6]==15)
{ con_disp (0x00,0x00,0x86,0x80,1,16);
con_disp (0xff,0x00,0x87,0x80,1,16);
}
if(flag[6]==16)
{ con_disp (0x00,0xff,0x87,0x80,1,16);}
}
}
/*-----------------4#鍵------------------*/
key4(uchar flag[],uchar idata tt[])
{ uchar i, time,hour;
if(flag[6]==1)
{ buffer[0]++;
if(buffer[0]>9)
buffer[0]=0;
}
if(flag[6]==2)
{ buffer[1]++;
if(buffer[1]>9)
buffer[1]=0;
}
if(flag[6]==3)
{ buffer[1]++;
if(buffer[1]>9)
buffer[1]=0;
}
if(flag[6]==4)
{ buffer[1]++;
if(buffer[1]>9)
buffer[1]=0;
}
if(flag[6]==6)
{ buffer[2]++;
if(buffer[2]>1)
buffer[2]=0;
}
if(flag[6]==7)
{ buffer[3]++;
if(buffer[3]>9)
buffer[3]=0;
}
if(flag[6]==9)
{ buffer[4]++;
if(buffer[4]>3)
buffer[4]=0;
}
if(flag[6]==10)
{ buffer[5]++;
if(buffer[5]>9)
buffer[5]=0;
}
if(flag[6]==12)
{ buffer[6]++;
if(buffer[6]>2)
buffer[6]=0;
}
if(flag[6]==13)
{ buffer[7]++;
if(buffer[7]>9)
buffer[7]=0;
}
if(flag[6]==15)
{ buffer[8]++;
if( buffer[8]>5)
buffer[8]=0;
}
if(flag[6]==16)
{ buffer[9]++;
if( buffer[9]>9)
buffer[9]=0;
}
for(i=0;i<5;i++)
{ time=buffer[2*i];
time=time<<4;
hour=buffer[2*i+1];
tt[i]=time|hour;
}
for(i=0;i<6;i++)
{ time=buffer[2*i];
time=time<<4;
hour=buffer[2*i+1];
tt[i]=time|hour;
}
convent(buffer);
chn_disp1 (tab1);
}
/*-----------------5#鍵------------------*/
/*void key4(uchar flag[],uchar idata tab1[])
{
if(flag[6]==1)
{ tab1[1]++;
if(tab1[1]>9)
tab1[1]=0;
chn_disp1 (tab1);
}
if(flag[6]==2)
{ tab1[2]++;
if(tab1[2]>9)
tab1[2]=0;
chn_disp1 (tab1);
}
if(flag[6]==4)
{ tab1[4]++;
if(tab1[4]>1)
tab1[4]=0;
chn_disp1 (tab1);
}
if(flag[6]==5)
{ tab1[5]++;
if(tab1[5]>9)
tab1[5]=0;
chn_disp1 (tab1);
}
if(flag[6]==7)
{ tab1[7]++;
if(tab1[7]>3)
tab1[7]=0;
chn_disp1 (tab1);
}
if(flag[6]==8)
{ tab1[8]++;
if(tab1[8]>9)
tab1[8]=0;
chn_disp1 (tab1);
}
if(flag[6]==10)
{ tab1[10]++;
if(tab1[10]>2)
tab1[10]=0;
chn_disp1 (tab1);
}
if(flag[6]==11)
{ tab1[11]++;
if(tab1[11]>9)
tab1[11]=0;
chn_disp1 (tab1);
}
if(flag[6]==13)
{ tab1[13]++;
if(tab1[13]>5)
tab1[13]=0;
chn_disp1 (tab1);
}
if(flag[6]==14)
{ tab1[14]--;
if(tab1[14]>9)
tab1[14]=0;
chn_disp1 (tab1);
}
flag[8]=1;
}*/
/*--------------檢測鍵---------------------*/
uchar testkey(void)
{ uchar i,p;
P0=0xff;
for(i=0;i<8;i++)
{ P0=0xff;
delay(100);
if((P0&0xff)!=0xff)
p=P0;
return (p);
}
}
/*----------得鍵值------------*/
void obtain( uchar keycode, uchar tt[],uchar idata pp[])
{
switch(keycode)
{ case 0xfe: key1(tt); break;
case 0xfd: key2(tt); break;
case 0xfb: key3(tt); break;
case 0xf7: key4(tt,pp); break;
//case 0xef: key5(tt); break;
//case 0xdf: key6(tt); break;
// case 0xbf: key7(tt); break;
// case 0x7f: key8(tt); break;
default: break;
}
}
/*------------------------------------------------*/
void main()
{ uchar idata tt[6]={0x20,0x07,0x06,0x06,0x17,0x25};
uchar flag[9]={0,1,1,1,0,0,0,0,0};
uchar keycode;
while(1)
{ transfer(tt);
keycode=testkey();
obtain(keycode, flag,tt);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -