找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6530|回復(fù): 0
收起左側(cè)

51系列單片機(jī) 鍵盤與點(diǎn)陣 C語(yǔ)言 proteus

[復(fù)制鏈接]
ID:262 發(fā)表于 2014-6-17 15:55 | 顯示全部樓層 |閱讀模式
001imvqdzy6JGyfLYjQf6&690.jpeg 001imvqdzy6JGygipdYf6&690.jpeg
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;

……;……}
001imvqdzy6JGygzzQbd7&amp;690.jpeg
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表