?? mima.c
字號:
#include<at89x51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit EN=P2^0;
sbit RW=P2^1; //液晶讀寫控制引腳
sbit RS=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
bit rightflag; //密碼正確標志
bit set; //設置密碼狀態標志
#define datport P0 //液晶數據口
uchar num=12;
uchar count=-1;
uchar pws[6]={3,6,2,3,3,1}; //原始密碼為362330
uchar pwx[6]; //按下數字存儲區
void shulu();
uchar code table[]={ //取模方式為從左到右,從上到下,縱向8點下高位 16X16
/*請 0 CC7EB */
0x40,0x42,0x4C,0xC4,0x00,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00,
0x00,0x00,0x00,0x7F,0x20,0x10,0xFF,0x0A,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00,
/*輸 1 CCAE4 */
0x44,0xF4,0x4F,0xE4,0x44,0x64,0x90,0x98,0x94,0x93,0x14,0x98,0x08,0xD0,0x10,0x00,
0x04,0x04,0x04,0xFF,0x02,0x02,0xFF,0x4A,0x8A,0x7F,0x00,0x3F,0x80,0xFF,0x00,0x00,
/*入 2 CC8EB */
0x00,0x00,0x00,0x00,0x01,0x83,0x76,0x18,0x60,0x80,0x00,0x00,0x00,0x00,0x00,0x00,
0x40,0x20,0x10,0x08,0x06,0x01,0x00,0x00,0x00,0x00,0x03,0x04,0x18,0x30,0x10,0x00,
/*密 3 CC3DC */
0x00,0x58,0x24,0x04,0xF4,0x04,0x8D,0xB6,0x44,0x34,0xCC,0x94,0x24,0xCC,0x04,0x00,
0x02,0x06,0x02,0x79,0x41,0x41,0x41,0x7D,0x41,0x41,0x41,0x40,0x78,0x00,0x00,0x00,
/*碼 4 CC2EB */
0x02,0x82,0xE2,0x5E,0x42,0xC2,0x00,0x02,0xFA,0x82,0x82,0x82,0xFE,0x80,0x00,0x00,
0x01,0x00,0x7F,0x10,0x10,0x3F,0x00,0x04,0x04,0x04,0x44,0x84,0x40,0x3F,0x00,0x00,
/*正 5 CD5FD */
0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,
0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x00,
/*確 6 CC8B7 */
0x00,0x84,0xE4,0x5C,0x44,0xC4,0x10,0xF8,0x97,0x92,0xF2,0x9A,0x96,0xF2,0x00,0x00,
0x01,0x00,0x3F,0x08,0x88,0x4F,0x30,0x0F,0x04,0x04,0x3F,0x44,0x84,0x7F,0x00,0x00,
/*謝 7 CD0BB */
0x40,0x42,0xCC,0x04,0x00,0xFC,0x56,0x55,0xFC,0x50,0x90,0x10,0xFF,0x10,0x10,0x00,
0x00,0x00,0x3F,0x50,0x29,0x11,0x4D,0x83,0x7F,0x00,0x41,0x80,0x7F,0x00,0x00,0x00,
/*合 8 CBACF */
0x40,0x40,0x20,0x50,0x48,0x44,0x42,0x41,0x42,0x44,0x68,0x50,0x30,0x60,0x20,0x00,
0x00,0x00,0x00,0x7E,0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x7E,0x00,0x00,0x00,0x00,
/*作 9 CD7F7 */
0x80,0x40,0x20,0xF8,0x07,0x22,0x18,0x0C,0xFB,0x48,0x48,0x48,0x68,0x48,0x08,0x00,
0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x04,0x04,0x04,0x04,0x06,0x04,0x00,
/*錯 10 CB4ED */
0x40,0x30,0x2C,0xE7,0x24,0x24,0x40,0x48,0x7F,0x48,0x48,0x7F,0x48,0x48,0x40,0x00,
0x01,0x01,0x01,0xFF,0x41,0x21,0x00,0xFF,0x49,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,
/*誤 11 CCEF3 */
0x40,0x41,0xCE,0x04,0x00,0x40,0x5F,0x51,0x51,0xD1,0x51,0x51,0x5F,0x40,0x00,0x00,
0x00,0x00,0x3F,0x10,0x88,0x42,0x22,0x12,0x0A,0x07,0x0A,0x12,0x22,0xE2,0x42,0x00,
/*重 12 CD6D8 */
0x08,0x08,0x0A,0xEA,0xAA,0xAA,0xAA,0xFF,0xA9,0xA9,0xA9,0xE9,0x08,0x08,0x08,0x00,
0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x4B,0x48,0x40,0x40,0x00,
/*新 13 CD0C2 */
0x20,0x24,0x2C,0x35,0xE6,0x34,0x2C,0x24,0x00,0xFC,0x24,0x24,0xE2,0x22,0x22,0x00,
0x21,0x11,0x4D,0x81,0x7F,0x05,0x59,0x21,0x18,0x07,0x00,0x00,0xFF,0x00,0x00,0x00,
/*原 14 CD4AD */
0x00,0x00,0xFE,0x02,0x02,0xF2,0x52,0x5E,0x56,0x52,0x52,0xF2,0x02,0x02,0x00,0x00,
0xC0,0x30,0x0F,0x40,0x20,0x1B,0x52,0x82,0x7E,0x02,0x0A,0x13,0x70,0x20,0x00,0x00,
/*始 15 CCABC */
0x10,0x90,0x70,0x1F,0x12,0xF0,0x00,0x20,0x70,0x28,0x27,0x22,0x28,0x70,0x20,0x00,
0x40,0x21,0x12,0x0C,0x06,0x09,0x30,0x00,0x7F,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,
/*設 16 CC9E8 */
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00,
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00,
/*置 17 CD6C3 */
0x00,0x20,0x2F,0xA9,0xA9,0xAF,0xE9,0xB9,0xA9,0xAF,0xA9,0xA9,0x2F,0x20,0x00,0x00,
0x80,0x80,0x80,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0x80,0x80,0x80,0x00,
/*成 18 CB3C9 */
0x00,0x00,0xF8,0x48,0x48,0x48,0xC8,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x88,0x08,0x00,
0x40,0x30,0x0F,0x00,0x08,0x50,0x4F,0x20,0x10,0x0B,0x0C,0x12,0x21,0x40,0xF0,0x00,
/*功 19 CB9A6 */
0x00,0x04,0x04,0x04,0xFC,0x04,0x14,0x14,0x10,0x90,0x7F,0x10,0x10,0xF0,0x00,0x00,
0x04,0x0C,0x04,0x04,0x03,0x42,0x22,0x11,0x0C,0x23,0x20,0x60,0x20,0x1F,0x00,0x00,
/*您 20 CC4FA */
0x80,0x40,0x30,0xFC,0x03,0x90,0x68,0x06,0x04,0xF4,0x04,0x24,0x44,0x8C,0x04,0x00,
0x00,0x20,0x38,0x03,0x38,0x40,0x40,0x49,0x52,0x41,0x40,0x70,0x00,0x09,0x30,0x00,
/*的 21 CB5C4 */
0x00,0xF8,0x8C,0x8B,0x88,0xF8,0x40,0x30,0x8F,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,
0x00,0x7F,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x03,0x26,0x40,0x20,0x1F,0x00,0x00,
/*有 22 CD3D0 */
0x00,0x04,0x84,0x44,0xE4,0x34,0x2C,0x27,0x24,0x24,0x24,0xE4,0x04,0x04,0x04,0x00,
0x02,0x01,0x00,0x00,0xFF,0x09,0x09,0x09,0x29,0x49,0xC9,0x7F,0x00,0x00,0x00,0x00,
/*按 23 CB0B4 */
0x10,0x10,0x10,0xFF,0x90,0x50,0x98,0x88,0x88,0xE9,0x8E,0x88,0x88,0x98,0x88,0x00,
0x02,0x42,0x81,0x7F,0x00,0x40,0x40,0x26,0x25,0x18,0x08,0x16,0x31,0x60,0x20,0x00,
/*鍵 24 CBCFC */
0x40,0x30,0xEF,0x28,0x28,0x44,0x64,0xDC,0x10,0x54,0xFF,0x54,0x54,0x7C,0x10,0x00,
0x01,0x01,0x7F,0x21,0x51,0x22,0x14,0x0F,0x14,0x25,0x3F,0x45,0x45,0x45,0x44,0x00,
/*六 25 CC1F9 */
0x10,0x10,0x10,0x10,0x10,0x91,0x12,0x1E,0x94,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x40,0x20,0x10,0x0C,0x03,0x01,0x00,0x00,0x01,0x02,0x0C,0x78,0x30,0x00,0x00,
/*位 26 CCEBB */
0x00,0xC0,0x30,0xEC,0x03,0x2A,0xC8,0x09,0x0A,0x0E,0x08,0xE8,0x48,0x08,0x00,0x00,
0x01,0x00,0x00,0x7F,0x20,0x20,0x20,0x27,0x20,0x30,0x2E,0x21,0x20,0x20,0x20,0x00
};
uchar code tablehf[]={ //16X8
0x80,0xA0,0xE0,0xC0,0xC0,0xE0,0xA0,0x80,0x00,0x02,0x03,0x01,0x01,0x03,0x02,0x00, // -*-
0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00, // -:-
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1E,0x0E,0x00,0x00,0x00, // -,-
0x00,0x00,0x38,0xFC,0xFC,0x38,0x00,0x00,0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00, // -!-
};
void delay(uint z) //延時
{
uint y;
for(;z>0;z--)
for(y=120;y>0;y--);
}
void CheckState() //檢測液晶是否忙
{
uchar dat;
RS=0; //命令
RW=0; //寫
do
{
datport=0x00;
EN=1;
dat=datport; //EN為下降時數據送入
EN=0;
dat=0x80&dat;
}
while(!(dat==0x00));
}
void SendCommond(uchar commond)
{
CheckState();
RS=0;
RW=0;
EN=1;
datport=commond;
EN=0;
}
void SetLine(uchar page) //設置行
{
page=0xb8|page;
SendCommond(page);
}
void SetStartLine(uchar startline) //設置起始行
{
startline=0xc0|startline;
SendCommond(startline);
}
void SetColumn(uchar column) //設置列
{
column=0x3f&column;
column=0x40|column;
SendCommond(column);
}
void WriteByte(uchar dat)
{
RS=1; //數據
RW=0; //寫
EN=1;
datport=dat;
EN=0;
}
void SelectScreen(uchar screen)
{
switch(screen)
{
case 0: //全屏
{
CS1=0;_nop_();_nop_();_nop_();
CS2=0;_nop_();_nop_();_nop_();
} break;
case 1: //左邊屏
{
CS1=0;_nop_();_nop_();_nop_();
CS2=1;_nop_();_nop_();_nop_();
} break;
case 2: //右邊屏
{
CS1=1;_nop_();_nop_();_nop_();
CS2=0;_nop_();_nop_();_nop_();
} break;
}
}
void ClearScreen(uchar screen)
{
uchar i,j;
SelectScreen(screen);
for(i=0;i<8;i++)
{
SetLine(i);
SetColumn(0);
for(j=0;j<64;j++)
{
WriteByte(0x00); //每寫一個數據,列自動加1
}
}
}
void Init()
{
CheckState();
SelectScreen(0);
SendCommond(0x3e); //關液晶顯示
SelectScreen(0);
SendCommond(0x3f); //開液晶顯示
SelectScreen(0);
ClearScreen(0);
SetStartLine(0);
}
void Display(uchar sr,uchar page,uchar column,uchar num) //顯示16X16漢字,SR為選擇屏(左邊還是右邊屏),NUM為第幾個字
{
uchar i;
SelectScreen(sr);
SetLine(page);
SetColumn(column);
for(i=0;i<16;i++) //顯示一個字的上部分
{
WriteByte(table[i+32*num]);
}
SetLine(page+1);
SetColumn(column);
for(i=0;i<16;i++) //顯示一個字的下部分
{
WriteByte(table[i+32*num+16]);
}
}
void Displayhf(uchar sr,uchar page,uchar column,uchar num) //顯示16X8,如字符
{
uchar i;
SelectScreen(sr);
SetLine(page);
SetColumn(column);
for(i=0;i<8;i++)
{
WriteByte(tablehf[i+16*num]);
}
SetLine(page+1);
SetColumn(column);
for(i=0;i<8;i++)
{
WriteByte(tablehf[i+8+16*num]);
}
}
uint keyscan() //按鍵掃描檢測
{
uchar temp;
P3=0xfe;
temp=P3;
temp&=0xf0;
if(temp!=0xf0)
{
delay(5);
temp=P3;
temp&=0xf0;
if(temp!=0xf0)
{
temp=P3;
count++;
switch(temp)
{
case 0xee:
{
num=7;
if(count<6)
{
if(set==1) //設置(修改密碼)鍵按下狀態
pws[count]=7;
else
pwx[count]=7;
Displayhf(1,2,count*8,0); //對應位顯示"*"號
}
} break;
case 0xde:
{
num=8;
if(count<6)
{
if(set==1)
pws[count]=8;
else
pwx[count]=8;
Displayhf(1,2,count*8,0);
}
} break;
case 0xbe:
{
num=9;
if(count<6)
{
if(set==1)
pws[count]=9;
else
pwx[count]=9;
Displayhf(1,2,count*8,0);
}
} break;
case 0x7e: //設置(修改密碼)鍵按下
{
count=-1;
set=1;
ClearScreen(0); //清屏
Display(1,0,0,0); //請
Display(1,0,16,1); //輸
Display(1,0,32,2); //入
Display(1,0,48,14); //原
Display(2,0,64,15); //始
Display(2,0,80,3); //密
Display(2,0,96,4); //碼
Displayhf(2,0,112,1); //":"
} break;
}
while(temp!=0xf0) //按鍵松手檢測
{
temp=P3;
temp&=0xf0;
}
}
}
P3=0xfd;
temp=P3;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -