单片机课后习题 - 图文(6)

2019-01-12 18:59

LJMP START

KEY3:MOV P3,#0B0H

LJMP START

KEY4:MOV P3,#99H

LJMP START

KEY5:MOV P3,#92H

LJMP START

KEY6:MOV P3,#82H

LJMP START

KEY7:MOV P3,#0F8H

LJMP START

KEY8:MOV P3,#80H

LJMP START

KEY9:MOV P3,#90H

LJMP START

KEY10:MOV P3,#88H

LJMP START

KEY11:MOV P3,#83H

LJMP START

KEY12:MOV P3,#0C6H

LJMP START

KEY13: MOV P3,#0A1H

LJMP START

KEY14:MOV P3,#86H

LJMP START

KEY15:MOV P3,#8EH

C51程序:

#include

LJMP START END

#include sbit H0=P1^0; sbit H1=P1^1; sbit H2=P1^2; sbit H3=P1^3; sbit L0=P1^4; sbit L1=P1^5; sbit L2=P1^6; sbit L3=P1^7; void delay_15ms(); void delay_1us(); unsigned char key(); void KEY0(); void KEY1(); ……

void KEY15(); void main() {

unsigned char K_CODE; while(1); {

K_CODE=key(); switch(K_CODE)

{

case 0: KEY0();break; case 1: KEY1();break; ……

case 15: KEY15();break; default: break; } }

}

unsigned char key( ) {

unsigned char KEY=0xFF,col=0,temp, i; P1=0x0F;

//将所有列清零,行置1

temp=0xEF; delay_1μs( );

i=P1;

//读回P1口数值

if ((i & 0x0F)!=0x0F) //如果条件成立,则有按键按下 {

//延时15ms去抖动

delay_15ms( );

i=P1;

if((i & 0x0F)!=0x0F) //再次判断是否有键按下 {

while(col<4) //col为列号 {

P1=temp|0x0F; delay_1μs( ); i=P1;

switch(i & 0x0F) {

case 0x0E: {

KEY=col;

}

do{i=P1;} //重新读回P1口数值,等待按键释放

while((i & 0x0F)!=0x0F); delay_15ms( ); col=0xFE;

//延时15ms去抖动

break;

case 0x0D:

{

KEY=4+col; //KEY=1×4+col

do{i=P1;}

//重新读回P1口数值,等待按键释放

while((i & 0x0F)!=0x0F); delay_15ms( ); col=0xFE; }

//延时15ms去抖动

break;

case 0x0B:

{

KEY=8+col; //KEY=2×4+col

}

break;

do{i=P1;}

//重新读回P1口数值,等待按键释放

while((i & 0x0F)!=0x0F); delay_15ms( ); col=0xFE;

//延时15ms去抖动

case 0x07:

{

KEY=12+col; //KEY=3×4+col

do{i=P1;} //重新读回P1口数值,等待按键释放

while((i & 0x0F)!=0x0F); delay_15ms( ); col=0xFE;

//延时15ms去抖动

}

break;

default: }

col++;

temp =_crol_(temp,1); //将temp中数值左移1位;

break;

}

}

}

}

return(KEY);

void delay_15ms( ) //略 { }

void delay_1μs( ) //略 { }

void KEY0( ) //按下K0键应执行的任务函数 {P3=0XC0} void KEY1( ) { P3=0XF9 }

…… //省略了KEY2()等函数的定义 void KEY15( ) { P3=0X8E }

11-11 简述LED数码管动态显示和静态显示的驱动原理,两种方法各有什么特点? 静态扫描法需要用一组I/O口驱动一位LED显示,若显示的内容不变,则I/O口输出的数值就要稳定不变。特点是:各位数码管可以同时显示,显示亮度大,不闪烁。单片机送出显示段码后,可以处理其他工作,系统的运行效率高。缺点在于数码管占用了太多I/O口。所以静态显示法适合于显示位数少,或者软件负担重而无法承担动态扫描显示任务的场合。

动态扫描法的原理:多个数码管共用一个数据口,每一个轮流选通工作,利用了人眼的视觉惰性,使每一个数码管看上去都是常亮的。

特点:动态显示法简化了电路,节约了I/O口线,但是每隔一定时间就要重新发送出数码管的段码值,占用了单片机的执行时间。

11-12如图11-48所示,STC12C5A60S2单片机驱动4个7段数码管,分别显示千位、百位、十位、个位。请编写程序,使这四个数码管显示数值5678。


单片机课后习题 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:ArcSde的两种连接方式、区别和常见问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: