第十四届蓝桥杯单片机第一场模拟赛程序

您所在的位置:网站首页 蓝桥杯单片机程序题怎么评分 第十四届蓝桥杯单片机第一场模拟赛程序

第十四届蓝桥杯单片机第一场模拟赛程序

2024-07-16 13:08:05| 来源: 网络整理| 查看: 265

第十四届蓝桥杯单片机第一场模拟赛程序

题目来源于4T评测网 www.4t.wiki

赛题:  一、基本要求

使用大赛组委会提供的国信长天单片机竞赛实训平台,完成本试题的程序设计与调试。程序编写、调试完成后,选手需通过考试系统提交以准考证号命名的hex文件。不符合以上文件提交要求的作品将被评为零分或者被酌情扣分。

硬件设置:

将IAP15F2K61S2单片机内部振荡器频率设定为12MHz,串口通信波特率为9600bps。

键盘工作模式跳线J5配置为KBD矩阵按键模式。

扩展方式跳线J13配置为IO模式。

请注意:选手需严格按照以上要求配置竞赛板,编写和调试程序,不符合以上配置要求的作品将被评为零分或者被酌情扣分。

二、硬件框图

                                                            图1 系统硬件框图

三、功能描述

3.1 基本功能描述

1) 通过PCF8591的ADC通道测量电位器RB2的输出电压,模拟噪音分贝。噪音数据与电压关系曲线如下图所示。

                                              图2 噪音分贝与电压采集关系曲线

2)通过数码管显示模拟的噪音分贝和分贝参数,显示界面可以通过按键切换。

3)通过串口向PC端返回当前噪音数据。

4)通过按键实现界面的切换和分贝参数的调整。

5)通过LED指示灯完成题目要求的输出指示功能。

3.2 数码管显示

1)噪音界面

噪音界面如图3所示,显示内容包括界面提示符(U1)和噪音数据,噪音数据保留小数点后1位有效数据。

固定使用三位数码管显示噪音数据,当数据长度不足3位时,高侧(左侧)数码管熄灭。

                                                图3 噪音分贝显示界面(54.6dB)

2)参数界面

参数界面如图3所示,显示内容包括界面提示符(U2)和参数数据。

固定使用两位数码管显示分贝参数数据,当数据长度不足2位时,高侧(左侧)数码管熄灭。

                                             图4 分贝参数显示界面(65dB)

3.3 按键功能

1)按键S12定义为“切换”按键,按下S12按键,能够切换“噪音分贝显示界面”、“分贝参数显示界面”。

                                                             图5 按键S12‘切换’

2)按键S16定义为“加”按键,在“分贝参数显示界面”时,按下S16按键,当前分贝参数加5dB。

                                                             图6 按键S16‘加’

3)按键S17定义为“减”按键,在“分贝参数显示界面”时,按下S17按键,当前分贝参数减5dB。

                                                            图7 按键S17‘减’

注意:

按键S16和按键S17仅在“参数界面”有效

判断按键是否按下时,需进行消抖操作,避免单次按键操作,触发多次结果。

3.4 串口通信功能

当前界面处于噪音分贝显示界面时,当串口收到字符串“Return”时,将当前检测的噪音数据发送给PC端的串口调试工具。

                           串口打印格式为: “Noises:54.6dB”

设备串口返回数据格式为字符串。

串口通信波特率:9600bps,请使用竞赛平台上的USB转串口单元完成此项功能。

3.5 LED指示灯功能

1) 当前界面处于噪音分贝显示界面时,L1指示灯点亮,否则熄灭。

2) 当前界面处于分贝参数显示界面时,L2指示灯点亮,否则熄灭。

3) 当噪音分贝超过分贝参数时,L8指示灯以0.1s为间隔切换亮灭状态;否则熄灭。

4) 指示灯L3-L7处于熄灭状态。

3.6 初始化

1) 数码管默认处于噪音分贝显示界面。

2) 上电默认分贝参数为65dB,参数设置范围为0-90。

 

程序 :

main.c

/* 第十四届蓝桥杯单片机第一场模拟赛程序 by Wul */ #include "STC15F2K60S2.h" #include "iic.h" #include "stdio.h" #define uchar unsigned char #define uint unsigned int sbit LED8=P0^7; code unsigned char Seg_Table[] = { 0xc0, //0 0xf9, //1 0xa4, //2 0xb0, //3 0x99, //4 0x92, //5 0x82, //6 0xf8, //7 0x80, //8 0x90, //9 0x88, //A 0x83, //b 0xc6, //C 0xa1, //d 0x86, //E 0x8e, //F 0xff, //灭 16 0xc1 //U 17 1100 0001 }; uchar dspbuff[8]={16,16,16,16,16,16,16,16}; uchar dspcom=0; uchar temp,JieMian,Canshu=65; uchar ad_value; uchar intr=0,intr1=0; uchar JieMian=1; code uchar s1[]={"Noises:"}; code uchar s2[]={"dB"}; uchar str[10]; uchar str1[10]; uchar rxcnt=0; uchar str_re='R'; uint v_value,Zaoyin; bit flag,L8,rxc=0,state=0; // *********** 初始化函数 ****************************************** void InitAll() { P2=(P2&0x1f)|0x80; P0=0xff; P2=(P2&0x1f)|0xa0; P0=0x00; P2=(P2&0x1f); } void UartInit(void) //[email protected] { SCON = 0x50; //8位数据,可变波特率 AUXR &= 0xBF; //定时器时钟12T模式 AUXR &= 0xFE; //串口1选择定时器1为波特率发生器 TMOD &= 0x0F; //设置定时器模式 TL1 = 0xE6; //设置定时初始值 TH1 = 0xFF; //设置定时初始值 ET1 = 0; //禁止定时器中断 TR1 = 1; //定时器1开始计时 ES=1;EA=1; } void Timer0_Init(void) //2毫秒@12.000MHz { AUXR &= 0x7F; //定时器时钟12T模式 TMOD &= 0xF0; //设置定时器模式 TL0 = 0x30; //设置定时初始值 TH0 = 0xF8; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0=1;EA=1; } void DisplaySMG() { P2=(P2&0x1f)|0xe0; P0=0xff; P2=(P2&0x1f); P2=(P2&0x1f)|0xc0; P0=19)dspbuff[6]=Zaoyin/10%10; dspbuff[7]=Zaoyin%10; } void displayCanshu() { dspbuff[0]=17; //U2 dspbuff[1]=2; dspbuff[5]=16; if(Canshu>9) dspbuff[6]=Canshu/10; else dspbuff[6]=16; dspbuff[7]=Canshu%10; } void ScanKey() { P32=1;P33=1;P34=1;P35=0; if(P33==0) //S12 { Delay5ms(); if(P33==0) { if(JieMian==1) JieMian=2; else if(JieMian==2) { JieMian=1; } } while(!P33); } P32=1;P33=1;P34=0;P35=1; if(P32==0) //S17 { Delay5ms(); if(P32==0) { if(JieMian==2) { if(Canshu=90) Canshu=0; else Canshu=Canshu+5; } } while(!P33); } } //*********************** MAIN.H *************************** void main() { InitAll(); Timer0_Init(); UartInit(); while(1) { if(flag) { flag=1; ad_value=Read_PCF8591(); v_value=ad_value*10/51; Zaoyin=v_value*18; } if(JieMian==1) { displayZaoyin(); P2=(P2&0x1f)|0x80; P0=0xfe; } else if(JieMian==2) { displayCanshu(); P2=(P2&0x1f)|0x80; P0=0xfd; } if((Zaoyin/10)>Canshu) { if(intr1


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭