自己刷省赛的一些总结,有不足之处还望指正。

  1. 首先说一些读温度吧,元器件叫Ds18b20

官方提供的代码是onewire.h与onewire.c,但有一点要注意的是:

void Delay_OneWire(unsigned int t) //STC89C52RC

{

while(t--);

}

我们需要给他加长12倍,因为我们蓝桥杯用的是stc15f系列。

void Delay_OneWire(unsigned int t) //STC89C52RC

{

while(t--)

{

unsigned char i = 0;

for (i = 0; i < 12; i++);

}

}

温度的读取代码,可以直接去网上找,我提供些细节:考题中有保留两位和一位或者无小数的读取。

我们开始需要知道:temp前5位为符号位,中间七位为整数,后面四位为小数。

我的建议是:定义一个 unsigned int temp;temp=((high&0x0f)<<8)|low;temp=temp*0.625;//一位小数,构成一个三位数(temp=temp*6.25;四位数,保留两位。temp=temp*0.0625;两位数,无小数)

代码:

unsigned int read_temp(){

unsigned int temp;

unsigned char high,low;

init_ds18b20();

Write_DS18B20(0xcc);

Write_DS18B20(0x44);

init_ds18b20();

Write_DS18B20(0xcc);

Write_DS18B20(0xbe);

low=Read_DS18B20();

high=Read_DS18B20();

temp=high&0x0f;

temp=((temp<<8)|low)*0.625;

return temp;

}

  1. 再说下时钟读取,Ds1302:

官方提供的是ds1302.h与ds1302.c。我感觉这没啥注意的,感觉要注意的就是16进制数存入,16进制读取。

代码:

void Read_time(unsigned char *time){

unsigned char i;

for(i=0;i<3;i++){

time[i]=Read_Ds1302_Byte(0x85-2*i);

}

}

void Write_time(unsigned char *time){

unsigned char i;

Write_Ds1302_Byte(0x8e,0);

for(i=0;i<3;i++){

Write_Ds1302_Byte(0x84-2*i,time[i]);

}

Write_Ds1302_Byte(0x8e,0x80);

}

3.电压的读取,pcf8591:

官方提供的是iic.h与iic.c。pcf8591有adc电压读取(分0x01光敏电阻读电压,0x03滑动变阻器RB2电压读取),dac电压存入,即dac输出。如果单单用到DAC输出的话,控制寄存器地址就是0x40。

在读取电压中,我的建议是:adc读取时unsigned int voltage;voltage=X*500/255;(V=X*1.961)要写括号这种,所得三位数,为电压扩大100倍。//x表示取出的值;

代码:

unsigned int Pcf_read(unsigned char dat){//dat==0x01或0x03

unsigned int valtage=0;

IIC_Start();

IIC_SendByte(0x90);

IIC_WaitAck();

IIC_SendByte(dat);

IIC_WaitAck();

IIC_Stop();

IIC_Start();

IIC_SendByte(0x91);

voltage=IIC_RecByte()*1.921;

IIC_SendAck(1);

IIC_Stop();

return voltage;

}

注意adc读取时, IIC_SendAck(1);//等待应答,如果写这句话的话,记得中间值是1,同时写在IIC_Stop()之前。

dac存入中,我的建议:X=Voltage*255/500;(X=Voltage*51/100;)

代码:

void Pcf8591_dac(unsigned char date){

IIC_Start();

IIC_Sendbyte(0x90);

IIC_Waitack();

IIC_Sendbyte(0x40);//如果单单用到DAC输出的话,控制寄存器地址就是0x40。如果是滑阻输入然后DAC输出的话,

//就是0x43。

IIC_Waitack();

IIC_Sendbyte(date);

iIIC_Waitack();

IIC_Stop();

}

4.数据的存储与读出,at24c02(Eeprom)

官方提供的也是iic.h与iic.c。AT24C02提供2048位的电可擦和可编程只读存储器(EEPROM)组织为256, 8位字。注意adc读取时, IIC_SendAck(0);//与上面电压不同

代码:

void E2prom_write(unsigned char date,unsigned char add){

IIC_Start();

IIC_SendByte(0xa0);

IIC_WaitAck();

IIC_SendByte(add);

IIC_WaitAck();

IIC_SendByte(date);

IIC_WaitAck();

IIC_Stop();

}

unsigned char E2prom_read(unsigned char add){

unsigned char num;

IIC_Start();

IIC_SendByte(0xa0);

IIC_WaitAck();

IIC_SendByte(add);

IIC_WaitAck();

IIC_Stop();

IIC_Start();

IIC_SendByte(0xa1);

IIC_WaitAck();

num=IIC_RecByte();

IIC_SendAck(0);

IIC_Stop();

return num;

}

  1. 频率的测量,P34与SIGNAL连接 ,TMOD=0x16,TH0=0xff,TL0=0xff,TH1与TL1自己设计,通过计数器0进行计数;这里官方没提供参考代码。TH1表示高8位,TL1表示低8位。其求1秒内的计数.

代码:

void Timer_init(){

TMOD=0x16;

TH0=0xff;

TL0=0xff;

TH1=(65536-1000)/256;//1毫秒的定时器

TL1=(65536-1000)%256;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

}

void Timer_0() interrupt 1{

count++;

}

void Timer_1() interrupt 3{

TH1=(65536-1000)/256;//手动初始化

TL1=(65536-1000)%256;

if(++count_time>=1000){

count_time=0;

count_num=count;//count_num为测得的频率值

count=0;

}

}

最后说点小总结,上面是模块化的总结

继电器L10为Y5中的P04;即P0=0x10;蜂鸣器Buzz为Y5中的P06;即P0=0x40;

LED或者数码管显示出现闪烁,说明他们间隔时间太长。

蓝桥杯单边机省赛一些总结相关推荐

  1. 2013第四届蓝桥杯Java组省赛题解析

    2013第四届蓝桥杯Java组省赛题解析 目录 第一题:高斯日记 第二题:马虎的算式 第三题:第39级台阶 第四题:黄金连分数 ​第五题:前缀判断 第六题:三部排序 ​第七题:错误票据 第八题:翻硬币 ...

  2. 使用JavaScript解答2018第九届蓝桥杯C/C++省赛A组试题

    大三时参加过第七届蓝桥杯个人赛及团队赛,转眼已经两年,最近看了看第九届蓝桥杯试题,打算用JavaScript实现一下. 题目1 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + ...

  3. 第jiu届蓝桥杯单片机省赛真题_第九届蓝桥杯单片机组省赛试题.pdf

    第九届蓝桥杯单片机组省赛试题 "彩灯控制器"的程序设计与调试 (70 分) 一.基本要求 1.1 使用CT107D 单片机竞赛板,完成"彩灯控制器"功能的程序设 ...

  4. 第十二届蓝桥杯青少年组国赛C++中级组 第1题 -- 第3题(python3实现)

    12届蓝桥杯青少年组国赛C++中级组编程题 12届蓝桥杯青少年组国赛C++中级组编程题_lybc2019的博客-CSDN博客 蓝桥杯算法学习路线 | 全程制作过程公开 蓝桥杯算法学习路线 | 全程制作 ...

  5. 第十二届 2021年1月 蓝桥杯青少年组省赛C++组 第1题--第3题(scratch实现)

    第十二届2021年蓝桥杯青少年组省赛 第十二届2021年蓝桥杯青少年组省赛_lybc2019的博客-CSDN博客 第十二届蓝桥杯青少年组省赛C++中级组试卷讲解(2021.01) 第十二届蓝桥杯青少年 ...

  6. 第十二届 2021年1月 蓝桥杯青少年组省赛C++组 第1题--第3题(python3实现)

    第十二届2021年蓝桥杯青少年组省赛 第十二届2021年蓝桥杯青少年组省赛_lybc2019的博客-CSDN博客 第十二届蓝桥杯青少年组省赛C++中级组试卷讲解(2021.01) 第十二届蓝桥杯青少年 ...

  7. 蓝桥杯2020山西省省赛太原理工大获丰收

    2020年10月18日,太原理工大学在明向校区软件学院实验室举行了蓝桥杯软件类A组的山西省省赛(分赛场比赛).太原理工学子共获得"C/C++程序设计大学A组"一等奖32枚(一等奖共 ...

  8. 2022年第十三届蓝桥杯大赛软件省赛Java学B组试题

    第十三届蓝桥杯大赛软件省赛Java学B组试题 一.试题截图 1. 星期计算 这道题是可以直接用笔算起来的,我算出来的答案是5,(2022整除7 余6,六天后就是星期五)但目前官方答案还不知道是什么? ...

  9. 第十四届蓝桥杯第三期模拟赛 C/C++ B组 原题与详解

    本篇文章对第十四届蓝桥杯第三期模拟赛所有的题目进行了详细解析.如果大家还想刷题的话,我给大家整理出了第十二届的省赛真题:第十二届省赛C/C++ B组真题.推荐大家可以去做一下. 文章目录 一.填空题 ...

最新文章

  1. 2009-2019年全国大学生智能汽车竞赛获奖数据分析
  2. 初识css预处理器:Sass、LESS
  3. THUPCCTSAPIO摸鱼被$\Huge{\color{black}{\mathbf{z}}\color{red}{\mathbf{zh}}}$爆踩记
  4. 【转】mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句
  5. 漫画:什么是数据仓库
  6. HTML知识积累及实践(五) - 表单元素
  7. IBM宣布:成功研制出了量子计算机原型机,量子计算机商业化正在加速!
  8. python不小心删除恢复上一步_意外获取删除python后如何恢复
  9. iphone个系列尺寸_Iphone各个型号机型的详细参数,尺寸和dpr以及像素
  10. CSS 基础3(内边距、外边距、边距模型)
  11. APP推广 从零开始
  12. css图片如何垂直水平居中设置
  13. 逻辑与,逻辑或,逻辑非关系
  14. WinDBG 技巧:显示进程/线程环境参数(!peb 和 !teb 命令)
  15. linux热点连上不通,一个WiFi模块开出多个热点(不可连接)
  16. Ubuntu设置Stunnel客户端
  17. encodeURI、encodeURIComponent的区别
  18. 人工智能炒作避之不及?这五个问题帮你排除90%的假AI公司
  19. 巨龙信息大数据集成系统 多元数据汇聚的一站式集成治理
  20. Microblaze添加自定义IP核,挂AXI总线实现SSD1306 OELD驱动

热门文章

  1. 异步mysql是什么意思_8.mysql之异步操作
  2. 再演千团大战,小程序服务商路在何方?
  3. Maya模型动画导入UE4的问题
  4. 关于torch.scatter函数
  5. 数组去重以及数组对象去重方法总结
  6. 基于神经网络的图像分割,图像识别神经网络算法
  7. 基于PHP和MySQL实现的高校成绩管理系统
  8. linux下关闭redis服务
  9. 提高自己魅力的九阴真经
  10. Windows10下金蝶专业版中文输入乱码问题