C语言100题 下载本文

P3=0x01; for(i=0;i<5;i++) {

if(P17==1) P1=tab1[i]; else P1=tab2[i]; P3<<=1;

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

3、设计一60秒倒计时时钟电路,时间到,P3.7输出报警,画出电路原理图并编写程序。 答: #include

sbit P17=P1^7;

unsigned char a[]={0x3f,0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06}; unsigned char i,j,k,m,n; unsigned char count1,count2; void Timer(void) interrupt 1 {

count1++; if(count1==20) { i++; count2++; count1=0; }

if(count2==10) { i=0;

9

count2=0; } if(i==1) { j++; }

if((i==1)&&(j==10)) { j=0; }

if((j==0)&&(i==0)) {

for(k=0;k<20000:k++) { P37=0;

for(m=0;m<100;m++); P37=1;

for(n=0;n<100;n++); }

TH0=(65536-50000)/256;TL0=(65536-50000)%6;} Main() { P37=1; EA=1; ET0=1; TR0=1; TMOD=0X01;

TH0=(65536-50000)/256; TL0=(65536-50000)%6 While(1) { P1=a[i];

10

P30=0;P31=1; For(m=0;m<100;m++); P1=a[j]; P30=1;P31=0; For(n=0;n<100;n++); } }

第六 习题与思考题

1.为什么要消除按键的机械抖动?消除按键的机械抖动的方法有哪几种?原理是什么? 2.说明矩阵式键盘按键按下的识别原理。

3.用89c2051单片机的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉宽随意),画出电路并编出程序。

4.现用89C2051单片机的I/O口去检测开关S1、S2的通断状态,若S1接通,转去执行子程序SUB1;若S2接通,转去执行子程序SUB2;请画出电路连接图,并编制程序(要有消除开关抖动措施)。

5.设计一个键盘显示接口电路,要求用9个键盘(3×3)控制一位LED数码管,9个键盘依次代表数字键1---9,当按下某一数字键,LED数码管就显示这个数字(如按数字键5,LED数码管就显示5),若没有新的数字键按下,数码管显示值不变。请画出硬件控制线路图,编写控制软件。

6.利用89c2051单片机的P1.0-P1.3接四个发光二极管L1-L4,用来指示当前计数的数据;用P1.4-P1.7作为预置数据的输入端,接2个拨动开关K1、K4,用来作加计数和减计数开关。具体的电路原理图如下图所示

7.如图4.14.2所示,用AT89c2051的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线;在数码管上显示每个按键的“0-F”序号。

习题与思考题

1、 用89c2051单片机的P1口,监测某一按键开关,使每按键一次,输出一个正脉冲(脉

宽随意),画出电路并编出程序。 答: #include

11

sbit P3_7=P3^7;

unsigned char count; void delay10ms(void) {

unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }

void main(void) {

while(1) {

if(P3_7= =0) {

delay10ms(); if(P3_7= =0) {

count++;

if(count= =16) {

count=0; }

P1= ~count;

while(P3_7= =0); //等待按键释放 } } } }

2、现用89C2051单片机的I/O口去检测开关S1、S2的通断状态,若S1接通,转去执行子程序SUB1;若S2接通,转去执行子程序SUB2;请画出电路连接图,并编制程序(要有消除开关抖动措施)。 #include Sbit P30=P3^0; Sbit P31=P3^1;

Unsigned a1[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; Unsigned a2[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; void delay10ms(void)

{

unsigned char i,j; for(i=20;i>0;i--) for(j=248;j>0;j--); }

Void sub1(void)

12