这是我自己在学习蓝桥杯过程中总结的一些知识,希望对今后的学习和备战蓝桥的同学能够提供一些帮助吧,一起加油哦,预祝各位在比赛中取得优异成绩。

蓝桥杯-第三届(自动售水机)

1.

试题要求如下

2.题目要点分析

1) 上电后各部分要初始化(关闭蜂咛器、数码管、led灯、继电器),并且数码管要显示题目要求初始的数(含格式)
2)按下 S7 清屏开始计数(计数器中断)流水显示,S6停止流水计数并且计算显示出流水价格
3) 通过光敏电阻读取环境的亮度,当其发生改变时,做出不同的响应
4)掌握IIC

3.注意事项

1)数码管小数的显示,需要重新计算数码管段选数组 tab_spot[] ,都加上h,使其显示出小数点
2)S7按键不会改变流水的状态,唯有S6可以改变, S7作用只有一个,就是清屏开始流水计数
3)通过流水量计算出价格这方法要注意
4)光敏电阻读取数据与显示的转换要注意( IIC 写0x90, 读0x91)
5) 引用头文件并且定义无符号类型
#include "STC15f2k60S2.h"
#include "intrins.h"   // 引用头文件  调用iic里面的延时函数 _nop_()#define uchar unsigned char
#define uint unsigned int

4.代码实现

首先是进行初始化
void allinit()  // 初始化
{P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;P2=0XC0;P0=0XFF;P2=0XFF;P0=0XFF;
}
延时函数
void delayms(uchar a)
{uint b;for(;a>0;a--){for(b=845;b>0;b--){}}
}
数码管显示(双重----正常不加小数点和加小数点)
uchar tab[]={0xc0,
0xf9,0xa4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90,
0xff};  // 不加小数点uchar tab_spot[]={0x40,
0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,
0xff};  // 加上小数点的void display(uchar channel,uchar num)  // 不加小数点段选的数码管显示
{P2=0XC0;P0=0X01<<channel;P2=0XE0;P0=tab[num];delayms(2);
}void display_spot(uchar channel,uchar num)   // 加小数点段选的数码管显示
{P2=0XC0;P0=0X01<<channel;P2=0XE0;P0=tab_spot[num];delayms(2);
}
题目要求的数码管显示格式
uchar yi,er,san,si,wu,liu,qi,ba;  // 全局变量void display_SMG()
{display(0,yi);display_spot(1,er);display(2,san);display(3,si);display(4,wu);display_spot(5,liu);display(6,qi);display(7,ba);
}
中断
void Timer0Init(void)    // 5毫秒 来源stc定时器计算器 波特率11.0592 定时器0 16位自动重载
{AUXR |= 0x80;     TMOD &= 0xF0;  TL0 = 0x00;        TH0 = 0x28;        TF0 = 0;       TR0 = 1;
}uint aa=0;             // 三个全局变量  进行时间、金钱计算
uint bb=0;
uint money=0;void time0 () interrupt 1  // 定时器中断服务函数 1
{aa++;             if(aa==20)        // 100毫秒{bb++;             // 100毫秒=10毫升 (相当于数码管最后一位)aa=0;ba=bb%10;qi=bb%100/10;liu=bb%1000/100;wu=bb/1000;    }if(bb==9999){bb=0;            money=bb*0.5;     // 进行金钱转化ba=money%10;qi=money%100/10;liu=money%1000/100;wu=money/1000; }
}
按键操作
void start()              // S7按下 开启
{wu=liu=qi=ba=0;         // 使得开始按按键时 数码管后四位清零P2=0XA0;              // 开启继电器P0=0X10;ET0=1;                // 开启定时器EA=1;}void off()                // S6按下 关闭
{P2=0XA0;              // 关闭继电器P0=0X00;EA=0;                 // 关闭定时器ET0=0;money=bb*0.5;         // 关闭时自动显示价钱ba=money%10;qi=money%100/10;liu=money%1000/100;wu=money/1000; bb=0;                 // 确保下次开始计数时 从0开始
}void keyscan()
{if(P30==0){delayms(2);if(P30==0){start();}while(!P30);}if(P31==0){delayms(2);if(P31==0){off();}while(!P31);}}
实现光敏电阻的各项功能 (要利用给的IIC文件夹,稍加修改即可)
/*********************************************/  // 以下函数在官方数据手册提供
/*********************************************/  // _nop_() 需要引入头文件 "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}    // 这为官方给的51
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_(); // 15的延时大概为51的8倍
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_(); }#define SlaveAddrW 0xA0   // 写
#define SlaveAddrR 0xA1   // 读sbit SDA = P2^1;  /* 数据线 */
sbit SCL = P2^0;  /* 时钟线 */void IIC_Start(void)  // 启动条件
{SDA = 1;SCL = 1;somenop;SDA = 0;somenop;SCL = 0;
}void IIC_Stop(void)   // 停止条件
{SDA = 0;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) // 通过iic发送数据
{unsigned char i;for(i=0;i<8;i++){   if(byt&0x80) {   SDA = 1;}else {SDA = 0;}somenop;SCL = 1;byt <<= 1;somenop;SCL = 0;}
}unsigned char IIC_RecByte(void)  // 接收iic数据
{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;
}/***********************************/   //以下的函数需要自己根据官方提供的函数来编写
uchar iic_read(uchar add)
{uchar temp;/******************/IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(add);IIC_WaitAck();IIC_Stop();/*****************/IIC_Start(0x91);IIC_SendByte(0x91);IIC_WaitAck();temp=IIC_RecByte();IIC_WaitAck();IIC_Stop();/****************/return temp;
}
主函数
void main()
{uchar guangmin;   // 记录数码管的值all_init();       // 初始化,关闭蜂咛器,继电器之类Timer0Init();     // 中断初始化yi=10,er=0,san=5,si=0,wu=0,liu=1,qi=0,ba=0;  // 开始数码管的显示while(1){display_SMG();   // 初始化数码管keyscan();       // 读取按键反馈回来的全局变量 yi ~ ba 的值,并且控制其他模块guangmin=iic_read(0x01); //  !!!  iic读取光敏电阻的值并进行转换if(guangmin<64) // !!!{P0=0XFF;      // 避免其小灯的干扰P2=0X80;P00=0;        // 点亮}else{P2=0X80;P0=0XFF;}                   }
}

注: 本文为原创,未经允许,禁止转载!
有什么问题欢迎给我留言哦
hexo博客:https:www.ho-brother.ltd

[蓝桥杯开源项目与实践] 第三届(自动售水机)相关推荐

  1. 《蓝桥杯真题》:1.自动售水机

    自动售水机 功能简述: 设计任务及要求 实现代码 真题内容取自: 无语凝烟 功能简述: 通过竞赛硬件平台模拟小区自动售水机的工作流程,具体的:通过按键控制售水机水流出和停止:通过数码管显示费率.出水量 ...

  2. 蓝桥杯第3届省赛(单片机)_自动售水机

    蓝桥杯第3届省赛(单片机)_自动售水机 题目 这是2012年蓝桥杯的省赛的题目,也是单片机第一次加入蓝桥杯比赛系列,由于是初次加入蓝桥杯,所以这次比赛的自动售水机的题目(自动售水机)也比较简单,主要考 ...

  3. 蓝桥杯单片机省赛第三届初赛试题 自动售水机

    蓝桥杯单片机省赛第三届初赛试题 自动售水机 蓝桥杯单片机 原题如下 `` main.c代码如下 iic.c文件 iic.h文件 这是第一次写蓝桥杯的题目的代码,写的时候外设没有熟悉 花费了很多时间 感 ...

  4. 蓝桥杯第三届初赛“自动售水机”设计任务书

    文章目录 蓝桥杯第三届初赛"自动售水机"设计任务书 Author:Luis Time:2022-04-06 Version:v1.0 说明 功能简述 具体代码 iic.c iic. ...

  5. 蓝桥杯单片机第三届省赛自动售水机

    #蓝桥杯单片机省三自动售水机 提示:能力有限仅供参考 本人能力有限仅供新手使用,第一次发表博客难免有错误仅供参考. 提示:以下是本篇文章正文内容,下面案例可供参考 一.main.c 代码如下: #in ...

  6. 2 月 25 日,论道京城 | 云原生开源项目应用实践报名开启

    在数字化转型的浪潮中,云原生已经逐渐成为人们关注的焦点.开源社区作为云原生技术创新的根据地,为云原生的产业发展打造了丰富的技术生态圈,也在广泛的实践中源源不断地创造着新的机遇. 想知道云原生存储技术实 ...

  7. 蓝桥杯单片机 自动售水机

    蓝桥杯单片机 自动售水机 题目要求 main.c #include <stc15f2k60s2.h> #include <absacc.h> #include <dela ...

  8. 基于15单片机模拟自动售水机——蓝桥杯

    通过竞赛硬件平台模拟小区自动售水机的工作流程:通过按键控制售水机水流出和停止:通过数码管显示费率.出水量及总费用:通过光敏电阻检测环境亮度,在亮度过低的情况下,自动开灯.系统硬件电路主要由单片机控制电 ...

  9. 蓝桥杯真题——自动售水机

                                         2012 年第四届全国电子专业人才设计与技能大赛                                       ...

  10. 如何使用“友宝”app在自动售水机上使用“友宝钱包”支付。

    前面写了一篇博客介绍如何"巧'吃'支付宝新年红包,再也不用担心钱花不出去了(售货机里面的饮料售空也没事哦)",来解决支付宝新年红包怎么花或者说支付宝实体超市/便利店/售货机专享红包 ...

最新文章

  1. 看jquery3.3.1学js类型判断的技巧
  2. ⒉设置 Bash 选项[3-3]
  3. MySQL 笔记6 -- 函数与事务
  4. JAVA实现可视化的xpath_Java学习之XPath
  5. Java线程面试题,值得一看!
  6. python之模块的导入和用户的交互格式化输出
  7. 基于Centos 8的moodle安装
  8. 金蝶计算机会计实验报告总结,会计实训总结(精选5篇)
  9. IE浏览器中调试各个IE版本方法
  10. 软件的界面测试是什么?怎么设计的?
  11. 黑暗传说单机自动挂机_黑暗传说单机RPG
  12. EMC、EMI、ESD、EMS区别 最清晰的解释送给你
  13. 单路视频编码器怎么使用
  14. 有关人、社会的本质的思考--现代的捕蛇者说
  15. 【游戏建模】将Ciri转为守望先锋的角色
  16. 《财务自由之路III》阅读笔记2021-03-18
  17. ASCII编码与UTF-8编码
  18. 小孩近视用白炽灯好吗?使用护眼台灯有啥好处?
  19. c语言流控制(20180710)
  20. Shared UI Mesh内存占用过高

热门文章

  1. 【pip指令】python安装本地下载好的安装包
  2. SB_7_瑞吉外卖_6_收货地址_菜品展示_购物车_下单
  3. 让video在div中铺满全屏
  4. 颠覆性变革即将到来,金融行业大数据治理该怎么做?
  5. 平衡小车趟过的那些坑
  6. 问题 F: Bale Share
  7. LeetCode 649 Dota2参议院
  8. SAP中由于采购协议信息记录被删导致取不到标准成本实例
  9. 我们如何保护妹子们的“闺蜜”?
  10. Opencv视频流操作