首页 > 其他分享 >第十届蓝桥杯单片机省赛题目

第十届蓝桥杯单片机省赛题目

时间:2024-03-28 19:31:03浏览次数:24  
标签:count freq void 蓝桥 单片机 smg 省赛 display change

第一部分

选择题:

1.B

2.可作为高8位地址

3.Timer0:
模式1 16位自動重裝載模式
模式2 16位不可重裝載模式
模式3 8位自動重裝載模式
模式4 不可屏蔽中斷的16位自動重裝載模式

Timer1:
模式1 16位自動重裝載模式
模式2 16位不可重裝載模式
模式3 8位自動重裝載模式
模式4 無效,停止計數

Timer2:
16位自動重裝載模式

4.c

5.D

6.PCON电源管理寄存器,SCON串口寄存器,AUXR辅助寄存器,TCON定时器寄存器

选D

7.A

8.A

9.D

10.A

第二部分

这次的程序题不难

代码如下

#include "STC15.h"
#include "sys.h"
#include "smg.h"
#include "iic.h"
#include "key.h"
long int freq = 0;
uchar V_count=120;
uchar S4_change=0;long int freq_new;
uchar dat,S5_change=1,S6_change=1;
float V_zhen=0;
void pl_display(void)
{
	uchar gaowei=0;
	//频率数据显示使用 6 位数码管,当显示的数据长度不
//足 6 位时,未使用到的数码管位应熄灭。
	if(S4_change==1)
	{
		smg_display(0,15,0);
		smg_display(1,18,0);
		
		if(freq/100000==0&&gaowei==0)
			smg_display(2,18,0);
		else 
		{
			smg_display(2,freq/100000,0);gaowei=1;
		}
			
		
		if(freq%100000/10000==0&&gaowei==0)
			smg_display(3,18,0);
		else 
		{
			smg_display(3,freq%100000/10000,0);gaowei=1;
		}
			
		
		if(freq/1000%10==0&&gaowei==0)
			smg_display(4,18,0);
		else 
		{
			smg_display(4,freq/1000%10,0);gaowei=1;
		}
			
		
		if(freq/100%10==0&&gaowei==0)
			smg_display(5,18,0);
		else 
		{
			smg_display(5,freq/100%10,0);gaowei=1;
		}
			
		
		if(freq%100/10==0&&gaowei==0)
			smg_display(6,18,0);
		else 
		{
			smg_display(6,freq%100/10,0);gaowei=1;
		}
			
		
		if(freq%10==0&&gaowei==0)
			smg_display(7,18,0);
		else 
		{
			smg_display(7,freq%10,0);gaowei=1;
		}
		if(S6_change==1)
		{
			P0 = 0xfd;
			hc573(4);
		}
	}

}
void V_display(void)
{
	if(S4_change==0)
	{
		
		smg_display(0,26,0);
		smg_display(1,18,0);
		smg_display(2,18,0);
		smg_display(3,18,0);
		smg_display(4,18,0);
		
		V_zhen = V_count/48.0;
		//V_xiao = V_count%48/5;
		if(V_count==240)V_zhen=5;
		smg_display(5,(unsigned char)V_zhen,1);
		smg_display(6,(unsigned int)(V_zhen*100)/10%10,0);
		smg_display(7,(unsigned int)(V_zhen*100)%10,0);
		
		if(S6_change==1)
		{
			P0 = 0xfe;
			hc573(4);
		}
	}

}
void S5_cufa(void)
{
	if(dat==5)S5_change++;if(S5_change==2)S5_change=0;
	if(S5_change==0)V_count=read_pc(0x03);
	if(S5_change==1)V_count=100;
	
}
void S6_cufa(void)
{
	if(dat==6)
	{
		P0 = 0xff;
		S6_change++;
	}
	if(S6_change==2)
	{
		
		S6_change=0;Delay1ms(20);
	}
	
	if(S6_change==0)
	{
		P0 = 0xff;hc573(4);
	}
	if(S6_change==1&&S5_change==0)
	{
		if(V_count<72)
		{
			P0 = P0 | 0x04;
		}
		else if(V_count>=72 && V_count<120)
		{
			P0 = P0 & 0xfb;
		}
		else if(V_count>=120 && V_count<168)
		{
			P0 = P0 | 0x04;
		}
		else if(V_count>=168)
		{
			P0 = P0 & 0xfb;
		}
		hc573(4);
	}
	else if(S6_change==1&&S5_change==1)
	{
		P0 = P0 | 0x04;hc573(4);
	}
	if(S6_change==1)//freq
	{
		if(freq>1000)P0 = P0 | 0x80;
		if(freq>=1000&&freq<5000)P0 = P0 & 0xf7;
		if(freq>=5000&&freq<10000)P0 = P0 | 0x80;
		if(freq>=10000)P0 = P0 & 0xf7;
		hc573(4);
	}
}
int a=0;
//计数0.01ms,
//1MS的次数,f = 
void Timer0_Isr(void) interrupt 1
{
	freq_new++;
	
}

void Timer0_Init(void)		//1微秒@12.000MHz
{
	AUXR &= 0x7F;			//定时器时钟12T模式
	TMOD = 0xF4;			//设置定时器模式
	TL0 = 0xFF;				//设置定时初始值
	TH0 = 0xFF;				//设置定时初始值
	TF0 = 0;				//清除TF0标志
	TR0 = 1;				//定时器0开始计时
	ET0 = 1;				//使能定时器0中断
	EA = 1;
}
int time_count=1000;
void Timer1_Isr(void) interrupt 3
{
	time_count--;
	if(time_count==0)
	{
		TR0 = 0;TR1 = 0;freq=freq_new;freq_new=0;
		time_count=1000;
	}
}

void Timer1_Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x40;			//定时器时钟1T模式
	TMOD &= 0x0F;			//设置定时器模式
	TL1 = 0x20;				//设置定时初始值
	TH1 = 0xD1;				//设置定时初始值
	TF1 = 0;				//清除TF1标志
	TR1 = 1;				//定时器1开始计时
	ET1 = 1;				//使能定时器1中断
}
uint time2_count=1000;

void Timer2_Isr(void) interrupt 12
{
	time2_count--;
	while(time2_count==0)
	{
		time2_count=1000;TR0 = 1;TR1 = 1;//freq=0;
	}
}

void Timer2_Init(void)		//1毫秒@12.000MHz
{
	AUXR |= 0x04;			//定时器时钟1T模式
	T2L = 0x20;				//设置定时初始值
	T2H = 0xD1;				//设置定时初始值
	AUXR |= 0x10;			//定时器2开始计时
	IE2 |= 0x04;			//使能定时器2中断
}

void main()
{
	uint num=0;
	sysinit();
//	P0 = 0x00;
//	hc573(4);
	//smg_display(0,0,1);
	Timer0_Init();
	Timer1_Init();Timer2_Init();
	while(1)
	{
		//V_display();
		dat = key_display();
		if(dat==4)S4_change++;if(S4_change==2)S4_change=0;
		pl_display();
		V_display();
		S5_cufa();
		S6_cufa();
//		if(dat==)
//		{
//			TR0 = 1;
//			TR1 = 1;
//		}//freq = a;
		//num = TH0<<8||TL0;
		//smg_display(1,num,0);
//		dat = read_pc(0x03);
//		smg_display(0,freq/1000,0);
//		smg_display(1,freq%1000/100,0);
//		smg_display(2,freq%100/10,0);
//		smg_display(3,freq%10,0);
//		write_pc(0);
	}
}

标签:count,freq,void,蓝桥,单片机,smg,省赛,display,change
From: https://blog.csdn.net/weixin_64660003/article/details/136852437

相关文章

  • 蓝桥杯——仙境诅咒(dfs)
    问题描述:思路概述:1)准备工作:(1)设立一个数组vector<pair<double,double>>p,存储每个人的位置;(2)设立一个数组vector<vector<int>>a,记录每个人所对应的距离小于D的人都有谁;(3)设立一个数组boolvis[12345]={0},记录每个人是否被污染;2)搜索:(1)第一个人已经被污染了,vis[0]=1;dfs......
  • P8792 [蓝桥杯 2022 国 A] 最大公约数
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;constintN=1e5+5;intgcd(intx,inty){re......
  • 郭天祥新概念51单片机(第四期读书笔记)
    时钟周期、状态周期、机器周期、指令周期与晶振频率之间的关系1、晶振频率与脉冲的关系假设单片机的晶振频率是12MHz,那么它的一个脉冲为1/12微秒;晶振单位时间发出的脉冲则为:12∗......
  • 第十一届蓝桥杯单片机省赛解答
    第一部分1.C2.BD3.B4.D5.ABC6.B7.AB8.D9.ABCD10.C接收和发送数据是互不影响的第二部分#include"STC15.h"#include"sys.h"#include"smg.h"#include"onewire.h"#include"iic.h"#include"key.h"uinttemp=0;......
  • 蓝桥杯试题 基础练习 特殊回文数
    问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数字之和等于n。输入格式输入一行,包含一个正整数n。输出格式按从小到大的顺序输出满足条件的整数,每个整数占一行。样例......
  • 2023第14届蓝桥杯大赛软件赛省赛C/C++大学A组第6题题解
    目录问题描述:方法一:dfs暴力模拟(45%)方法二:dfs剪枝(100%)问题描述:        小蓝正在一个瓜摊上买瓜。瓜摊上共有n个瓜,每个瓜的重量为Ai。小蓝刀功了得,他可以把任何瓜劈成完全等重的两份,不过每个瓜只能劈一刀。小蓝希望买到的瓜的重量的和恰好为m。请问小蓝至......
  • 蓝桥杯单片机AT24C02
    一个简单的示例程序,统计开机次数。代码如下:#include<STC15F2K60S2.H>#include<intrins.h>#include"onewire.h"#include"iic.h"u8flag_display=0;u8flag_ds18b20=0;u8flag_at=0;u8at=0;u8temp=0;u8a[8]={10,10,10,10,10,10,10,10};voidctr......
  • 动态规划刷题(算法竞赛、蓝桥杯)--数字三角形(线性DP)
    1、题目链接:[USACO1.5][IOI1994]数字三角形NumberTriangles-洛谷#include<bits/stdc++.h>usingnamespacestd;intr;constintN=1010;inta[N][N];intmain(){ cin>>r; for(inti=1;i<=r;i++){ for(intj=1;j<=i;j++){ cin>>a[i][j]; ......
  • 《安富莱嵌入式周报》第335期:大量嵌入式书籍免费下载,CNC电机同步,智能家居比赛作品,EMF2
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV151421Q7P4/目录:1、大量嵌入式书籍免费下载,无需注册账号,直接下载2、EMF2024准备的电子胸牌3、CNC电机同步视频4、Hackaday举......
  • 【蓝桥杯3.23小白赛】(详解)
    第一题签到题不多说【二进制王国】#include<iostream>#include<vector>#include<algorithm>usingnamespacestd;//intCmp(strings1,strings2)测试了一下时间差确实很明显,还是用下面的内个intCmp(conststring&s1,conststring&s2)//const修饰表示在函......