第16届蓝桥杯单片机模拟试题Ⅱ

试题

代码 

sys.h

#ifndef __SYS_H__
#define __SYS_H__#include <STC15F2K60S2.H>
//ds1302.c
extern unsigned char time[3];
void w_ds1302();
void r_ds1302();
//iic.c
float v_adc(unsigned char addr);
//sys.c
extern float light_v;
extern float rb2_v;
extern unsigned char UI;
extern unsigned char UI_keep;
extern unsigned char ui2_son;
extern unsigned char ui2_son_flag;
extern unsigned char flag_touch[3];
extern unsigned char time_touch[3][3];
extern bit flag_happen;
void init74hc138(unsigned char addr);
void init();
void led_ui();
void rb2_or_light();
//seg_key.c
extern unsigned char Seg_Buff[8];
void Seg_Loop();
void Key_Loop();
void seg_ui();
#endif

main.c

#include "sys.h"
bit flag_seg=0;
bit flag_key=0;
bit flag_ds=0;
bit flag_rb2=0;
bit flag_light=0;
void Timer0_Init(void)		//100微秒@12.000MHz
{AUXR |= 0x80;			//定时器时钟1T模式TMOD &= 0xF0;			//设置定时器模式TL0 = 0x50;				//设置定时初始值TH0 = 0xFB;				//设置定时初始值TF0 = 0;				//清除TF0标志TR0 = 1;				//定时器0开始计时ET0 = 1;				//使能定时器0中断EA = 1;
}
void main(){init();Timer0_Init();w_ds1302();while(1){led_ui();if(flag_seg){flag_seg=0;Seg_Loop();}if(flag_key){flag_key=0;Key_Loop();seg_ui();}if(flag_ds){flag_ds=0;r_ds1302();}if(flag_light){flag_light=0;light_v=v_adc(3);seg_ui();}if(flag_rb2){flag_rb2=0;rb2_v=v_adc(1);seg_ui();}rb2_or_light();}
}
void Timer0_Isr(void) interrupt 1
{static unsigned char count1=0,count2=0;static unsigned int count3=0,count4=0,count5=0;count1++;count2++;count3++;count5++;if(count1==2){count1=0;flag_seg=1;}if(count2==50){count2=0;flag_key=1;}if(count3==1000){flag_light=1;}else if(count3==2000){count3=0;flag_rb2=1;}if(flag_happen){count4++;if(count4==30000){count4=0;flag_happen=0;UI=UI_keep;}}if(count5==5000){count5=0;flag_ds=1;}
}

sys.c

#include "sys.h"
unsigned char UI=0;
unsigned char UI_keep;
unsigned char ui2_son=0;
unsigned char ui2_son_flag=0;
unsigned char flag_touch[3]={0,0,0};
unsigned char time_touch[3][3]={0,0,0,0,0,0,0,0,0};
bit flag_happen=0;
float light_v;
float rb2_v;
void init74hc138(unsigned char addr){P2=(P2&0x1f)|(addr<<5);P2&=0x1f;
}
void init(){P0=0x00;init74hc138(5);P0=0xff;init74hc138(4);
}
void led(unsigned char addr){P0=~(0x01<<(addr-1));init74hc138(4);
}
void led_ui(){switch(UI){case 0:led(1);break;case 1:led(2);break;case 2:led(3);break;case 4:led(8);break;}
}
void rb2_or_light(){EA = 0;if(light_v<rb2_v&&flag_happen==0){flag_happen=1;flag_touch[ui2_son_flag]=1;ui2_son_flag++;if(ui2_son_flag==3)ui2_son_flag=0;time_touch[2][0]=time_touch[1][0];time_touch[2][1]=time_touch[1][1];time_touch[2][2]=time_touch[1][2];time_touch[1][0]=time_touch[0][0];time_touch[1][1]=time_touch[0][1];time_touch[1][2]=time_touch[0][2];time_touch[0][0]=time[0];time_touch[0][1]=time[1];time_touch[0][2]=time[2];UI_keep=UI;UI=4;}EA =1;
}

seg_key.c

#include "sys.h"
sbit ROW3=P3^2;
sbit ROW4=P3^3;
sbit COL1=P4^4;
sbit COL2=P4^2;
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 10
0xc6, //C 11
0x8c, //P 12
0xbf, //- 13
0xff, //熄灭 14
0xc1  //U 15
};
unsigned char Seg_Buff[8]={14,14,14,14,14,14,14,14};
unsigned char keyval,keyold,keyup,keydown;
void seg(unsigned char addr,unsigned char num){P0=0xff;init74hc138(7);P0=0x01<<addr;init74hc138(6);P0=Seg_Table[num];if(UI==1&&(addr==1||addr==5))P0&=0x7f;init74hc138(7);
}
void Seg_Loop(){static unsigned char i=0;seg(i,Seg_Buff[i]);i++;if(i==8) i=0;
}
unsigned char key_scan(){COL1=0;COL2=1;if(ROW3==0) return 5;if(ROW4==0) return 4;COL1=1;COL2=0;if(ROW4==0) return 8;return 0;
}
void Key_Loop(){keyval=key_scan();keydown=keyval&(keyold^keyval);keyup=~keyval&(keyold^keyval);if(keyval==4&&keyold!=4){UI++;if(UI==3) UI=0;ui2_son=0;}if(UI==2){if(keyval==5&&keyold!=5){ui2_son++;if(ui2_son==3) ui2_son=0;}if(keyval==8&&keyold!=8){ui2_son_flag=0;flag_touch[0]=0;flag_touch[1]=0;flag_touch[2]=0;}}keyold=keyval;keyval=0;
}
void ui0(){Seg_Buff[7]=time[0]%10;Seg_Buff[6]=time[0]/10;Seg_Buff[5]=13;Seg_Buff[4]=time[1]%10;Seg_Buff[3]=time[1]/10;Seg_Buff[2]=13;Seg_Buff[1]=time[2]%10;Seg_Buff[0]=time[2]/10;
}
void ui1(){Seg_Buff[7]=(unsigned char)(rb2_v*100+0.5)%10;Seg_Buff[6]=(unsigned char)(rb2_v*100+0.5)/10%10;Seg_Buff[5]=(unsigned char)(rb2_v*100+0.5)/100%10;Seg_Buff[4]=15; //USeg_Buff[3]=(unsigned char)(light_v*100+0.5)%10;Seg_Buff[2]=(unsigned char)(light_v*100+0.5)/10%10;Seg_Buff[1]=(unsigned char)(light_v*100+0.5)/100%10;Seg_Buff[0]=12; //p	
}
void ui2(){Seg_Buff[0]=10;Seg_Buff[1]=ui2_son+1;if(flag_touch[ui2_son]){Seg_Buff[7]=time_touch[ui2_son][0]%10;Seg_Buff[6]=time_touch[ui2_son][0]/10;Seg_Buff[5]=time_touch[ui2_son][1]%10;Seg_Buff[4]=time_touch[ui2_son][1]/10;Seg_Buff[3]=time_touch[ui2_son][2]%10;Seg_Buff[2]=time_touch[ui2_son][2]/10;}else{Seg_Buff[7]=13;Seg_Buff[6]=13;Seg_Buff[5]=13;Seg_Buff[4]=13;Seg_Buff[3]=13;Seg_Buff[2]=13;}
}
void ui4(){Seg_Buff[7]=time_touch[0][0]%10;Seg_Buff[6]=time_touch[0][0]/10;Seg_Buff[5]=time_touch[0][1]%10;Seg_Buff[4]=time_touch[0][1]/10;Seg_Buff[3]=time_touch[0][2]%10;Seg_Buff[2]=time_touch[0][2]/10;Seg_Buff[1]=11;Seg_Buff[0]=11;
}
void seg_ui(){switch(UI){case 0:ui0();break;case 1:ui1();break;case 2:ui2();break;case 4:ui4();break;}
}

iic.c

#include "sys.h"
#include "intrins.h"
#define DELAY_TIME	10
sbit sda=P2^1;
sbit scl=P2^0;
static void I2C_Delay(unsigned char n)
{do{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();		}while(n--);      	
}
void I2CStart(void)
{sda = 1;scl = 1;I2C_Delay(DELAY_TIME);sda = 0;I2C_Delay(DELAY_TIME);scl = 0;    
}
void I2CStop(void)
{sda = 0;scl = 1;I2C_Delay(DELAY_TIME);sda = 1;I2C_Delay(DELAY_TIME);
}
void I2CSendByte(unsigned char byt)
{unsigned char i;for(i=0; i<8; i++){scl = 0;I2C_Delay(DELAY_TIME);if(byt & 0x80){sda = 1;}else{sda = 0;}I2C_Delay(DELAY_TIME);scl = 1;byt <<= 1;I2C_Delay(DELAY_TIME);}scl = 0;  
}
unsigned char I2CReceiveByte(void)
{unsigned char da;unsigned char i;for(i=0;i<8;i++){   scl = 1;I2C_Delay(DELAY_TIME);da <<= 1;if(sda) da |= 0x01;scl = 0;I2C_Delay(DELAY_TIME);}return da;    
}
unsigned char I2CWaitAck(void)
{unsigned char ackbit;scl = 1;I2C_Delay(DELAY_TIME);ackbit = sda; scl = 0;I2C_Delay(DELAY_TIME);return ackbit;
}
void I2CSendAck(unsigned char ackbit)
{scl = 0;sda = ackbit; I2C_Delay(DELAY_TIME);scl = 1;I2C_Delay(DELAY_TIME);scl = 0; sda = 1;I2C_Delay(DELAY_TIME);
}
unsigned char adc(unsigned char addr){unsigned char temp;EA = 0;I2CStart();I2CSendByte(0x90);I2CWaitAck();I2CSendByte(addr);I2CWaitAck();I2CStart();I2CSendByte(0x91);I2CWaitAck();temp=I2CReceiveByte();I2CSendAck(1);I2CStop();EA = 1;return temp;
}
float v_adc(unsigned char addr){return (float)(adc(addr)/256.0*5.0);
}

ds1302.c

#include "sys.h"
#include "intrins.h"
sbit SCK=P1^7;
sbit SDA=P2^3;
sbit RST=P1^3;
unsigned char time[3]={50,59,23};
void Write_Ds1302(unsigned  char temp) 
{unsigned char i;for (i=0;i<8;i++)     	{ SCK = 0;SDA = temp&0x01;temp>>=1; SCK=1;}
}
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{RST=0;	_nop_();SCK=0;	_nop_();RST=1; 	_nop_();  Write_Ds1302(address);	Write_Ds1302(dat/10*16|dat%10);		RST=0; 
}
unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;unsigned char dat1,dat2;RST=0;	_nop_();SCK=0;	_nop_();RST=1;	_nop_();Write_Ds1302(address);for (i=0;i<8;i++) 	{		SCK=0;temp>>=1;	if(SDA)temp|=0x80;	SCK=1;} RST=0;	_nop_();SCK=0;	_nop_();SCK=1;	_nop_();SDA=0;	_nop_();SDA=1;	_nop_();dat1=temp/16;dat2=temp%16;temp=dat1*10+dat2;return (temp);			
}
void w_ds1302(){unsigned char i,addr=0x80;Write_Ds1302_Byte(0x8e,0x00);for(i=0;i<3;i++){Write_Ds1302_Byte(addr,time[i]);addr+=2;}Write_Ds1302_Byte(0x8e,0x80);
}
void r_ds1302(){unsigned char i,addr=0x81;for(i=0;i<3;i++){time[i]=Read_Ds1302_Byte(addr);addr+=2;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清华《数据挖掘算法与应用》FP-Growth算法

【例 8.7】实现FP 树算法,并对模拟数据集 simpDat挖掘频繁项集,最小支持度为2,绘制 FP树并输出频繁项集。 运行结果&#xff1a; 声明&#xff1a;著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 # -*- coding: utf-8 -*- ""&q…

npm 项目命名规则

以下是 npm 项目命名规则的详细说明&#xff1a; 一、核心命名规则 必须使用小写字母 名称中不能包含大写字母。原因&#xff1a; 跨平台兼容性&#xff08;如 Linux 区分大小写&#xff0c;而 Windows 不区分&#xff09;。避免命令行和 URL 中的大小写冲突&#xff08;例如包…

Ubertool 的详细介绍、安装指南及使用说明

Ubertool&#xff1a;多协议网络分析与调试平台 一、Ubertool 简介 Ubertool 是一款开源的 多协议网络分析工具&#xff0c;专为物联网&#xff08;IoT&#xff09;、嵌入式系统和工业自动化领域设计。它支持蓝牙、Wi-Fi、LoRa、CAN总线等多种通信协议的实时监控、数据包捕获…

AI重构农业:从“面朝黄土“到“数字原野“的产业跃迁—读中共中央 国务院印发《加快建设农业强国规划(2024-2035年)》

在东北黑土地的万亩良田上&#xff0c;无人机编队正在执行精准施肥作业&#xff1b;在山东寿光的智慧大棚里&#xff0c;传感器网络实时调控着番茄生长的微环境&#xff1b;在云南的咖啡种植园中&#xff0c;区块链溯源系统记录着每粒咖啡豆的旅程。这场静默的农业革命&#xf…

FogFL: Fog-Assisted Federated Learning for Resource-Constrained IoT Devices

摘要 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 -在本文中&#xff0c;我们提出了一个支持雾的联邦学习框架–FogFL–来促进资源受限的物联网环境中延迟敏感应用的分布式学习。联邦学习&#xff08;FL&#xff09;是一种流行的分…

linux下编译Websocketpp,适用x86和armv8

编译boost库 下载源文件&#xff1a;Version 1.79.0 编译&#xff1a; sudo ./bootstrap.sh sudo ./b2 install 安装websocketpp git clone https://github.com/zaphoyd/websocketpp.git cd websocketpp #进入目录 mkdir build cd build cmake .. make sudo make ins…

Linux学习笔记——零基础详解:什么是Bootloader?U-Boot启动流程全解析!

零基础详解&#xff1a;什么是Bootloader&#xff1f;U-Boot启动流程全解析&#xff01; 一、什么是Bootloader&#xff1f;&#x1f4cc; 举个例子&#xff1a; 二、U-Boot 是什么&#xff1f;三、U-Boot启动过程&#xff1a;分为两个阶段&#x1f539; 第一阶段&#xff08;汇…

Word 页眉设置(不同章节不同页眉)

需求分析 要给文档设置页眉&#xff0c;但是要不同的页眉不同的页眉 问题点&#xff1a;一旦设置页眉 每个页眉都是一样的 现在要设置不一样的 设置了页眉但是整个文章的页眉都一样 问题解决 取消链接 前一节&#xff08;不和前面的页眉同步更新&#xff09; 小结 不同的…

Debezium日常分享系列之:Debezium3.1版本之增量快照

Debezium日常分享系列之&#xff1a;Debezium3.1版本之增量快照 按需快照触发一次临时增量快照触发临时阻塞快照增量快照增量快照过程如何 Debezium 解决具有相同主键的记录之间的冲突快照窗口触发增量快照使用附加条件运行临时增量快照使用 Kafka 信号通道触发增量快照临时增量…

音视频开发从入门到精通:编解码、流媒体协议与FFmpeg实战指南

音视频开发从入门到精通&#xff1a;编解码、流媒体协议与FFmpeg实战指南 音视频技术作为数字媒体领域的核心&#xff0c;正在成为互联网和移动应用的重要组成部分。本文将全面介绍音视频开发的学习路径&#xff0c;从基础概念到高级应用&#xff0c;从编解码原理到实战案例&a…

bookkeeper基本概念

Apache BookKeeper 架构与基本概念 Apache BookKeeper 的架构 Apache BookKeeper 是一个高性能的分布式日志存储系统&#xff0c;主要用于存储和管理顺序写入的数据。它被设计用来提供低延迟、高吞吐量和强一致性的服务&#xff0c;常用于分布式系统中的日志存储需求&#xf…

Scala相关知识学习总结3

包 - 包声明&#xff1a;和Java类似&#xff0c;作用是区分同名类、管理类命名空间。Scala包名只能含数字、字母等&#xff0c;不能数字开头、不能用关键字。 - 包说明&#xff1a;有类似Java的包管理风格&#xff0c;也有独特嵌套风格。嵌套风格有两个特点&#xff0c;一是&…

在Spring Boot中实现图片上传和修改

1. 图片上传实现步骤 1.1 添加依赖 确保 spring-boot-starter-web 和 spring-boot-starter-validation 已存在&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> <…

网络原理 - HTTP/HTTPS

1. HTTP 1.1 HTTP是什么&#xff1f; HTTP (全称为 “超文本传输协议”) 是⼀种应用非常广泛的应用层协议. HTTP发展史&#xff1a; HTTP 诞生于1991年. 目前已经发展为最主流使用的⼀种应用层协议 最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的产品已经…

第十届MathorCup高校数学建模挑战赛-A题:无车承运人平台线路定价问题

目录 摘 要 一、问题提出 1.1 背景 1.2 问题重述 二、基本假设 三、符号说明 四、问题分析 4.1 问题一的分析 4.2 问题二的分析 4.3 问题三的分析 4.4 问题四的分析 五、模型的建立与求解 5.1 问题一模型的建立与求解 5.1.1 数据预处理 5.1.2 问题一结果检验:因子分析模型 5.2…

C++假期练习

思维导图 牛客练习

Go语言-初学者日记(四):包管理

众所周知——“包”治百病。 理解包与模块&#xff0c;是 Go 迈向工程化开发的关键一环&#xff01; &#x1f4c2; 一、包&#xff08;Package&#xff09;是 Go 的基本组织单位 在 Go 中&#xff0c;每个 .go 文件都属于某个包&#xff08;package&#xff09;&#xff1a; …

Scala面向对象2

1. 抽象属性和方法&#xff1a;用 abstract 关键字定义抽象类&#xff0c;其中抽象属性无初始值&#xff0c;抽象方法无实现 。重写抽象方法需用 override &#xff0c;重写抽象属性时&#xff0c;可变属性用 var &#xff0c;不可变属性用 val 。 匿名子类&#xff1a;和 Jav…

DiffAD:自动驾驶的统一扩散建模方法

25年3月来自新加坡公司 Carion 和北航的论文“DiffAD: A Unified Diffusion Modeling Approach for Autonomous Driving”。 端到端自动驾驶 (E2E-AD) 已迅速成为实现完全自动驾驶的一种有前途的方法。然而&#xff0c;现有的 E2E-AD 系统通常采用传统的多任务框架&#xff0c…

Python四大核心数据结构深度解析:列表、元组、字典与集合

在Python编程语言中&#xff0c;数据结构是组织和存储数据的基本方式。Python提供了四种内置的核心数据结构&#xff1a;列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;、字典&#xff08;Dictionary&#xff09;和集合&#xff08;Set&#xff09;。这…