技能抽考试题
试题3.21 按键控制彩灯软件开发
一、任务
在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下模拟彩灯,开发板从左至右4个按键分别为S1-S4,从上至下8个灯为L1-L8,按下S1键8只LED小灯以1HZ频率闪烁,按下S2键8只灯奇偶交替点亮,间隔0.5S,按下S3键,L1-L4与L5-L8灯交替点亮,间隔0.5s,按下S4键熄灭所有灯。
试题3.22 计数器软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下模拟计数器功能,开发板4个按键从左至右分别为S1-S4,开发板上电复位后显示0,按下S3显示数据加1,按下S4数据显示减1,当计数小于0时显示0,大于9时,显示9。
#include
sbit speak=P1^6;
unsigned char seg_dm [10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char bit_line[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char data_display[5];
int dat_count=0;
void delay(unsigned char time)
{
unsigned char i,j;
for(i=0;i{for(j=0;j<120;j++){}}}void data_change(void){data_display[0]=dat_count%10;}void INT0_init(void){IT0=1;EA=1;EX0=1;}void INT1_init(void){IT1=1;EA=1;EX1=1;}void display(unsigned char dat,unsigned char bit_code){P2=0xff;P0=seg_dm[dat];P2=bit_code;delay(5);}main(){unsigned char i;INT0_init();INT1_init();while(1){data_change();for(i=0;i<1;i++)display(data_display[i],bit_line[i]);}}void Init0() interrupt 0 using 0{EX0=0;if(dat_count<9){dat_count++;speak=1;}else{dat_count=9;speak=0;}EX0=1;}void Init1()interrupt 2 using 1{EX1=0;if(dat_count>0){dat_count--;speak=1;}else{dat_count=0;speak=0;}EX1=1;}试题3.23 按键控制组合灯软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。#includesbit LED1=P1^0;sbit LED2=P1^1;sbit S1=P3^0;sbit S2=P3^1;sbit S3=P3^2;sbit S4=P3^3;unsigned char key;void key1();void key2();void key3();void key4();void delay(unsigned char x){int i,j;for(i=0;ifor(j=0;j<120;j++);}void main(){while(1){if(P3!=0xff){delay(10);if(P3!=0xff){key=~P3;while(P3!=0xff);}}switch(key){case 0x01:key1();key=0xff;break;case 0x02:key2();key=0xff;break;case 0x04:key3();break;case 0x08:key4();break;}}}void key1(){LED1=!LED1;}void key2(){LED2=!LED2;}void key3(){LED1=0;LED2=0;}void key4(){LED1=1;LED2=1;}试题3.24计数器软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现如下功能:对外部的方波信息进行0~99循环计数,每来一个脉冲计数加1,并将计数结果显示在数码管上。试题3.25 小型电子产品软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,单片机开发板上从左至右4个按键分别为S1-S4,按下S1从单片机第1个引脚上输出频率为1KHz的方波,再按下S1则停止输出方波;方波频率误差小于2%。试题3.26 秒表软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序如下功能,开发板上4键从左至右为S1-S4,上电后,开始时显示“00”;利用S1按键后启动计时;S2按键后停止计时;S3按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。试题3.27 倒计时秒表软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,使秒表在上电/复位后,具有:开始时显示“99”并开始倒计时,当计时到0S时,数码管显示“00”,同时蜂鸣器报警长鸣,倒计时误差小于0.5秒。#includeunsigned char duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];unsigned char bit_array[2]={0xfe,0xfd};unsigned char seconds=99,count;sbit speak=P1^6;void delay(unsigned int time){int i,j;for(i=0;ifor(j=0;j<120;j++);}void T0_init(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;}void int_init(void){EA=1;ET0=1;}void dat_change(void){dat_display[1]=seconds/10;dat_display[0]=seconds%10; }void display(){P2=0xff;P2=~0x01;P0=duanma[seconds%10];delay(2);P2=~0x02;P0=duanma[seconds/10];delay(2);}void seconds_01(void){if(count==10){count=0;seconds--;}}void seconds_99(void){if(seconds==0){TR0=0;}}void main(){T0_init();int_init();while(1){seconds_01();seconds_99();dat_change();if(seconds==0){P2=0xff;delay(4000);speak=0;delay(3000);speak=1;}display();}}void time_t0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;count++;}试题3.28 游客流量计数器设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现游客流量计数器功能,要求如下:用数码管理显示3数组2位数,分别表示进入人数、出去人数、滞留人数,当按下S1键进入人数加,S2键按下出去人加1,同时出入人数有变化对应的滞留人数也应更新,数值显示结果要与实际应用相结合。试题3.29单片机与PC机通信软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现在单片机上以9600的波特率循环向串口发送字符’0’~’9’,并利用USB转232串口线和电脑串口调试助手软件,在电脑上显示接收数据。试题3.30 单片机与PC机通信软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现单片机接收电脑串口发送的数字(0~9),并开发板上用一位数码管显示当前接收到的数据,波特率为9600。试题3.31 多种特效流彩灯设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,利用P1口的8个LED 灯,编写程序实现3种特效的彩灯,采灯效果分别为:LED单灯流水左移、LED单灯流水右移、LED从左至右逐个点亮,3种特效循环循环切换。试题3.32 按键发音程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,利用2个按键S1、S2,在开发板上编写程序实现如下功能,当按下S1、S2时蜂鸣器发出“哆”、“唻”的声音。试题3.33 温度计程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读温度函数,编写程序在数码管上显示实时温度,当温度大于35度时,开启蜂鸣器报警(长响)。试题3.34 时钟程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为整点时,开启蜂鸣器响3S。试题3.35 简易计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现简易计算器功能,具体功能如下:利用开发板上的矩阵键盘的2个按键实现0~99的加减计数,当按下1号键时计数值加1,计数值为99时加操作无效;按下2号键时计数值减1,计数值为0时减操作无效;计数结果显示在数码管上。试题3.36 简易闹钟设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为12:30:00时,LED发光二极管闪烁5S,闪烁频率2HZ。。试题3.37 啤酒生产计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计一个啤酒生产计数器,具体要求如下:利用实验板平台,通过P3.4检测并计数,计数时啤酒检测信号可以通过P3.4对应的按键模拟,每计一瓶显示加1,当一箱12瓶满时,蜂鸣器响3S,当再次按键时重新循环计数。#include #define uchar unsigned char#define uint unsigned intuint BoxNum=0; //??êyuchar num=0; //??êysbit led=P1^0;//1a±¨?ˉsbit bell=P1^6; //éù±¨?ˉ//sbit key=P3^4;void delay(unsigned char t);void Sounder();void Display();uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void main(){EA=1;ET0=1;ET1=1; //?aT0?¢T1?D??PT0=1;TMOD=0x26;//0010 0110 T1??ê±·?ê?2£?T0??êy·?ê?£?·?ê?2TH0=255;TL0=255;TH1=0x06;TL1=0x06;//?¨ê±250usTR1=1;TR0=1;//???ˉT1?¢T0while(1){if(num==12)Sounder();}}void Display(){P2=0xdf;//′ó×ó±??aê?×?????P0=table[BoxNum/1000]; // ?§??delay(1);P2=0xff;P2=0xef;P0=table[(BoxNum%1000)/100];//°ù??delay(1);P2=0xff;P2=0xf7;P0=table[((BoxNum%1000)%100)/10]; //ê???delay(1);P2=0xff;P2=0xfb;P0=table[((BoxNum%1000)%100)%10]; //????delay(1);P2=0xff;P2=0xfd;P0=table[num/10]; // ê???delay(1);P2=0xff;P2=0xfe;P0=table[num%10];//????delay(1);P2=0xff;}void delay(unsigned char t){unsigned char i;while(t--){for(i=0;i<125;++i); //?óê±??1ms}}void Sounder(){ uchar i;for(i=0;i<30;i++){bell=~bell;led=~led;delay(20);}}void INT_T0(void) interrupt 1{if(num<12){num++;}else{BoxNum++;num=1;}}void INT_T1(void) interrupt 3//±ü?aêy??1üéá??{static uchar i;i++;if(i==40){Display();i=0;} //10msμ÷ó?ò?′???ê??üD?3ìDò}试题3.38 投票计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个投票计数器,用2组2数码管分别实时显示A、B的投票票数,LED发光二极管D1、D2分别指示A、B的投票结果,S1~S3分别为A投票键、B投票键、票数比较键。具体功能如下:当按下S1键,A的票数加1;当按下S2键,B的票数加1;当按下S3键票数多的指示灯点亮,同时AB票数清0,当票数相等时S3键操作无效,且AB的投票数值不超过99试题3.39 按键时间间隔记录仪程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个反映时间测试仪,具体功能如下:测试连续2次按键的时间,按下第1次键时,发光二极管D1点视,按下第2次按键时间D2点亮,同时用数码管显示前后两次的时间间隔,精确到0.1S。#includeunsigned char code led_seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];unsigned char bit_array[2]={0xfe,0xfd};unsigned char seconds=0,count;unsigned char cs=0;void delay(unsigned int z){while(z--);}void T0_init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=0;}void int_init(){EA=1;ET0=1;}void dat_change(void){dat_display[1]=seconds/10;dat_display[0]=seconds%10;}void display_1bit(unsigned char seg_code,unsigned char bit_code) {P2=0xff;P0=seg_code;P2=bit_code;delay(200);}void display(){unsigned char i;for(i=0;i<2;i++)display_1bit(led_seg_code[dat_display[i]],bit_array[i]);}void seconds_01(void){if(count==10){count=0;seconds++;}}void cs_1(void){if(cs==1){TR0=1;}}void cs_2(void){if(cs==2){TR0=0;}}unsigned char key_scane(void){unsigned char key_value;P3=0xff;key_value=P3;if(key_value!=0xff){delay(10);P3=0xff;key_value=~P3;while(P3!=0xff);return key_value;}}void key1(void){cs++;}void key_change(unsigned char val) {if(val==0x01){key1();}}void main(){T0_init();int_init();while(1){key_change(key_scane());dat_change();display();cs_1();cs_2();seconds_01();display();if(seconds==0){P2=0xff;delay(4000);}P0=0x80;}}void time_t0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}#include#includeunsigned charduan_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned char wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char wei[4];int count,temp,num;void Delay2ms();void display();int i;void main(){EA=1;ET0=1;TMOD=0x08;TH0=7192/32;TL0=7192%32;TR0=1;while(1){if(pclse==1){P2=0xF0;num=temp;}else{temp=0;display();}}}void Timer0() interrupt 1{TH0=7192/32;TL0=7192%32;count++;if(count>=10){temp++;count=0;}}void display(){wei[0]=num%10;wei[1]=num/10%10;wei[2]=num/100%10;wei[3]=num/1000;for(i=0;i<4;i++){P2=~wei_code[i];P0=duan_code[wei[i]];Delay2ms();}}void Delay2ms() //@12.000MHz{unsigned char i, j;_nop_();_nop_();i = 24;j = 84;do{while (--j);} while (--i);}试题3.40 简易减法器设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现一位数简易减法器功能,具体功能如下:使用开发板上的矩阵键盘依次输入被减数、减号、减数、等于号,并将输入数字和运算符及运算结果,分别5位数码管从左至右依次显示出来。减号用数码管G笔断表示、等于号用A、G笔段表示,程序不考虑容错处理,即输入时被减数必须大于被减数。
for(j=0;j<120;j++)
{}
}
void data_change(void)
data_display[0]=dat_count%10;
void INT0_init(void)
IT0=1;
EA=1;
EX0=1;
void INT1_init(void)
IT1=1;
EX1=1;
void display(unsigned char dat,unsigned char bit_code)
P2=0xff;
P0=seg_dm[dat];
P2=bit_code;
delay(5);
main()
unsigned char i;
INT0_init();
INT1_init();
while(1)
data_change();
for(i=0;i<1;i++)
display(data_display[i],bit_line[i]);
void Init0() interrupt 0 using 0
EX0=0;
if(dat_count<9)
dat_count++;
speak=1;
else
dat_count=9;
speak=0;
void Init1()interrupt 2 using 1
EX1=0;
if(dat_count>0)
dat_count--;
dat_count=0;
试题3.23 按键控制组合灯软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写完整程序实现如下功能,4个按键分别控制2个灯,4个按键从左至右分别称为S1-S4,单片机引脚1、2所接灯分别为LED1、LED2,按下S1控制LED1亮灭变化(当前灭则点亮,当前亮则变灭),S2控制LED2亮灭变化,S3开所有灯,S4关闭所有灯。
sbit LED1=P1^0;
sbit LED2=P1^1;
sbit S1=P3^0;
sbit S2=P3^1;
sbit S3=P3^2;
sbit S4=P3^3;
unsigned char key;
void key1();
void key2();
void key3();
void key4();
void delay(unsigned char x)
int i,j;
for(i=0;ifor(j=0;j<120;j++);}void main(){while(1){if(P3!=0xff){delay(10);if(P3!=0xff){key=~P3;while(P3!=0xff);}}switch(key){case 0x01:key1();key=0xff;break;case 0x02:key2();key=0xff;break;case 0x04:key3();break;case 0x08:key4();break;}}}void key1(){LED1=!LED1;}void key2(){LED2=!LED2;}void key3(){LED1=0;LED2=0;}void key4(){LED1=1;LED2=1;}试题3.24计数器软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现如下功能:对外部的方波信息进行0~99循环计数,每来一个脉冲计数加1,并将计数结果显示在数码管上。试题3.25 小型电子产品软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,单片机开发板上从左至右4个按键分别为S1-S4,按下S1从单片机第1个引脚上输出频率为1KHz的方波,再按下S1则停止输出方波;方波频率误差小于2%。试题3.26 秒表软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序如下功能,开发板上4键从左至右为S1-S4,上电后,开始时显示“00”;利用S1按键后启动计时;S2按键后停止计时;S3按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。试题3.27 倒计时秒表软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,使秒表在上电/复位后,具有:开始时显示“99”并开始倒计时,当计时到0S时,数码管显示“00”,同时蜂鸣器报警长鸣,倒计时误差小于0.5秒。#includeunsigned char duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];unsigned char bit_array[2]={0xfe,0xfd};unsigned char seconds=99,count;sbit speak=P1^6;void delay(unsigned int time){int i,j;for(i=0;ifor(j=0;j<120;j++);}void T0_init(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;}void int_init(void){EA=1;ET0=1;}void dat_change(void){dat_display[1]=seconds/10;dat_display[0]=seconds%10; }void display(){P2=0xff;P2=~0x01;P0=duanma[seconds%10];delay(2);P2=~0x02;P0=duanma[seconds/10];delay(2);}void seconds_01(void){if(count==10){count=0;seconds--;}}void seconds_99(void){if(seconds==0){TR0=0;}}void main(){T0_init();int_init();while(1){seconds_01();seconds_99();dat_change();if(seconds==0){P2=0xff;delay(4000);speak=0;delay(3000);speak=1;}display();}}void time_t0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;count++;}试题3.28 游客流量计数器设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现游客流量计数器功能,要求如下:用数码管理显示3数组2位数,分别表示进入人数、出去人数、滞留人数,当按下S1键进入人数加,S2键按下出去人加1,同时出入人数有变化对应的滞留人数也应更新,数值显示结果要与实际应用相结合。试题3.29单片机与PC机通信软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现在单片机上以9600的波特率循环向串口发送字符’0’~’9’,并利用USB转232串口线和电脑串口调试助手软件,在电脑上显示接收数据。试题3.30 单片机与PC机通信软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现单片机接收电脑串口发送的数字(0~9),并开发板上用一位数码管显示当前接收到的数据,波特率为9600。试题3.31 多种特效流彩灯设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,利用P1口的8个LED 灯,编写程序实现3种特效的彩灯,采灯效果分别为:LED单灯流水左移、LED单灯流水右移、LED从左至右逐个点亮,3种特效循环循环切换。试题3.32 按键发音程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,利用2个按键S1、S2,在开发板上编写程序实现如下功能,当按下S1、S2时蜂鸣器发出“哆”、“唻”的声音。试题3.33 温度计程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读温度函数,编写程序在数码管上显示实时温度,当温度大于35度时,开启蜂鸣器报警(长响)。试题3.34 时钟程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为整点时,开启蜂鸣器响3S。试题3.35 简易计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现简易计算器功能,具体功能如下:利用开发板上的矩阵键盘的2个按键实现0~99的加减计数,当按下1号键时计数值加1,计数值为99时加操作无效;按下2号键时计数值减1,计数值为0时减操作无效;计数结果显示在数码管上。试题3.36 简易闹钟设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为12:30:00时,LED发光二极管闪烁5S,闪烁频率2HZ。。试题3.37 啤酒生产计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计一个啤酒生产计数器,具体要求如下:利用实验板平台,通过P3.4检测并计数,计数时啤酒检测信号可以通过P3.4对应的按键模拟,每计一瓶显示加1,当一箱12瓶满时,蜂鸣器响3S,当再次按键时重新循环计数。#include #define uchar unsigned char#define uint unsigned intuint BoxNum=0; //??êyuchar num=0; //??êysbit led=P1^0;//1a±¨?ˉsbit bell=P1^6; //éù±¨?ˉ//sbit key=P3^4;void delay(unsigned char t);void Sounder();void Display();uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void main(){EA=1;ET0=1;ET1=1; //?aT0?¢T1?D??PT0=1;TMOD=0x26;//0010 0110 T1??ê±·?ê?2£?T0??êy·?ê?£?·?ê?2TH0=255;TL0=255;TH1=0x06;TL1=0x06;//?¨ê±250usTR1=1;TR0=1;//???ˉT1?¢T0while(1){if(num==12)Sounder();}}void Display(){P2=0xdf;//′ó×ó±??aê?×?????P0=table[BoxNum/1000]; // ?§??delay(1);P2=0xff;P2=0xef;P0=table[(BoxNum%1000)/100];//°ù??delay(1);P2=0xff;P2=0xf7;P0=table[((BoxNum%1000)%100)/10]; //ê???delay(1);P2=0xff;P2=0xfb;P0=table[((BoxNum%1000)%100)%10]; //????delay(1);P2=0xff;P2=0xfd;P0=table[num/10]; // ê???delay(1);P2=0xff;P2=0xfe;P0=table[num%10];//????delay(1);P2=0xff;}void delay(unsigned char t){unsigned char i;while(t--){for(i=0;i<125;++i); //?óê±??1ms}}void Sounder(){ uchar i;for(i=0;i<30;i++){bell=~bell;led=~led;delay(20);}}void INT_T0(void) interrupt 1{if(num<12){num++;}else{BoxNum++;num=1;}}void INT_T1(void) interrupt 3//±ü?aêy??1üéá??{static uchar i;i++;if(i==40){Display();i=0;} //10msμ÷ó?ò?′???ê??üD?3ìDò}试题3.38 投票计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个投票计数器,用2组2数码管分别实时显示A、B的投票票数,LED发光二极管D1、D2分别指示A、B的投票结果,S1~S3分别为A投票键、B投票键、票数比较键。具体功能如下:当按下S1键,A的票数加1;当按下S2键,B的票数加1;当按下S3键票数多的指示灯点亮,同时AB票数清0,当票数相等时S3键操作无效,且AB的投票数值不超过99试题3.39 按键时间间隔记录仪程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个反映时间测试仪,具体功能如下:测试连续2次按键的时间,按下第1次键时,发光二极管D1点视,按下第2次按键时间D2点亮,同时用数码管显示前后两次的时间间隔,精确到0.1S。#includeunsigned char code led_seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];unsigned char bit_array[2]={0xfe,0xfd};unsigned char seconds=0,count;unsigned char cs=0;void delay(unsigned int z){while(z--);}void T0_init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=0;}void int_init(){EA=1;ET0=1;}void dat_change(void){dat_display[1]=seconds/10;dat_display[0]=seconds%10;}void display_1bit(unsigned char seg_code,unsigned char bit_code) {P2=0xff;P0=seg_code;P2=bit_code;delay(200);}void display(){unsigned char i;for(i=0;i<2;i++)display_1bit(led_seg_code[dat_display[i]],bit_array[i]);}void seconds_01(void){if(count==10){count=0;seconds++;}}void cs_1(void){if(cs==1){TR0=1;}}void cs_2(void){if(cs==2){TR0=0;}}unsigned char key_scane(void){unsigned char key_value;P3=0xff;key_value=P3;if(key_value!=0xff){delay(10);P3=0xff;key_value=~P3;while(P3!=0xff);return key_value;}}void key1(void){cs++;}void key_change(unsigned char val) {if(val==0x01){key1();}}void main(){T0_init();int_init();while(1){key_change(key_scane());dat_change();display();cs_1();cs_2();seconds_01();display();if(seconds==0){P2=0xff;delay(4000);}P0=0x80;}}void time_t0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}#include#includeunsigned charduan_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned char wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char wei[4];int count,temp,num;void Delay2ms();void display();int i;void main(){EA=1;ET0=1;TMOD=0x08;TH0=7192/32;TL0=7192%32;TR0=1;while(1){if(pclse==1){P2=0xF0;num=temp;}else{temp=0;display();}}}void Timer0() interrupt 1{TH0=7192/32;TL0=7192%32;count++;if(count>=10){temp++;count=0;}}void display(){wei[0]=num%10;wei[1]=num/10%10;wei[2]=num/100%10;wei[3]=num/1000;for(i=0;i<4;i++){P2=~wei_code[i];P0=duan_code[wei[i]];Delay2ms();}}void Delay2ms() //@12.000MHz{unsigned char i, j;_nop_();_nop_();i = 24;j = 84;do{while (--j);} while (--i);}试题3.40 简易减法器设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现一位数简易减法器功能,具体功能如下:使用开发板上的矩阵键盘依次输入被减数、减号、减数、等于号,并将输入数字和运算符及运算结果,分别5位数码管从左至右依次显示出来。减号用数码管G笔断表示、等于号用A、G笔段表示,程序不考虑容错处理,即输入时被减数必须大于被减数。
for(j=0;j<120;j++);
void main()
if(P3!=0xff)
delay(10);
key=~P3;
while(P3!=0xff);
switch(key)
case 0x01:key1();key=0xff;break;
case 0x02:key2();key=0xff;break;
case 0x04:key3();break;
case 0x08:key4();break;
void key1()
LED1=!LED1;
void key2()
LED2=!LED2;
void key3()
LED1=0;
LED2=0;
void key4()
LED1=1;
LED2=1;
试题3.24计数器软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现如下功能:对外部的方波信息进行0~99循环计数,每来一个脉冲计数加1,并将计数结果显示在数码管上。
试题3.25 小型电子产品软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,单片机开发板上从左至右4个按键分别为S1-S4,按下S1从单片机第1个引脚
上输出频率为1KHz的方波,再按下S1则停止输出方波;方波频率误差小于2%。
试题3.26 秒表软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写程序如下功能,开发板上4键从左至右为S1-S4,上电后,开始时显示“00”;利用S1按键后启动计时;S2按键后停止计时;S3按键后计时归零;最大计时为99秒。计时误差小于0.5秒,显示稳定。
试题3.27 倒计时秒表软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编写程序,使秒表在上电/复位后,具有:开始时显示“99”并开始倒计时,当计时到0S时,数码管显示“00”,同时蜂鸣器报警长鸣,倒计时误差小于0.5秒。
unsigned char duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];
unsigned char bit_array[2]={0xfe,0xfd};
unsigned char seconds=99,count;
void delay(unsigned int time)
for(i=0;ifor(j=0;j<120;j++);}void T0_init(void){TMOD=0x01;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TR0=1;}void int_init(void){EA=1;ET0=1;}void dat_change(void){dat_display[1]=seconds/10;dat_display[0]=seconds%10; }void display(){P2=0xff;P2=~0x01;P0=duanma[seconds%10];delay(2);P2=~0x02;P0=duanma[seconds/10];delay(2);}void seconds_01(void){if(count==10){count=0;seconds--;}}void seconds_99(void){if(seconds==0){TR0=0;}}void main(){T0_init();int_init();while(1){seconds_01();seconds_99();dat_change();if(seconds==0){P2=0xff;delay(4000);speak=0;delay(3000);speak=1;}display();}}void time_t0() interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;count++;}试题3.28 游客流量计数器设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现游客流量计数器功能,要求如下:用数码管理显示3数组2位数,分别表示进入人数、出去人数、滞留人数,当按下S1键进入人数加,S2键按下出去人加1,同时出入人数有变化对应的滞留人数也应更新,数值显示结果要与实际应用相结合。试题3.29单片机与PC机通信软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现在单片机上以9600的波特率循环向串口发送字符’0’~’9’,并利用USB转232串口线和电脑串口调试助手软件,在电脑上显示接收数据。试题3.30 单片机与PC机通信软件开发一、任务在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现单片机接收电脑串口发送的数字(0~9),并开发板上用一位数码管显示当前接收到的数据,波特率为9600。试题3.31 多种特效流彩灯设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,利用P1口的8个LED 灯,编写程序实现3种特效的彩灯,采灯效果分别为:LED单灯流水左移、LED单灯流水右移、LED从左至右逐个点亮,3种特效循环循环切换。试题3.32 按键发音程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,利用2个按键S1、S2,在开发板上编写程序实现如下功能,当按下S1、S2时蜂鸣器发出“哆”、“唻”的声音。试题3.33 温度计程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读温度函数,编写程序在数码管上显示实时温度,当温度大于35度时,开启蜂鸣器报警(长响)。试题3.34 时钟程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为整点时,开启蜂鸣器响3S。试题3.35 简易计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现简易计算器功能,具体功能如下:利用开发板上的矩阵键盘的2个按键实现0~99的加减计数,当按下1号键时计数值加1,计数值为99时加操作无效;按下2号键时计数值减1,计数值为0时减操作无效;计数结果显示在数码管上。试题3.36 简易闹钟设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为12:30:00时,LED发光二极管闪烁5S,闪烁频率2HZ。。试题3.37 啤酒生产计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计一个啤酒生产计数器,具体要求如下:利用实验板平台,通过P3.4检测并计数,计数时啤酒检测信号可以通过P3.4对应的按键模拟,每计一瓶显示加1,当一箱12瓶满时,蜂鸣器响3S,当再次按键时重新循环计数。#include #define uchar unsigned char#define uint unsigned intuint BoxNum=0; //??êyuchar num=0; //??êysbit led=P1^0;//1a±¨?ˉsbit bell=P1^6; //éù±¨?ˉ//sbit key=P3^4;void delay(unsigned char t);void Sounder();void Display();uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};void main(){EA=1;ET0=1;ET1=1; //?aT0?¢T1?D??PT0=1;TMOD=0x26;//0010 0110 T1??ê±·?ê?2£?T0??êy·?ê?£?·?ê?2TH0=255;TL0=255;TH1=0x06;TL1=0x06;//?¨ê±250usTR1=1;TR0=1;//???ˉT1?¢T0while(1){if(num==12)Sounder();}}void Display(){P2=0xdf;//′ó×ó±??aê?×?????P0=table[BoxNum/1000]; // ?§??delay(1);P2=0xff;P2=0xef;P0=table[(BoxNum%1000)/100];//°ù??delay(1);P2=0xff;P2=0xf7;P0=table[((BoxNum%1000)%100)/10]; //ê???delay(1);P2=0xff;P2=0xfb;P0=table[((BoxNum%1000)%100)%10]; //????delay(1);P2=0xff;P2=0xfd;P0=table[num/10]; // ê???delay(1);P2=0xff;P2=0xfe;P0=table[num%10];//????delay(1);P2=0xff;}void delay(unsigned char t){unsigned char i;while(t--){for(i=0;i<125;++i); //?óê±??1ms}}void Sounder(){ uchar i;for(i=0;i<30;i++){bell=~bell;led=~led;delay(20);}}void INT_T0(void) interrupt 1{if(num<12){num++;}else{BoxNum++;num=1;}}void INT_T1(void) interrupt 3//±ü?aêy??1üéá??{static uchar i;i++;if(i==40){Display();i=0;} //10msμ÷ó?ò?′???ê??üD?3ìDò}试题3.38 投票计数器程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个投票计数器,用2组2数码管分别实时显示A、B的投票票数,LED发光二极管D1、D2分别指示A、B的投票结果,S1~S3分别为A投票键、B投票键、票数比较键。具体功能如下:当按下S1键,A的票数加1;当按下S2键,B的票数加1;当按下S3键票数多的指示灯点亮,同时AB票数清0,当票数相等时S3键操作无效,且AB的投票数值不超过99试题3.39 按键时间间隔记录仪程序设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个反映时间测试仪,具体功能如下:测试连续2次按键的时间,按下第1次键时,发光二极管D1点视,按下第2次按键时间D2点亮,同时用数码管显示前后两次的时间间隔,精确到0.1S。#includeunsigned char code led_seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];unsigned char bit_array[2]={0xfe,0xfd};unsigned char seconds=0,count;unsigned char cs=0;void delay(unsigned int z){while(z--);}void T0_init(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TR0=0;}void int_init(){EA=1;ET0=1;}void dat_change(void){dat_display[1]=seconds/10;dat_display[0]=seconds%10;}void display_1bit(unsigned char seg_code,unsigned char bit_code) {P2=0xff;P0=seg_code;P2=bit_code;delay(200);}void display(){unsigned char i;for(i=0;i<2;i++)display_1bit(led_seg_code[dat_display[i]],bit_array[i]);}void seconds_01(void){if(count==10){count=0;seconds++;}}void cs_1(void){if(cs==1){TR0=1;}}void cs_2(void){if(cs==2){TR0=0;}}unsigned char key_scane(void){unsigned char key_value;P3=0xff;key_value=P3;if(key_value!=0xff){delay(10);P3=0xff;key_value=~P3;while(P3!=0xff);return key_value;}}void key1(void){cs++;}void key_change(unsigned char val) {if(val==0x01){key1();}}void main(){T0_init();int_init();while(1){key_change(key_scane());dat_change();display();cs_1();cs_2();seconds_01();display();if(seconds==0){P2=0xff;delay(4000);}P0=0x80;}}void time_t0()interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;}#include#includeunsigned charduan_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned char wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char wei[4];int count,temp,num;void Delay2ms();void display();int i;void main(){EA=1;ET0=1;TMOD=0x08;TH0=7192/32;TL0=7192%32;TR0=1;while(1){if(pclse==1){P2=0xF0;num=temp;}else{temp=0;display();}}}void Timer0() interrupt 1{TH0=7192/32;TL0=7192%32;count++;if(count>=10){temp++;count=0;}}void display(){wei[0]=num%10;wei[1]=num/10%10;wei[2]=num/100%10;wei[3]=num/1000;for(i=0;i<4;i++){P2=~wei_code[i];P0=duan_code[wei[i]];Delay2ms();}}void Delay2ms() //@12.000MHz{unsigned char i, j;_nop_();_nop_();i = 24;j = 84;do{while (--j);} while (--i);}试题3.40 简易减法器设计一、任务在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现一位数简易减法器功能,具体功能如下:使用开发板上的矩阵键盘依次输入被减数、减号、减数、等于号,并将输入数字和运算符及运算结果,分别5位数码管从左至右依次显示出来。减号用数码管G笔断表示、等于号用A、G笔段表示,程序不考虑容错处理,即输入时被减数必须大于被减数。
void T0_init(void)
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
void int_init(void)
ET0=1;
void dat_change(void)
dat_display[1]=seconds/10;
dat_display[0]=seconds%10; }
void display()
P2=~0x01;
P0=duanma[seconds%10];
delay(2);
P2=~0x02;
P0=duanma[seconds/10];
void seconds_01(void)
if(count==10)
count=0;
seconds--;
void seconds_99(void)
if(seconds==0)
TR0=0;
T0_init();
int_init();
seconds_01();
seconds_99();
dat_change();
delay(4000);
delay(3000);
display();
void time_t0() interrupt 1
count++;
试题3.28 游客流量计数器设计
在下列开发板硬件(原理图见pdf文档)基础上,编写程序,实现游客流量计数器功能,要求如下:用数码管理显示3数组2位数,分别表示进入人数、出去人数、滞留人数,当按下S1键进入人数加,S2键按下出去人加1,同时出入人数有变化对应的滞留人数也应更新,数值显示结果要与实际应用相结合。
试题3.29单片机与PC机通信软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现在单片机上以9600的波特率循环向串口发送字符’0’~’9’,并利用USB转232串口线和电脑串口调试助手软件,在电脑上显示接收数据。
试题3.30 单片机与PC机通信软件开发
在下列开发板硬件(原理图见pdf文档)基础上,编程实现如下功能:利用给定的初始化串口程序,编程实现单片机接收电脑串口发送的数字(0~9),并开发板上用一位数码管显示当前接收到的数据,波特率为9600。
试题3.31 多种特效流彩灯设计
在下列开发板硬件(原理图见pdf文档)基础上,利用P1口的8个LED 灯,编写程序实现3种特效的彩灯,采灯效果分别为:LED单灯流水左移、LED单灯流水右移、LED从左至右逐个点亮,3种特效循环循环切换。
试题3.32 按键发音程序设计
在下列开发板硬件(原理图见pdf文档)基础上,利用2个按键S1、S2,在开发板上编写程序实现如下功能,当按下S1、S2时蜂鸣器发出“哆”、“唻”的声音。
试题3.33 温度计程序设计
在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读温度函数,编写程序在数码管上显示实时温度,当温度大于35度时,开启蜂鸣器报警(长响)。
试题3.34 时钟程序设计
在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为整点时,开启蜂鸣器响3S。
试题3.35 简易计数器程序设计
在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现简易计算器功能,具体功能如下:利用开发板上的矩阵键盘的2个按键实现0~99的加减计数,当按下1号键时计数值加1,计数值为99时加操作无效;按下2号键时计数值减1,计数值为0时减操作无效;计数结果显示在数码管上。
试题3.36 简易闹钟设计
在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现如下功能,利用给定的读写时间函数,编写程序在数码管上显示时、分、秒,当时间为12:30:00时,LED发光二极管闪烁5S,闪烁频率2HZ。
。
试题3.37 啤酒生产计数器程序设计
在下列开发板硬件(原理图见pdf文档)基础上,设计一个啤酒生产计数器,具体要求如下:利用实验板平台,通过P3.4检测并计数,计数时啤酒检测信号可以
通过P3.4对应的按键模拟,每计一瓶显示加1,当一箱12瓶满时,蜂鸣器响3S,当再次按键时重新循环计数。
#define uchar unsigned char
#define uint unsigned int
uint BoxNum=0; //??êy
uchar num=0; //??êy
sbit led=P1^0;//1a±¨?ˉ
sbit bell=P1^6; //éù±¨?ˉ
//sbit key=P3^4;
void delay(unsigned char t);
void Sounder();
void Display();
uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ET1=1; //?aT0?¢T1?D??
PT0=1;
TMOD=0x26;//0010 0110 T1??ê±·?ê?2£?T0??êy·?ê?£?·?ê?2
TH0=255;
TL0=255;
TH1=0x06;
TL1=0x06;//?¨ê±250us
TR1=1;
TR0=1;//???ˉT1?¢T0
if(num==12)
Sounder();
void Display()
P2=0xdf;//′ó×ó±??aê?×?????
P0=table[BoxNum/1000]; // ?§??
delay(1);
P2=0xef;
P0=table[(BoxNum%1000)/100];//°ù??
P2=0xf7;
P0=table[((BoxNum%1000)%100)/10]; //ê???
P2=0xfb;
P0=table[((BoxNum%1000)%100)%10]; //????
P2=0xfd;
P0=table[num/10]; // ê???
P2=0xfe;
P0=table[num%10];//????
void delay(unsigned char t)
while(t--)
for(i=0;i<125;++i); //?óê±??1ms
void Sounder()
{ uchar i;
for(i=0;i<30;i++)
bell=~bell;
led=~led;
delay(20);
void INT_T0(void) interrupt 1
if(num<12)
num++;
BoxNum++;
num=1;
void INT_T1(void) interrupt 3//±ü?aêy??1üéá??
static uchar i;
i++;
if(i==40)
{Display();i=0;} //10msμ÷ó?ò?′???ê??üD?3ìDò
试题3.38 投票计数器程序设计
在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个投票计数器,用2组2数码管分别实时显示A、B的投票票数,LED发光二极管D1、D2分别指示A、B的投票结果,S1~S3分别为A投票键、B投票键、票数比较键。
具体功能如下:当按下S1键,A的票数加1;当按下S2键,B的票数加1;当按下S3键票数多的指示灯点亮,同时AB票数清0,当票数相等时S3键操作无效,且AB的投票数值不超过99
试题3.39 按键时间间隔记录仪程序设计
在下列开发板硬件(原理图见pdf文档)基础上,设计制作一个反映时间测试仪,具体功能如下:测试连续2次按键的时间,按下第1次键时,发光二极管D1点视,按下第2次按键时间D2点亮,同时用数码管显示前后两次的时间间隔,精确到0.1S。
unsigned char code led_seg_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; unsigned char dat_display[2];
unsigned char seconds=0,count;
unsigned char cs=0;
void delay(unsigned int z)
while(z--);
void T0_init()
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
void int_init()
dat_display[0]=seconds%10;
void display_1bit(unsigned char seg_code,unsigned char bit_code) {
P0=seg_code;
delay(200);
for(i=0;i<2;i++)
display_1bit(led_seg_code[dat_display[i]],bit_array[i]);
seconds++;
void cs_1(void)
if(cs==1)
void cs_2(void)
if(cs==2)
unsigned char key_scane(void)
unsigned char key_value;
P3=0xff;
key_value=P3;
if(key_value!=0xff)
key_value=~P3;
return key_value;
void key1(void)
cs++;
void key_change(unsigned char val) {
if(val==0x01)
key1();
key_change(key_scane());
cs_1();
cs_2();
P0=0x80;
void time_t0()interrupt 1
unsigned char
duan_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; unsigned char wei_code[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char wei[4];
int count,temp,num;
void Delay2ms();
void display();
int i;
TMOD=0x08;
TH0=7192/32;
TL0=7192%32;
if(pclse==1)
P2=0xF0;
num=temp;
temp=0;
void Timer0() interrupt 1
if(count>=10)
temp++;
wei[0]=num%10;
wei[1]=num/10%10;
wei[2]=num/100%10;
wei[3]=num/1000;
for(i=0;i<4;i++)
P2=~wei_code[i];
P0=duan_code[wei[i]];
Delay2ms();
void Delay2ms() //@12.000MHz
unsigned char i, j;
_nop_();
i = 24;
j = 84;
do
while (--j);
} while (--i);
试题3.40 简易减法器设计
在下列开发板硬件(原理图见pdf文档)基础上,编写程序实现一位数简易减法器功能,具体功能如下:使用开发板上的矩阵键盘依次输入被减数、减号、减数、等于号,并将输入数字和运算符及运算结果,分别5位数码管从左至右依次显示出来。减号用数码管G笔断表示、等于号用A、G笔段表示,程序不考虑容错处理,即输入时被减数必须大于被减数。