1) 鍵盤與點(diǎn)陣
字符輸入與實(shí)現(xiàn)技術(shù)
文本顯示技術(shù)
a) 靜態(tài)—鍵盤與數(shù)碼管、點(diǎn)陣顯示技術(shù)
//行列式按鍵與數(shù)碼管\點(diǎn)陣顯示程序
#include
#define uchar unsigned char
#define uint unsigned int
//unsigned char const doflyyin[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
// 0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char const doflyyin[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char const doflyscan[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char const doflyyang[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0x08,0x03,0x46,0x21,0x06,0x0e};
uchar keyscan(void);
void delayyin(uint i);
void delayyang(uint j);
51系列單片機(jī) <wbr> <wbr> <wbr>鍵盤與點(diǎn)陣 <wbr> <wbr> <wbr>C語(yǔ)言 <wbr>proteus void main()
{
uchar key;
P0=0x00;
P2=0xff;
P3=0xff;
while(1)
{
key=keyscan();
switch(key)
{
case 0x7e:P2=doflyyin[0];//0
P0=doflyscan[0];
P3=doflyyang[0];break;
case 0x7d:P2=doflyyin[1];//1
P0=doflyscan[1];
P3=doflyyang[1];break;
case 0x7b:P2=doflyyin[2];//2
P0=doflyscan[2];
P3=doflyyang[2]; break;
case 0x77:P2=doflyyin[3];//3
P0=doflyscan[3];
P3=doflyyang[3];break;
case 0xbe:P2=doflyyin[4];//4
P0=doflyscan[4];
P3=doflyyang[4];break;
case 0xbd:P2=doflyyin[5];//5
P0=doflyscan[5];
P3=doflyyang[5];break;
case 0xbb:P2=doflyyin[6];//6
P0=doflyscan[6];
P3=doflyyang[6];break;
case 0xb7:P2=doflyyin[7];//7
P0=doflyscan[7];
P3=doflyyang[7];break;
case 0xde:P2=doflyyin[8];//8
P0=doflyscan[8];
P3=doflyyang[8];break;
case 0xdd:P2=doflyyin[9];//9
P0=doflyscan[9];
P3=doflyyang[9];break;
case 0xdb:P2=doflyyin[10];//a
P0=doflyscan[10];
P3=doflyyang[10];break;
case 0xd7:P2=doflyyin[11];//b
P0=doflyscan[11];
P3=doflyyang[11];break;
case 0xee:P2=doflyyin[12];//c
P0=doflyscan[12];
P3=doflyyang[12];break;
case 0xed:P2=doflyyin[13];//d
P0=doflyscan[13];
P3=doflyyang[13];break;
case 0xeb:P2=doflyyin[14];//e
P0=doflyscan[14];
P3=doflyyang[14];break;
case 0xe7:P2=doflyyin[15];//f
P0=doflyscan[15];
P3=doflyyang[15];break;
}
}
}
uchar keyscan(void)
{
uchar cord_h,cord_l;
P1=0x0f;
cord_h=P1&0x0f;
if(cord_h!=0x0f)
{
delayyin(100);
delayyang(100);
P1=0x0f;
cord_h=P1&0x0f;
if(cord_h!=0x0f)
{
cord_h=P1&0x0f;
P1=cord_h|0xf0;
cord_l=P1&0xf0;
return(cord_h+cord_l);
}
}
return(0xff);
}
void delayyin(uint i)
{
while(i--);
}
void delayyang(uint j)
{
while(j--);
}
b) 帶有掃描方法(延時(shí)顯示技術(shù)),就可以點(diǎn)陣顯示字符。動(dòng)態(tài)—鍵盤與數(shù)碼管、點(diǎn)陣顯示技術(shù)
//行列式按鍵掃描與數(shù)碼管\點(diǎn)陣顯示程序
#include
#define uchar unsigned char
#define uint unsigned int
//unsigned char const doflyyin[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
// 0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char const doflyyin[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char const doflyscan[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char const doflyyang[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0x08,0x03,0x46,0x21,0x06,0x0e};
uchar keyscan(void);
void delayyin(uint i);
void delayyang(uint j);
void main()
{
uchar key;
P0=0x00;
P2=0xff;
P3=0xff;
while(1)
{
key=keyscan();
switch(key)
{
case 0x7e:P2=doflyyin[0];//0
delayyin(200);delayyin(200);
P2=doflyyin[1];
delayyin(200);delayyin(200);
P2=doflyyin[2];
delayyin(200);delayyin(200);
P2=doflyyin[3];
delayyin(200);delayyin(200);
P2=doflyyin[4];
delayyin(200);delayyin(200);
P2=doflyyin[5];
delayyin(200); delayyin(200);
P2=doflyyin[6];
delayyin(200);delayyin(200);
P2=doflyyin[7];
delayyin(200);delayyin(200);
P2=doflyyin[8];
delayyin(200); delayyin(200);
P0=doflyscan[0];
P3=doflyyang[0];break;
case 0x7d:P2=doflyyin[1];//1
delayyin(100);
P0=doflyscan[1];
P3=doflyyang[1];break;
case 0x7b:P2=doflyyin[2];//2
delayyin(100);
P0=doflyscan[2];
P3=doflyyang[2]; break;
case 0x77:P2=doflyyin[3];//3
delayyin(100);
P0=doflyscan[3];
P3=doflyyang[3];break;
case 0xbe:P2=doflyyin[4];//4
delayyin(100);
P0=doflyscan[4];
P3=doflyyang[4];break;
case 0xbd:P2=doflyyin[5];//5
delayyin(100);
P0=doflyscan[5];
P3=doflyyang[5];break;
case 0xbb:P2=doflyyin[6];//6
delayyin(100);
P0=doflyscan[6];
P3=doflyyang[6];break;
case 0xb7:P2=doflyyin[7];//7
P0=doflyscan[7];
P3=doflyyang[7];break;
case 0xde:P2=doflyyin[8];//8
P0=doflyscan[8];
P3=doflyyang[8];break;
case 0xdd:P2=doflyyin[9];//9
P0=doflyscan[9];
P3=doflyyang[9];break;
case 0xdb:P2=doflyyin[10];//a
P0=doflyscan[10];
P3=doflyyang[10];break;
case 0xd7:P2=doflyyin[11];//b
P0=doflyscan[11];
P3=doflyyang[11];break;
case 0xee:P2=doflyyin[12];//c
P0=doflyscan[12];
P3=doflyyang[12];break;
case 0xed:P2=doflyyin[13];//d
P0=doflyscan[13];
P3=doflyyang[13];break;
case 0xeb:P2=doflyyin[14];//e
P0=doflyscan[14];
P3=doflyyang[14];break;
case 0xe7:P2=doflyyin[15];//f
P0=doflyscan[15];
P3=doflyyang[15];break;
}
}
}
鍵盤—點(diǎn)陣—數(shù)碼管
軟件延時(shí)與硬件時(shí)鐘頻率之間的協(xié)調(diào)—關(guān)系到顯示狀態(tài)與形式的差異
//行列式按鍵掃描與數(shù)碼管\點(diǎn)陣顯示程序
#include
#define uchar unsigned char
#define uint unsigned int
//unsigned char const doflyyin[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
// 0x77,0x7c,0x39,0x5e,0x79,0x71};// 數(shù)碼管數(shù)字0~f顯示 ,共陰
unsigned char const doflyyin[]={0xff,0xff,0xc3,0xbd,0xbd,0xc3,0xff,0xff,//0-點(diǎn)陣顯示
0x00,0x00,0x01,0x7f,0x21,0x00,0x00,0x00,//1
0x00,0x39,0x45,0x45,0x45,0x27,0x00,0x00,//2
0x00,0x00,0x36,0x49,0x49,0x49,0x22,0x00, //3
0x00,0x04,0x7f,0x24,0x14,0x0c,0x00,0x00, //4
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00}; //9
unsigned char const doflyscan[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
0x40,0x20,0x10,0x08,0x04,0x02,0x01};//點(diǎn)陣端口掃描陽(yáng)極管
unsigned char const doflyyang[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0x08,0x03,0x46,0x21,0x06,0x0e}; //數(shù)碼管數(shù)字0~f顯示 ,共陽(yáng)
uchar keyscan(void);
void delayyin(uint i);
void delayyang(uint j);
void main()
{
uchar key;
P0=0x00;
P2=0xff;
P3=0xff;
while(1)
{
key=keyscan();
switch(key)
{
case 0x7e:
P0=doflyscan[0];P2=~doflyyin[0];delayyin(20);//0
P0=doflyscan[1];P2=~doflyyin[1];delayyin(20);
P0=doflyscan[2];P2=~doflyyin[2];delayyin(20);
P0=doflyscan[3];P2=~doflyyin[3];delayyin(20);
P0=doflyscan[4];P2=~doflyyin[4];delayyin(20);
P0=doflyscan[5];P2=~doflyyin[5];delayyin(20);
P0=doflyscan[6];P2=~doflyyin[6];delayyin(20);
P0=doflyscan[7];P2=~doflyyin[7];delayyin(20);
P3=doflyyang[0];break;
case 0x7d:
P0=doflyscan[0];P2=doflyyin[8];delayyin(20);//1
P0=doflyscan[1];P2=doflyyin[9];delayyin(20);//1
P0=doflyscan[2];P2=doflyyin[10];delayyin(20);//1
P0=doflyscan[3];P2=doflyyin[11];delayyin(20);//1
P0=doflyscan[4];P2=doflyyin[12];delayyin(20);//1
P0=doflyscan[5];P2=doflyyin[13];delayyin(20);//1
P0=doflyscan[6];P2=doflyyin[14];delayyin(20);//1
P0=doflyscan[7];P2=doflyyin[15];delayyin(20);//1
P3=doflyyang[1];break;
case 0x7b:
P0=doflyscan[0];P2=doflyyin[16];delayyin(20);//2
P0=doflyscan[1];P2=doflyyin[17];delayyin(20);//2
P0=doflyscan[2];P2=doflyyin[18];delayyin(20);//2
P0=doflyscan[3];P2=doflyyin[19];delayyin(20);//2
P0=doflyscan[4];P2=doflyyin[20];delayyin(20);//2
P0=doflyscan[5];P2=doflyyin[21];delayyin(20);//2
P0=doflyscan[6];P2=doflyyin[22];delayyin(20);//2
P0=doflyscan[7];P2=doflyyin[23];delayyin(20);//2
P3=doflyyang[2]; break;
case 0x77:
P0=doflyscan[0];P2=doflyyin[24];delayyin(20);//3
P0=doflyscan[1];P2=doflyyin[25];delayyin(20);
P0=doflyscan[2];P2=doflyyin[26];delayyin(20);
P0=doflyscan[3];P2=doflyyin[27];delayyin(20);
P0=doflyscan[4];P2=doflyyin[28];delayyin(20);
P0=doflyscan[5];P2=doflyyin[29];delayyin(20);
P0=doflyscan[6];P2=doflyyin[30];delayyin(20);
P0=doflyscan[7];P2=doflyyin[31];delayyin(20);//3
P3=doflyyang[3];break;
case 0xbe:
P0=doflyscan[0];P2=doflyyin[32];delayyin(20);//4
P0=doflyscan[1];P2=doflyyin[33];delayyin(20);
P0=doflyscan[2];P2=doflyyin[34];delayyin(20);
P0=doflyscan[3];P2=doflyyin[35];delayyin(20);
P0=doflyscan[4];P2=doflyyin[36];delayyin(20);
P0=doflyscan[5];P2=doflyyin[37];delayyin(20);
P0=doflyscan[6];P2=doflyyin[38];delayyin(20);
P0=doflyscan[7];P2=doflyyin[39];delayyin(20);//4
P3=doflyyang[4];break;
……;……}
|