独立键盘动态显示接口电路.docx

上传人:b****4 文档编号:3909067 上传时间:2022-11-26 格式:DOCX 页数:24 大小:168.40KB
下载 相关 举报
独立键盘动态显示接口电路.docx_第1页
第1页 / 共24页
独立键盘动态显示接口电路.docx_第2页
第2页 / 共24页
独立键盘动态显示接口电路.docx_第3页
第3页 / 共24页
独立键盘动态显示接口电路.docx_第4页
第4页 / 共24页
独立键盘动态显示接口电路.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

独立键盘动态显示接口电路.docx

《独立键盘动态显示接口电路.docx》由会员分享,可在线阅读,更多相关《独立键盘动态显示接口电路.docx(24页珍藏版)》请在冰豆网上搜索。

独立键盘动态显示接口电路.docx

独立键盘动态显示接口电路

键盘显示电路图与程序

 

 

 

 

 

 

 

 

程序174595_4位LED

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodeledk[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbitDS=P1^0;//串行数据输入

sbitSHCP=P1^1;//移位时钟脉冲

sbitSTCP=P1^2;//输出锁存器控制脉冲

voiddelay(unsignedintn)

{unsignedinti,j;

for(i=0;i

for(j=0;j

voidshift(unsignedchard)

{unsignedcharj=0;

while(j<8)

{if((d&0x80)!

=0)DS=1;

elseDS=0;

SHCP=0;_nop_();SHCP=1;

d<<=1;j++;}}

voidOUT_595(void)

{STCP=0;_nop_();

STCP=1;_nop_();//上升沿将数据送到输出锁存器

STCP=0;}

main()

{uchari,mask=0xef;

while

(1)

{for(i=0;i<10;i++)

{shift(ledk[i]);

OUT_595();

P1=(mask&0xf0)|(P1&0x0f);

mask=_crol_(mask,1);

if(mask==0xfe)mask=0xef;

delay(200);}

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序274595_8位LED

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

unsignedcharcodeledk[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbitSDATA=P1^0;//串行数据输入

sbitSCLK=P1^1;//移位时钟脉冲

sbitRCK=P1^2;//输出锁存器控制脉冲

uchartemp;

voiddelay(unsignedintn)

{unsignedinti,j;

for(i=0;i

for(j=0;j

voidshift(unsignedchard)

{unsignedcharj=0;

while(j<8)

{if((d&0x80)!

=0)SDATA=1;

elseSDATA=0;

SCLK=0;_nop_();SCLK=1;

d<<=1;j++;}}

voidOUT_595(void)

{RCK=0;_nop_();

RCK=1;_nop_();//上升沿将数据送到输出锁存器

RCK=0;}

main()

{uchari,mask=0xfe;

while

(1)

{for(i=0;i<10;i++)

{shift(ledk[i]);

OUT_595();

P2=mask;

mask=_crol_(mask,1);

delay(200);}

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序3LCD

#include

#include

voidmain(void)

{unsignedchari,a[5]={5,4,3,2,1};

lcd_init();

while

(1){wr_comd(0x80);

for(i=0;i<5;i++)wr_data(0x30+a[i]);

wr_comd(0x8E);wr_data(0x37);wr_data(0x38);

wr_comd(0xC0);wr_data(0x41);wr_data(0x42);

wr_comd(0xC8);wr_data(0x43);wr_data(0x44);

}

}

程序3.1LCD头文件

voiddelay_ms(unsignedintt)

{unsignedintj;

for(;t>0;t--)

for(j=125;j>0;j--){;}}

voidwr_comd(unsignedcharx)

{P0=x;rs=0;rw=0;e=1;delay_ms

(1);e=0;}

voidwr_data(unsignedcharx)

{P0=x;rs=1;rw=0;e=1;delay_ms

(1);e=0;}

voidlcd_init(void)

{wr_comd(0x01);delay_ms(5);

wr_comd(0x38);delay_ms(5);wr_comd(0x38);delay_ms(5);

wr_comd(0x06);delay_ms(5);wr_comd(0x0c);}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序4按键功能1

#include

#include"LCD1602.h"

unsignedintCount,Count1;

unsignedchara[5],b[5];

unsignedchardispbuf[6],key,dispbuf1[6];

sbitP10=P1^0;

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

//本程序与按键直接输入_共阴程序不同之处是--本程序不允许两个或以上键按下,否则,不承认

voidhextodec(unsignedintt)

{a[0]=(t/10000)%10+'0';//取得整数值到数组,转成ASCII码

a[1]=(t/1000)%10+'0';

a[2]=(t/100)%10+'0';

a[3]=(t/10)%10+'0';

a[4]=(t/1)%10+'0';

}

voidhextodec1(unsignedintt)

{b[0]=(t/10000)%10+'0';//取得整数值到数组,转成ASCII码

b[1]=(t/1000)%10+'0';

b[2]=(t/100)%10+'0';

b[3]=(t/10)%10+'0';

b[4]=(t/1)%10+'0';

}

voidDelay1ms(unsignedintcount)

{unsignedinti,j;

for(i=0;i

for(j=0;j<120;j++);}

unsignedcharget_key(void)

{unsignedcharkey_code;

unsignedcharmask=0x01,low_num=0,i;

for(i=0;i<4;i++)

{if(!

(mask&P1))low_num++;

mask=mask<<1;}//mask,low_num都必须设为局部变量,不能是全局变量

hextodec1(low_num);//显示按键按下数

if(low_num==1){if(P10==0)key_code=0;

elseif(P11==0)key_code=1;

elseif(P12==0)key_code=2;

elseif(P13==0)key_code=3;}

elsekey_code=0xff;

return(key_code);}

main()

{unsignedinti;

LCD_Initial();

GotoXY(2,0);

Print("1602LCDDisp");

EA=1;EX0=1;IT0=1,EX1=1;IT1=1;

TMOD=0x05;

while

(1)

{key=get_key();

hextodec(key);

for(i=0;i<5;i++)dispbuf[i]=a[i];

dispbuf[5]='\0';

GotoXY(1,1);

Print(&dispbuf[0]);

for(i=0;i<5;i++)dispbuf1[i]=b[i];

dispbuf1[5]='\0';

GotoXY(10,1);

Print(&dispbuf1[0]);

Delay1ms(100);}

程序4.1LCD1602头文件

#ifndefLCD_CHAR_1602_2005_4_9

#defineLCD_CHAR_1602_2005_4_9

#include

sbitLcdRs=P2^0;//口定义

sbitLcdRw=P2^1;

sbitLcdEn=P2^2;

sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口

unsignedcharLCD_Wait(void)//内部等待函数

{LcdRs=0;

LcdRw=1;_nop_();

LcdEn=1;_nop_();

LcdEn=0;

returnDBPort;

}

//向LCD写入命令或数据

#defineLCD_COMMAND0//Command

#defineLCD_DATA1//Data

#defineLCD_CLEAR_SCREEN0x01//清屏

#defineLCD_HOMING0x02//光标返回原点

voidLCD_Write(bitstyle,unsignedcharinput)

{

LcdEn=0;

LcdRs=style;

LcdRw=0;_nop_();

DBPort=input;_nop_();//注意顺序

LcdEn=1;_nop_();//注意顺序

LcdEn=0;_nop_();

LCD_Wait();

}

//设置显示模式

#defineLCD_SHOW0x04//显示开

#defineLCD_HIDE0x00//显示关

#defineLCD_CURSOR0x02//显示光标

#defineLCD_NO_CURSOR0x00//无光标

#defineLCD_FLASH0x01//光标闪动

#defineLCD_NO_FLASH0x00//光标不闪动

voidLCD_SetDisplay(unsignedcharDisplayMode)

{

LCD_Write(LCD_COMMAND,0x08|DisplayMode);

}

//设置输入模式************************************************************

#defineLCD_AC_UP0x02

#defineLCD_AC_DOWN0x00//default

#defineLCD_MOVE0x01//画面可平移

#defineLCD_NO_MOVE0x00//default

voidLCD_SetInput(unsignedcharInputMode)

{

LCD_Write(LCD_COMMAND,0x04|InputMode);

}

//初始化LCD

voidLCD_Initial()

{

LcdEn=0;

LCD_Write(LCD_COMMAND,0x38);//8位数据端口,2行显示,5*7点阵

LCD_Write(LCD_COMMAND,0x38);

LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);//开启显示,无光标

LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);//清屏

LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);//AC递增,画面不动

}

//*******

voidGotoXY(unsignedcharx,unsignedchary)

{

if(y==0)

LCD_Write(LCD_COMMAND,0x80|x);

if(y==1)

LCD_Write(LCD_COMMAND,0x80|(x-0x40));

}

voidPrint(unsignedchar*str)

{

while(*str!

='\0')

{

LCD_Write(LCD_DATA,*str);

str++;

}

}

#endif

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序5按键直接输入共阴

#include

#include

unsignedcharlow_num,ledk[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

sbitP10=P1^0;

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

unsignedcharget_key(void)

{unsignedcharkey_code;

if(P10==0)key_code=0;

elseif(P11==0)key_code=1;

elseif(P12==0)key_code=2;

elseif(P13==0)key_code=3;

elsekey_code=0xff;//当没有按键按下

return(key_code);}

voidkey_func(key)

{switch(key)

{case0:

P2=ledk[0];break;

case1:

P2=ledk[1];break;

case2:

P2=ledk[2];break;

case3:

P2=ledk[3];break;

default:

P2=ledk[10];break;}//当没有按键按下,不显示

}

voidmain(void)

{unsignedcharkey;

while

(1)

{key=get_key();

key_func(key);

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序6按键_74165

#include

#include

sbitsh_ld=P1^0;sbitclk=P1^1;sbitin=P1^2;

unsignedchardisp[8],xx;

voiddelay(unsignedintn)

{unsignedinti;

for(i=0;i

;}

hextobin(xx)

{disp[0]=xx/128;

disp[1]=(xx%128)/64;

disp[2]=(xx%64)/32;

disp[3]=(xx%32)/16;

disp[4]=(xx%16)/8;

disp[5]=(xx%8)/4;

disp[6]=(xx%4)/2;

disp[7]=xx%2;}

unsignedcharshift165()

{unsignedcharj=0,d=0;

sh_ld=1;delay

(2);sh_ld=0;delay

(2);sh_ld=1;

while(j<8)

{if(in==1)d=d*2+1;

elsed=d*2;

clk=0;clk=1;

j++;}

returnd;}

voidmain(void)

{unsignedchari;

lcd_init();

while

(1)

{xx=shift165();

hextobin(xx);

wr_comd(0xc4);

for(i=0;i<8;i++)wr_data(0x30+disp[i]);

delay(500);

}

}

程序6.1LCD头文件

sbite=P2^2;sbitrs=P2^0;sbitrw=P2^1;

voiddelay_ms(unsignedintt)

{unsignedintj;

for(;t>0;t--)

for(j=125;j>0;j--){;}}

voidwr_comd(unsignedcharx)

{P0=x;rs=0;rw=0;e=1;delay_ms

(1);e=0;}

voidwr_data(unsignedcharx)

{P0=x;rs=1;rw=0;e=1;delay_ms

(1);e=0;}

voidlcd_init(void)

{wr_comd(0x01);delay_ms(5);

wr_comd(0x38);delay_ms(5);wr_comd(0x38);delay_ms(5);

wr_comd(0x06);delay_ms(5);wr_comd(0x0c);}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序7点阵

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

//unsignedcharcodea[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

voiddelay(unsignedintn)

{unsignedinti,j;

for(i=0;i

for(j=0;j

main()

{unsignedinti,mask=0xfe,mask1=0x01;

while

(1)

{for(i=0;i<8;i++)

{P1=0XFF;P2=mask;

mask=_crol_(mask,1);

delay(200);}

for(i=0;i<8;i++)

{P2=0;P1=mask1;

mask1=_crol_(mask1,1);

delay(200);}

}

}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

程序8点阵_74595

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitSDATA=P1^0;//串行数据输入

sbitSCLK=P1^1;//移位时钟脉冲

sbitRCK=P1^2;//输出锁存器控制脉冲

voiddelay(unsignedintn)

{unsignedinti,j;

for(i=0;i

for(j=0;j

voidshift(unsignedchard)

{unsignedcharj=0;

while(j<8)

{if((d&0x80)!

=0)SDATA=1;

elseSDATA=0;

SCLK=0;_nop_();SCLK=1;

d<<=1;j++;}}

voidOUT_595(void)

{RCK=0;_nop_();

RCK=1;_nop_();//上升沿将数据送到输出锁存器

RCK=0;}

main()

{uchari,mask=0xfe,mask1=0x01;

while

(1)

{for(i=0;i<8;i++)

{shift(0xff);

OUT_595();

P2=mask;

mask=_crol_(mask,1);

delay(100);}

for(i=0;i<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1