单片机竞赛题
- 格式:doc
- 大小:151.00 KB
- 文档页数:27
单片机期末考试试题
一、选择题
1. 下列关于单片机的说法,正确的是:
A. 单片机只能执行一个程序
B. 单片机是一种独立运行的计算机系统
C. 单片机通常由微处理器、存储器和输入输出设备构成
D. 单片机不需要外部电源供电
2. 单片机中常用的编程语言是:
A. C语言
B. Java语言
C. Python语言
D. HTML语言
3. 下列哪个是单片机的主要功能之一?
A. 图像处理
B. 语音识别
C. 数据处理
D. 网络连接
4. 单片机中常用的存储器包括:
A. ROM
B. RAM
C. Flash
D. 所有选项都正确
5. 单片机的时钟频率通常指的是:
A. CPU的时钟频率
B. 串口的时钟频率
C. 芯片上的任务执行频率
D. 外部存储器的时钟频率
二、填空题
1. 单片机中的ADC全称是__________。
2. 单片机中常见的GPIO中文全称是__________。
3. 单片机中最基本的输入输出设备是__________。
4. 单片机中常见的中断服务程序是__________。
5. 单片机中的I/O口中文全称是__________。
三、简答题
1. 请简要说明单片机中的PWM是什么,有什么作用?
2. 简要解释单片机中的I2C总线的原理及应用。
3. 请简述单片机中的串口通信是如何实现的,常用的串口通信方式有哪些?
四、编程题
请在单片机开发环境中编写一个简单的LED点亮程序,实现LED 灯隔1秒亮灭交替的效果。
以上为单片机期末考试试题内容,祝您考试顺利!。
题目1 智能电子钟(LCD 显示)题目2 电子时钟(LCD 显示)题目3 秒表题目4 定时闹钟题目5 音乐倒数计数器题目6 基于数字温度传感器的数字温度计题目7 基于热敏电阻的数字温度计题目8 十字路口交通灯控制题目9 波形发生器设计题目10 电容、电阻参数单片机测试系统的设计题目11 数字频率计题目12 8位竞赛抢答器的设计题目13 单词记忆测试器程序设计题目14 数字电压表设计题目15 可编程作息时间控制器设计题目16 节日彩灯控制器的设计题目17 双机之间的串行通信设计题目18 电子琴设计题目19 数字音乐盒的设计题目20 单片机控制步进电机题目21 单片机控制直流电动机题目1 智能电子钟(LCD 显示) 1. 设计要求 以AT89C51单片机为核心,制作一个LCD 显示的智能电子钟: (1) 计时:秒、分、时、天、周、月、年。
(2) 闰年自动判别。
(3) 五路定时输出,可任意关断(最大可到16路)。
(4) 时间、月、日交替显示。
(5) 自定任意时刻自动开/关屏。
(6) 计时精度:误差≤1秒/月(具有微调设置) (7) 键盘采用动态扫描方式查询。
所有的查询、设置功能均由功能键K1、K2完成。
2. 工作原理 本设计采用市场上流行的时钟芯片DS1302进行制作。
DS1302是DALLAS 公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM ,可以通过串行接口与计算机进行通信,使得管脚数量减少。
实时时钟/日历电路能够计算2100年之前的秒、分、时、日、星期、月、年的,具有闰年调整的能力。
DS1302时钟芯片的主要功能特性:(1) 能计算2100年之前的年、月、日、星期、时、分、秒的信息;每月的天数和闰年的天数可自动调整;时钟可设置为24或12小时格式。
(2) 31B 的8位暂存数据存储RAM 。
(3) 串行I/O 口方式使得引脚数量最少。
(4) DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需3根线。
单片机试题及答案在以下的文章中,我将为您提供一些关于单片机的试题及答案。
请您留意,文章中会涉及到一些技术术语的解释和实例,希望对您有所帮助。
试题一:1. 请解释什么是单片机?答案:单片机是一种集成电路芯片,它集成了中央处理器、内存、输入/输出接口以及其他一些外设电路。
它可以用来控制和执行各种任务,比如数据的采集和处理、通信、显示等。
2. 单片机与微处理器有什么区别?答案:单片机是集成了中央处理器和外设接口的完整系统,而微处理器只是中央处理器,需要外部电路和外设接口来实现完整的系统功能。
3. 请简要解释单片机的工作原理。
答案:单片机通过读取程序存储器中的指令,执行指令来完成各种任务。
它可以通过输入/输出接口与外部设备进行通信,并通过内存存储数据。
4. 请解释什么是中断?答案:中断是一种事件,它可以打断单片机的正常执行流程,并引导程序执行特定的子程序。
中断可以是内部的(比如定时器溢出中断)或外部的(比如按键中断)。
5. 请解释什么是串口通信?答案:串口通信是一种通过串行数据传输进行的通信方式。
数据是逐位地发送和接收的,其中一根信号线用于发送数据,另一根信号线用于接收数据。
试题二:1. 请写出单片机的常见应用领域。
答案:单片机的常见应用领域包括家电控制、工业自动化、电子设备、医疗设备、交通工具控制等。
2. 请简述单片机的编程语言。
答案:单片机的编程语言主要有汇编语言和高级语言。
汇编语言是直接操作单片机硬件的语言,使用机器指令进行编程;高级语言(如C语言)则是通过编译器将程序转换为单片机可以执行的机器指令。
3. 请解释什么是GPIO口?答案:GPIO口是指单片机上的通用输入输出口,它可以配置为输入或输出模式。
通过GPIO口,单片机可以与其他外部设备进行数字信号的交互。
4. 请解释什么是PWM信号?答案:PWM(脉宽调制)信号是一种周期性的方波信号,通过调节方波的高电平持续时间(脉宽)和周期来实现对电压的控制。
第一轮初赛写出下列名项的阻值和精度:1.红-黑-棕-金200欧姆2.棕-棕-红-银 1.1K3.红-红-绿-红 2.2M4.红-紫-棕-金2705.红-红-红-金 2.2K6.红-黑-黑-黑-棕2007.棕-棕-灰-黑-红1188.棕-白-蓝-红-红19.6K9.683表示68000Ω或68KΩ10.R10=0.10Ω11.1922表示19200Ω或19.2KΩ12.1R53=1.53Ω13.电容器的标称容量:47PF 200000PF 4.7PF第二轮复赛第一套:1. 变压器的第一号管脚用( )识别.A 一白色标志B 一个孔C 一个缺口D 都可以解析:变压器是有方向的,它的第一个管脚通常用一个白色标志、一个孔或一个尖角表示2. 逻辑功能为:“全1出0、有0出1”的逻辑门是()A与非门 B 或非门 C 非门 D 与或非门3. 图中元器件是()A 蜂鸟器B 触发器C变频器D整流器4. 如何识别一轴向引线电感器和色环电阻?解析: 轴向引线电感和电阻的外形很相似,区别它们主要外形均匀光滑,颜色多为翠绿色,这与识别经验有关,用万用表测试电阻值为0。
第二套:1. LED 的极性是靠( )判断的。
A 平边 B 缺口 C 长脚 D 以上几种解析: 常用的符号是“LED”,极性用平边表示,标在组件体上,或用一缺口表示,或用一条长的管脚表示。
2. 两互感线圈的耦合系数K=( )A.21L L M B .21L L M C.21L L M3.图中元器件是什么?.保险管4.图中是什么元器件A 阻流圈B 变压器C 整流器D 振荡器第三套:1. 应用叠加定理时,理想电流源不作用时视为( )A.短路B .开路C.电阻D.理想电流源2. .双面高密度5英寸软磁盘的容量是【 】 。
A) 360KB B) 720KB C) 1.2MB D) 1.44MB3图中是什么元器件电容器A 电阻器 B 电感器 C 电容器 D 二极管4.图中是什么元器件变阻器第四套:1.防止软盘感染病毒的有效方法是【】。
第十二届蓝桥杯单片机设计与开发项目省赛第二部分程序设计试题(70分)1、基本要求1.1使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计与调试。
1.2选手在程序设计与调试过程中,可参考组委会提供的“资源数据包”。
1.3请注意:程序编写、调试完成后选手应通过考试系统提交完整、可编译的Keil工程文件压缩包。
选手提交的工程文件应是最终版本,要求Keil工程文件以准考证号(7位数字)命名,工程文件夹内应包含以准考证号命名的hex文件,该hex文件是成绩评审的依据。
不符合以上文件提交要求和命名要求的作品将被评为零分或者被酌情扣分。
举例说明:选手准考证号为1234567,hex文件应命名为:1234567.hex。
1.4请勿上传与作品工程文件无关的其它文件。
2、竞赛板配置要求2.1将IAP15F2K61S2单片机内部振荡器频率设定为12MHz。
2.2键盘工作模式跳线J5配置为KBD键盘模式。
2.3扩展方式跳线J13配置为IO模式。
2.4请注意:选手需严格按照以上要求配置竞赛板,编写和调试程序,不符合以上配置要求的作品将被评为零分或者被酌情扣分。
3、硬件框图数码管显示单元DS18B20IAP15F2K61S2单片机按键输入DA输出LED指示灯图1 系统硬件框图4、功能描述4.1功能概述1)通过获取DS18B20温度传感器的温度数据,完成温度测量功能。
2)通过PCF8591 AD/DA芯片完成DAC输出功能。
3)通过数码管完成题目要求的数据显示功能。
4)通过按键完成题目要求的显示界面切换和设置功能。
5)通过LED指示灯完成题目要求的指示功能。
4.2性能要求1)温度数据刷新时间:≤1秒。
2)DAC输出电压刷新时间:≤0.5秒。
3)按键动作响应时间:≤0.2秒。
4.3显示功能1)温度显示界面温度数据界面如图2所示,显示内容包括标识符C和温度数据,温度数据保留小数点后2位有效数字,单位为摄氏度。
图2 温度显示界面2)参数设置界面参数设置界面如图3所示,显示内容包括标识符P和温度参数,温度参数为整数,单位为摄氏度。
第十四届蓝桥杯单片机国赛试题
第十四届蓝桥杯单片机国赛试题
一、设计题
题目一:多功能交通灯
要求实现一个可调节的多功能交通灯,包括红、黄、绿三色交替闪烁,红灯缓慢变暗,绿灯缓慢变亮,黄灯持续显示等功能。
建议考生采用
状态流转法实现。
二、编程题
题目二:智能马达控制器
设计一个智能马达控制器,接受串口输入的指令控制直流马达的前进、后退、停止等动作,且能够通过传感器检测马达的运行状态,如过载、过流等异常情况并作出相应处理。
建议考生采用采样+反馈控制算法实现。
三、应用题
题目三:智能家居系统
设计一个智能家居系统,具有温度、湿度、烟雾等传感器,能够实现
远程控制和自动化控制,如控制电灯、扬声器、温控器等并能与手机APP相连,实现远程操控。
四、综合应用题
题目四:智能医疗仪器
设计一个智能医疗仪器,包括心脏、血压、血糖等多种检测功能,并能够通过WiFi连接云端,上传检测结果和个人病历及提供查看服务。
建议考生采用嵌入式系统+传感器+数据传输+云端存储的技术实现。
以上是第十四届蓝桥杯单片机国赛试题,题目设计旨在测试考生对于单片机嵌入式系统的理解和应用。
无论是设计题、编程题还是应用题和综合应用题都需要考生熟悉单片机控制、传感器采集、数据处理等方面的技术。
通过本次竞赛,考生不仅能够提高技能水平,锻炼动手实践能力,还可以学习到行业应用和发展趋势,对未来的发展有所助益。
单片机设计与开发项目基础知识试题(30分)一、填空题1.1 IAP15F2K61S2单片机的定时器0具有种工作模式,当采用外部12MHz晶振时,定时器最大定时长度为μS。
1.2电路如下图所示,其输入电压UI1、UI2分别为0.1V和0.2V,试计算出输出电压UO的值 V。
二、选择题(含多选)2.1 当电路中有用信号为某一固定频率,宜选用滤波器,直流电源的滤波电路宜选用滤波器。
A.带阻B.低通C.高通D.带通2.2 能够实现线与功能的门电路是。
A.与非门B.或非门C.抑或门D.OC门2.3 逻辑表达式F=AB+BC+ABCD+ B的最简式为。
A. C +DB. CC. B+CD. A+C2.4 MCS-51单片机在同一优先级的中断源,同时申请中断时,单片机首先响应下列哪个中断源的请求。
A.串口中断B.定时器0中断1 / 2C.定时器1中断D.外部中断02.5 8051单片机的P0口,当使用外部存储器时它是一个。
A.传输高8位地址口B.传输低8位地址口C.传输高8位数据口D.传输低8位地址/数据口2.6 数码管动态扫描的程序设计一般需要“消隐”动作,才能保证显示效果清晰,下面基于CT017D竞赛板的数码管显示代码片段中第行是用来实现“消隐”功能的。
A.第3行B.第4行C.第5行D.第8行2.7 使用Keil uVision编写51单片机的C程序时,若定义一个变量x,并由编译器将其分配到外部RAM中,应定义语句。
A.code unsigned char x;B.pdata unsigned char x;C.idata unsigned char x;D.xdata unsigned char x;2.8 关于单片机下列哪些说法是错误的。
A.IAP15F2K61S2单片机复位后,P0~P3口状态为低电平B.具有PWM功能的单片机可通过滤波器实现DAC功能C.IAP15F2K61S2可以使用内部RC振荡器,也可以使用外部晶振工作D.所有单片机的程序下载都需要冷启动过程2 / 2。
1. LED程序:#include "reg52.h"void delay(void);void main(){ unsigned char i;while(1){for(i=0;i<8;i++){ P0 = ~(1<<i);P2 |= 0xE0;P2 &= 0x9F;delay();}}}//软件延时程序void delay(void){unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}3.1 1602程序:#include "reg52.h"#include "intrins.h"unsigned char text1[] = "LCD 1602 TEST" ; unsigned char text2[] = "" ;sbit RS = P2^0;sbit RW = P2^1;sbit EN = P1^2;void delay_ms(unsigned char t);void init_1602(void);void write_command(unsigned char cmd); void write_data(unsigned char dat);void dsp_onechar(unsigned char pos,unsigned char c);void dsp_string(unsigned char line,unsigned char *p,unsigned char length);void main(void){init_1602();delay_ms(15);dsp_string(0,text1,13);dsp_string(1,text2,12); 2.1 独立按键程序:#include "reg52.h"void main(void){while(1){switch(P3){case 0xFE: //S1{P0 = 0xFC;P2 |= 0xE0;P2 &= 0x9F;break;}case 0xFD: //S2{P0 = 0xF3;P2 |= 0xE0;P2 &= 0x9F;break;}case 0xFB: //S3{P0 = 0xCF;P2 |= 0xE0;P2 &= 0x9F;break;}case 0xF7: //S4{P0 = 0x3F;P2 |= 0xE0;P2 &= 0x9F;break;}}}}2.2 键盘矩阵程序:#include "reg52.h"unsigned char dspflag;unsigned char keyflag;unsigned char tflag;unsigned char code dsp_code_ca[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80 ,0x90};unsigned char keyscan(void);void display(unsigned char d);void main(){unsigned char temp;while(1);}void delay_ms(unsigned char t){unsigned char i;while(t--){for(i=0;i<112;i++);}}void write_command(unsigned char cmd) {delay_ms(5); // check busy flagEN = 0;RS = 0;RW = 0;_nop_();EN = 1;P0 = cmd;EN = 0;}void write_data(unsigned char dat){delay_ms(5); //busy flag checkEN = 0;RS = 1;RW = 0;_nop_();EN = 1;P0 = dat;EN = 0;RS = 0;}void dsp_onechar(unsigned char pos,unsigned char c){unsigned char p;if (pos>=0x10)p=pos+0xb0;elsep=pos+0x80;write_command(p);write_data(c);}void dsp_string(unsigned char line,unsigned char *p,unsigned char length){unsigned char l,i;l=line<<4;for (i=0;i<length;i++)dsp_onechar(l++,*(p+i));TMOD = 0x02;TH0 = 0x06;TL0 = 0x06;EA = 1;ET0 = 1;TR0 = 1;while(1){if(keyflag){temp = keyscan();keyflag = 0;}display(temp);}}//定时器0中断服务函数void isr_t0(void) interrupt 1{tflag++;if(tflag == 16) // 4ms{dspflag++;if(dspflag == 2)dspflag = 0;}if(tflag == 20) //10ms{tflag = 0;keyflag = 1;}}// 4×4键盘矩阵扫描函数unsigned char keyscan(void){unsigned char keyvalue;P3 = 0x7F; //S4 S5 S6 S7 switch(P3){case 0x7E: keyvalue = 0;break;case 0x7D: keyvalue = 4;break;case 0x7B: keyvalue = 8;break;case 0x77: keyvalue = 12;break;default: break;}P3 = 0xBF; //S8 S9 S10 S11 switch(P3){case 0xBE: keyvalue = 1;break;case 0xBD: keyvalue = 5;break;case 0xBB: keyvalue = 9;break;case 0xB7: keyvalue = 13;break;default: break;}}void init_1602(void){delay_ms(15);write_command(0x38);write_command(0x38);write_command(0x38);write_command(0x06);write_command(0x0c);write_command(0x01);}3.2 数码管程序;#include "reg52.h"unsigned char code dsp_code_ca[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0 x80,0x90};unsigned int tflag;unsigned char dspflag;unsigned char second;unsigned char dflag;void display(unsigned char d);void main(){TMOD |= 0x02;TH0 = 0x06;TL0 = 0x06;EA = 1;ET0 = 1;TR0 = 1;while(1){display(second);}}//T0中断服务函数void isr_t0(void) interrupt 1{tflag++;dflag++;if(dflag == 16){dflag = 0;dspflag++;if(dspflag == 2)dspflag = 0;}if(tflag == 4000){tflag = 0;second++;P3 = 0xDF; //S12 S13 S14 S15 switch(P3){case 0xDE: keyvalue = 2;break;case 0xDD: keyvalue = 6;break;case 0xDB: keyvalue = 10;break;case 0xD7: keyvalue = 14;break;default: break;}P3 = 0xEF; //S16 S17 S18 S19 switch(P3){case 0xEE: keyvalue = 3;break;case 0xED: keyvalue = 7;break;case 0xEB: keyvalue = 11;break;case 0xE7: keyvalue = 15;break;default: break;}return keyvalue;}//数码管显示函数,显示两位void display(unsigned char d){if((dspflag == 0) && (d/10 != 0)) {P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d/10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x40;P2 |= 0xC0;P2 &= 0x3F;}if(dspflag == 1){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d%10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x80;P2 |= 0xC0;P2 &= 0x3F;}}if(second == 60)second = 0;}}//显示程序void display(unsigned char d){if((dspflag == 0) && (d/10 != 0)){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d/10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x40;P2 |= 0xC0;P2 &= 0x3F;}if(dspflag == 1){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d%10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x80;P2 |= 0xC0;P2 &= 0x3F;}}5. common程序:#include "reg52.h"sbit buzzer = P0^6;sbit relay = P0^4;void main(void){//关闭蜂鸣器buzzer = 0; //高有效P2 = 0xA0;P2 = 0x00;//关闭继电器relay = 0; //高有效P2 = 0xA0;P2 = 0x00; 4. UART(串行数据总线)程序;#include "at89x52.h"unsigned char txbuffer1[] = "STC89C52RC UART TEST PROGRAM";unsigned char txbuffer2[] = "============================"; unsigned char enter[] = {0x0A,0x0D};void uart_tx(unsigned char *p,unsigned char length);void main(){SCON = 0x50;TMOD = 0x20;TH1 = 0xF3;TL1 = 0xF3;TR1 = 1;uart_tx(txbuffer2,28);uart_tx(enter,2); //Enteruart_tx(txbuffer1,28);uart_tx(enter,2); //Enteruart_tx(txbuffer2,28);uart_tx(enter,2); //Enterwhile(1);}void uart_tx(unsigned char *p,unsigned char length){unsigned char i;for(i=0;i<length;i++){SBUF = *(p+i);while(TI == 0);TI = 0;}}6.1 DS18b20(温度传感器)主程序:#include "reg52.h"#include "ds18b20.h"unsigned int tflag;bit secflag = 0;unsigned char text[] = "Temperature = "; unsigned char enter[] = {0x0A,0x0D}; //回车符//关闭数码管显示P0 = 0x00; //位选置低P2 = 0xC0;P2 = 0x00;//关闭发光二极管显示P0 = 0xFF; //低有效P2 = 0x80;P2 = 0x00;while(1);}8. 1 AT24C02(2K位串行CMOS E2PROM)主程序:#include "reg52.h"#include "24c02.h"unsigned char dspflag;unsigned char cnt;unsigned char tflag;unsigned char code dsp_code_ca[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0 x80,0x90};void display(unsigned char d);void init_t0(void);void main(){//wrbyte_24c02(0x00,0x00);cnt = rdbyte_24c02(0x00);wrbyte_24c02(0x00,cnt+1);init_t0();while(1){display(cnt);}}void isr_t0(void) interrupt 1{tflag++;if(tflag == 16){tflag = 0;dspflag ++;if(dspflag == 3)dspflag = 0;}} void uart_tx(unsigned char *p,unsigned char length);char dat(char a);void main(void){unsigned char temp;SCON = 0x50;TMOD = 0x22;TH1 = 0xF3;TL1 = 0xF3;TH0 = 0x06;TL0 = 0x06;EA = 1;ET0 = 1;TR0 = 1;TR1 = 1;while(1){if(secflag == 1){secflag = 0;uart_tx(text,14);temp = rd_temperature();if(temp>99){SBUF = temp/100 + 0x30;while(TI == 0);TI = 0;}if(temp>9){SBUF = temp%100/10 + 0x30;while(TI == 0);TI = 0;}SBUF = temp%100%10 + 0x30;while(TI == 0);TI = 0;uart_tx(enter,2);}}}//定时器TO中断服务函数void isr_t0(void) interrupt 1void init_t0(void){TMOD = 0x02;TH0 = 0x06;TL0 = 0x06;ET0 = 1;EA = 1;TR0 = 1;}void display(unsigned char d){if((dspflag == 0)&&(d>99)){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d/100];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x20;P2 |= 0xC0;P2 &= 0x3F;}if((dspflag == 1)&&(d>9)){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d%100/10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x40;P2 |= 0xC0;P2 &= 0x3F;}if(dspflag == 2){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d%100%10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x80;P2 |= 0xC0;P2 &= 0x3F;}}8. 2 AT24C02(2K位串行CMOS E2PROM)程序:#include "24c02.h" {tflag++;if(tflag == 4000){tflag = 0;secflag = 1;}}//串口传输函数void uart_tx(unsigned char *p,unsigned char length){unsigned char i;for(i=0;i<length;i++){SBUF = *(p+i);while(TI == 0);TI = 0;}}6.2 DS18b20(温度传感器)程序:#include "ds18b20.h"//延时函数void delay(unsigned int t){while(t--);}//DS18B20初始化函数bit init_ds18b20(void){bit initflag = 0;DQ = 1;delay(12);DQ = 0;delay(80); // 延时大于480usDQ = 1;delay(10); // 14initflag = DQ; // initflag等于1初始化失败delay(5);return initflag;}//通过单总线向从器件写一个字节void wr_ds18b20(unsigned char byt){unsigned char i;for(i=0;i<8;i++){DQ = 0;void iic_start(void){SDA = 1;_nop_();SCL = 1;somenop;SDA = 0;somenop;SCL = 0;}void iic_stop(void){SDA = 0;_nop_();SCL = 1;somenop;SDA = 1;}void iic_ack(bit ackbit){if(ackbit)SDA = 0;elseSDA = 1;somenop;SCL = 1;somenop;SCL = 0;SDA = 1;somenop;}bit iic_waitack(void){SDA = 1;somenop;SCL = 1;somenop;if(SDA){SCL = 0;iic_stop();return 0;}else{SCL = 0;return 1;}}void iic_sendbyte(unsigned char byt) {unsigned char i;DQ = byt&0x01;delay(5);DQ = 1;byt >>= 1;}delay(5);}//通过单总线从从器件读一个字节unsigned char rd_ds18b20(void){unsigned char i;unsigned char byt;for(i=0;i<8;i++){DQ = 0;byt >>= 1;DQ = 1;if(DQ){byt |= 0x80;}delay(5);}return byt;}//温度转换、读取及数据处理器函数unsigned char rd_temperature(void) {unsigned char low,high;char temp;init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0x44); //启动温度转换delay(200);init_ds18b20();wr_ds18b20(0xCC);wr_ds18b20(0xBE); //读取寄存器low = rd_ds18b20(); //低字节high = rd_ds18b20(); //高字节temp = high<<4;temp |= (low>>4);return temp;}for(i=0;i<8;i++){if(byt&0x80)SDA = 1;elseSDA = 0;somenop;SCL = 1;byt <<= 1;somenop;SCL = 0;}}unsigned char iic_recbyte(void){unsigned char da;unsigned char i;for(i=0;i<8;i++){SCL = 1;somenop;da <<= 1;if(SDA)da |= 0x01;SCL = 0;somenop;}return da;}void wrbyte_24c02(unsigned char add,unsigned char dat){// Device Address 1100 000 R/Wiic_start();iic_sendbyte(0xa0);iic_waitack();iic_sendbyte(add);iic_waitack();iic_sendbyte(dat);iic_waitack();iic_stop();delay(10);}unsigned char rdbyte_24c02(unsigned char add){// Device Address 1100 000 R/W unsigned char da;iic_start();iic_sendbyte(0xa0);iic_waitack();iic_sendbyte(add);iic_waitack();iic_start(); 9.1 ADC主程序:#include "reg52.h"#include "pcf8591.h"void init_t0(void);void init_pcf8591(void);void display(unsigned char d);bit adcflag = 0;unsigned char dspflag;unsigned char tflag1;unsigned char tflag2;unsigned char code dsp_code_ca[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80 ,0x90};void main(void){unsigned char adcvalue;init_pcf8591();init_t0();while(1){display(adcvalue);if(adcflag == 1){adcvalue = adc_pcf8591();adcflag = 0;}}}void isr_t0(void) interrupt 1{tflag1++;tflag2++;if(tflag1 == 16) //4ms{tflag1 = 0;dspflag++;if(dspflag == 3)dspflag = 0;}if(tflag2 == 80) //20ms{tflag2 = 0;adcflag = 1;}}void init_t0(void){TMOD = 0x02;TH0 = 0x06;TL0 = 0x06;iic_sendbyte(0xa1);iic_waitack();da = iic_recbyte();iic_ack(0);iic_stop();return da;}void delay(unsigned char t){unsigned char i;while(t--){for(i=0;i<112;i++);}}10.1 DAC主程序:#include "reg52.h"#include "pcf8591.h"#include "math.h"unsigned char idata table[128];void main(void){unsigned char i = 0;for(i=0;i<128;i++){table[i] = 127*sin(2.0*3.1415/256.0*i*2)+128;}iic_start();iic_sendbyte(0x90);iic_waitack();iic_sendbyte(0x40); //选择DAC功能iic_waitack();while(1){for(i=0;i<128;i++){iic_sendbyte(table[i]); //通过PCF8591输出正弦波iic_waitack();}}}ET0 = 1;EA = 1;TR0 = 1;}void init_pcf8591(void){iic_start();iic_sendbyte(0x90);iic_waitack();iic_sendbyte(CHANNEL_3);iic_waitack();iic_stop();delay(10);}void display(unsigned char d){if((dspflag == 0)&&(d>99)){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d/100];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x20;P2 |= 0xC0;P2 &= 0x3F;}if((dspflag == 1)&&(d>9)){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d%100/10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x40;P2 |= 0xC0;P2 &= 0x3F;}if(dspflag == 2){P0 = 0xFF;P2 |= 0xE0;P2 &= 0x1F;P0 = dsp_code_ca[d%100%10];P2 |= 0xE0;P2 &= 0x1F;P0 = 0x80;P2 |= 0xC0;P2 &= 0x3F;}10.2 DAC(pcf8591)程序:#include "pcf8591.h"void iic_start(void){SDA = 1;_nop_();SCL = 1;somenop;SDA = 0;somenop;SCL = 0;}void iic_stop(void){SDA = 0;_nop_();SCL = 1;somenop;SDA = 1;}bit iic_waitack(void){SDA = 1;somenop;SCL = 1;somenop;if(SDA){SCL = 0;iic_stop();return 0;}else{SCL = 0;return 1;}}void iic_sendbyte(unsigned char byt) {unsigned char i;for(i=0;i<8;i++){if(byt&0x80)SDA = 1;elseSDA = 0;somenop;SCL = 1;byt <<= 1;somenop;SCL = 0;}} }9.2 ADC(pcf8591)程序:#include "pcf8591.h"void iic_start(void){SDA = 1;_nop_();SCL = 1;somenop;SDA = 0;somenop;SCL = 0;}void iic_stop(void){SDA = 0;_nop_();SCL = 1;somenop;SDA = 1;}void iic_ack(bit ackbit){if(ackbit)SDA = 0;elseSDA = 1;somenop;SCL = 1;somenop;SCL = 0;SDA = 1;somenop;}bit iic_waitack(void){SDA = 1;somenop;SCL = 1;somenop;if(SDA){SCL = 0;iic_stop();return 0;}else{SCL = 0;return 1;}}void iic_sendbyte(unsigned char byt) {unsigned char i;for(i=0;i<8;i++){if(byt&0x80)SDA = 1;elseSDA = 0;somenop;SCL = 1;byt <<= 1;somenop;SCL = 0;}}unsigned char iic_recbyte(void) {unsigned char da;unsigned char i;for(i=0;i<8;i++){SCL = 1;somenop;da <<= 1;if(SDA)da |= 0x01;SCL = 0;somenop;}return da;}void delay(unsigned char t){unsigned char i;while(t--){for(i=0;i<112;i++);}}unsigned char adc_pcf8591(void) {unsigned char temp;iic_start();iic_sendbyte(0x91);iic_waitack();temp = iic_recbyte();iic_ack(0);iic_stop();return temp; }。
07年比赛编程题本届编程比赛题目在内容难度有所加深,小学涉及到的指令范围如下:小学程序长度在20条指令左右;中学包括所有指令,程序长度在30条指令左右,要求用到控制循环的次数或过程调用。
2006年第二届北京市比赛题目数码管编程(有效时间5分钟)用DP801单片机控制DP801-2扩展板上的数码管,要求循环显示下面的数,每个数显示0. 5秒:小学组(10题,断开、接通端口数累计15次)1、P372、L403、H184、E545、8F56、b257、U648、3C69、H35 10、5F3初中组(10题,断开、接通端口数累计19次)1、P1372、L4203、H1824、2E135、8F436、3b257、U6478、3C969、H357 10、85F3高中组(10题,断开、接通端口数累计21次)1、P13792、L42063、H18244、2E1435、 8F4136、34b257、U96478、37C969、H3579 10、85F36三色灯编程(有效时间5分钟)用DP801单片机控制DP801-1扩展板上的三色灯,左灯——1号灯,中灯——2号灯,右灯——3号灯。
要求如下:小学组(约22字节,10题)1、11灯发红光;22灯发绿光;33灯闪动橙(黄)光,闪动间隔0.5秒;2、11灯闪绿光,闪动间隔0.5秒;22灯不发光;33灯发红光;3、11灯不发光;22灯在红、橙(黄)光间转换,转换间隔0.5秒;33灯发绿光;4、11灯发绿光;22灯不发光;33灯在绿橙(黄)光间转换,转换间隔0.5秒;5、11灯发红光;22灯闪动橙(黄)光,闪动间隔0.5秒;33灯发绿光;6、11灯在橙(黄)、红光间转换,转换间隔0.5秒;22灯发绿光;33灯不发光;7、11灯发绿光;22灯发红光;33灯闪动绿光,闪动间隔0.5秒;8、11灯闪红光,闪动间隔0.5秒;22灯不发光;33灯发绿光;9、11灯发红光;22灯在红、绿光间转换,转换间隔0.5秒;33灯发绿光;10、11灯不发光;22灯发绿光;33灯在绿橙光间转换,转换间隔0.5秒;初中组(约32字节,10题)1、1按住K1键1灯发绿光;2按住K2键2灯不发光;3正常情况下,1灯不发光,2灯发绿光,3灯发红光;2、1按住K1键2灯发绿光;2按住K2键3灯不发光;3正常情况下,1灯发红光,2灯不发光,3灯发绿光;3、1按住K1键3灯发绿光;2按住K2键1灯不发光;3正常情况下,1灯发绿光,2灯发红光,3灯不发光;4、1按住K1键1灯发橙(黄)光;2按住K2键2灯发橙(黄)光;3正常情况下,1灯发红光,2灯发绿光,3灯不发光;5、1按住K1键1灯发红光;2按住K2键2灯发红光;3正常情况下,1灯发绿光,2灯不发光,3灯发红光;6、1按住K1键1灯发绿光;2按住K2键2灯发绿光;3正常情况下,1灯不发光,2灯发红光,3灯发绿光;7、1按住K1键1灯发橙(黄)光;2按住K2键2灯发橙(黄)光;3正常情况下,1灯发红光,2灯发绿光,3灯发红光;8、1按住K1键1灯发绿光;2按住K2键2灯发绿光;3正常情况下,1灯发绿光,2灯发红光,3灯发红光;9、1按住K1键1灯发红光;2按住K2键2灯发红光;3正常情况下,1灯发红光,2灯发绿光,3灯不发光;10、1按住K1键1灯不发光;2按住K2键2灯发橙(黄)光;3正常情况下,1灯发绿光,2灯不发光,3灯发红光;高中组(约52字节,10题)1、1按住K1键1灯闪动红光,2按住K2键2灯闪动绿光;3正常情况下,1灯发绿光,2灯发红光,3灯不发光;4闪动时间间隔为0.5秒;2、1按住K1键2灯闪动绿光,2按住K2键3灯闪动红光;3正常情况下,1灯不发光,2灯发红光,3灯发绿光; 4闪动时间间隔为0.5秒;3、、1按住K1键1灯闪动红光,2按住K2键3灯闪动绿光;3正常情况下,1灯发绿光,2灯不发光,3灯发红光;4闪动时间间隔为0.5秒;4、1按住K1键1灯在红、绿光间转换,2按住K2键2灯在红、橙(黄)光间转换;3正常情况下, 1灯发红光,2灯发绿光,3灯发红光;4转换时间间隔为0.5秒;5、1按住K1键2灯在红绿光间转换,2按住K2键3灯在红、橙(黄)光间转换;3正常情况下,1灯发绿光,2灯发红光,3灯发绿光; 4转换时间间隔为0.5秒;6、1按住K1键1灯在红、橙(黄)光间转换,2按住K2键3灯在红、绿光间转换;3正常情况下,1灯发绿光,2灯发红光,3灯不发光;4转换时间间隔为0.5秒;7、1按住K1键1灯闪动红光,2按住K2键2灯在红、橙(黄)光间转换;3正常情况下,1灯发绿光,2灯不发光,3灯发红光;4闪动或转换时间间隔为0.5秒;8、1按住K1键2灯闪动红光,2按住K2键3灯在红、绿光间转换;3正常情况下,1灯发红光,2灯发绿光,3灯不发光;4闪动或转换时间间隔为0.5秒;9、1按住K1键2灯闪动红光,2按住K2键1灯闪动绿光;3正常情况下,1灯发绿光,2灯发红光,3灯不发光;4闪动时间间隔为0.5秒;10、1按住K1键3灯闪动绿光,2按住K2键1灯在红、绿光间转换;3正常情况下,1灯不发光,2灯发绿光,3灯发红光;4闪动或转换时间间隔为0.5秒;2007年第三届海淀区比赛练习题目小学1. 11号灯同时按红黄绿的顺序发光,每换一种颜色用休止符延时,循环3次之后都不发光;22号灯始终不发光;33号灯始终不发光。
直到按复位键结束程序的运行,1、2、3号灯才恢复为发黄光。
2. 11号灯始终不发光;22号灯始终不发光;33号灯按绿红黄的顺序发光,每换一种颜色用休止符延时,循环3次后不发光。
直到按复位键结束程序的运行,1、2、3号灯才恢复为发黄光。
3. 11号灯发红光时2号灯发绿光,2号灯发红光时1号灯发绿光,两灯交替闪烁,循环10次之后为不发光;23号灯始终不发光。
直到按复位键结束程序的运行,1、2、3号灯才恢复为发黄光。
初中1. 1不按键,1、2、3号灯同时按红黄绿的顺序发光,每换一种颜色用休止符延时,循环3次之后都不发光;2按K1键,1号灯发红光;3按K2键,2号灯发绿光。
2. 1不按键,1、2、3号灯都不发光;2按K1键,1号灯发红光,2号灯发黄光,3号灯发绿光;3按K2键,1、2、3号灯同时按绿红黄的顺序发光,每换一种颜色用休止符延时,循环3次后都发黄色光。
高中1. 1不按键,1、2、3号灯同时按红黄绿的顺序发光,每换一种颜色用休止符延时,循环3次之后都不发光;2按住K1键,1号灯闪动红光,闪动时间间隔为0.5秒;3按住K2键,2号灯闪动绿光,闪动时间间隔为0.5秒。
2. 1不按键,1、2号灯都不发光,3号灯按绿黄红的顺序发光,每换一种颜色用休止符延时,循环5次之后也不发光;2按住K1键,1号灯闪动红光,闪动时间间隔为0.3秒;3按住K2键,3号灯闪动绿光,闪动时间间隔为0.3秒。
DP883编程题1. 实验彩灯板物理连接:将彩灯实验板的1、2、3、4号灯的信号线接到单片机上的输出口。
编写程序:程序开始按1、2、3、4号绿灯顺序,依次闪亮。
按住+1键,闪光改为按4 、3 、2 、1号绿灯顺序闪亮,抬起+1键后,恢复原显示顺序。
2. 用彩灯实验板模仿秒表物理连接:将彩灯实验板上的信号线接在单片机上的输出口上。
编写程序:运行程序,发光管全不亮。
按一下+1键,彩灯实验板上四个绿色发光管按1秒时间间隔顺序轮流发光——1号灯亮,之后熄灭,2号灯点亮,之后熄灭……,无限循环。
按一下-1键,发光管停止轮流发光,保持刚才的发光状态。
再次按+1键,循环显示重新开始。
3. 数码管交替显示字符物理连接:将单片机输出和数码管输入对应接好。
编写程序:用-1键作为开关,不按键,数码管交替显示3、4,按住+1键,数码管上交替显示C、U 两个字符。
4. 用单片机显示温度变化物理连接:将温度实验板4个输出接到单片机输入,将数码管实验板输入按顺序接到单片机输出口。
编写程序:当温度最低时,单片机显示“0”,随着传感器的温度升高,单片机主板显示依次变为“1、2、3、4”,随着温度的降低,显示又依次变回“3、2、1、0”5. 声音控制彩灯硬件接线:声控实验板输出接单片机输入口,单片机输出口接到彩灯实验板控制信号输入端。
编写程序:平时各灯熄灭,每当话筒接收到声音时,1、2、3、4号绿灯依次各亮0.5秒,之后熄灭。
6. 光电控制数码管显示,硬件接线:光控实验板输出接单片机输入口,单片机输出口接到数码管实验板输入端。
编写程序:通常数码管显示“n”,当光线被挡住时时显示“F”。
7. 温控显示,硬件接线:温控实验板第2组输出接单片机输入口,单片机输出口接到数码管实验板输入端。
编写程序:常温下数码管显示“L”,当温度升高时,数码管显示“H”。
8. 模仿光控自动门,硬件接线:光控实验板输出接单片机输入口,单片机输出接到电机实验板输入端。
编写程序:当光线没有被遮挡时,电机不转,每当光线被遮挡一次,电机旋转3秒――表示打开大门;之后延时2秒――等待行人通过;再后电机反向旋转3秒――表示关闭大门。
若在门开的情况下,光还被挡,就仍延时,直到遮挡移开,延时两秒后电机才反转3秒,关闭大门。
9. 其它题目教师可以根据课堂的学习情况,启发学生,观察生活,结合生活实际,提出自己的设想,用现有材料模仿应用。
DP801现场编程例题㈠小学组题目:编程控制共阳数码管顺序显示一组数字3、5、7、9。
要求:⑴每个数字显示0.5秒,四个数字显示一遍,关闭1秒,再显示下一遍。
⑵四个数字共显示4遍。
注:单片机的输出口0~7与数码管的输入口已按顺序连好。
参考答案:地址指令机器码0.0. 04 000.2. 00 000.4. 00 010.6. 00 020.8. 00 030.9. 00 051.2. 03 00 03 用400毫秒代替显示0.4秒。
1.5. 01 011.7. 00 061.9. 03 00 032.2. 00 012.4. 01 032.6. 01 052.8. 01 063.0. 03 00 033.3. 00 033.5. 00 053.7. 00 063.9. 03 00 034.2. 01 064.4. 03 00 034.7. 01 004.9. 01 015.1. 01 025.3. 01 035.5. 01 055.7. 03 00 05 800毫秒代替关闭1秒。
6.0. 06 01 加数“1”(次数)6.2. 11 04 67 数相等转(显示4遍)6.5. 10 02 不到4遍循环检测到0.2.6.7. 03 25 06 用奏乐比较保险能完成任务(不用插音箱)7.0. 10 67 死循环。
(代替结束指令)2008中学组数码管编程题目解析20081104中学组数码管编程题目解析1.①正常情况下,数码管上循环显示5、7、3;②按住K键数码管上交替显示2、6,松开K 键则回到正常情况,且从停滞位置继续循环显示5、7、3。