文章目录

  • 一、题目要求
  • 二、代码展示
  • 三、注意事项

一、题目要求

二、代码展示

#include <STC15F2K60S2.h>
#include "iic.h"#define uchar unsigned char
#define uint unsigned intuchar code SMG_duanma[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};//分别是0-9(对应下标),A-F,“-”,“.”//分别是“0.-9.”
uchar code SMG_Dot_AC[10] = {0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10};uint time_001s = 0;
uchar guang = 0;//系统初始化
void Initsys();
//配置HC138
void SelectHC138(uchar channel);
//在pos位码上,显示value段码
void DisplaySMG_Bit(uchar pos, uchar value);
//数码管8位码显示
void SMG_Display();
//数码管的延时
void Delay_one_ms_SMG();
//独立按键(BTN)
void Alone_Key();
//按键消抖延时
void Delay_five_ms_Key();
//矩阵键盘(KBD)
//void Matrix_Key();
//定时器初始化
void InitTimer0();
//售水机出水
void Mod_1_Strat();
//售水机停水
void Mod_2_Stop();
//PCF8591
uchar IIC_read(uchar add);
//光感处理
void Light_Check();void main()
{Initsys();InitTimer0();while(1){Light_Check();//Matrix_Key();Alone_Key();//SMG_Display();}
}//光感处理
void Light_Check()
{guang = IIC_read(0X01);if(guang < 64){SelectHC138(4);P0 = 0XFE;}else {SelectHC138(4);P0 = 0XFF;}
}//售水机出水
void Mod_1_Strat()
{SelectHC138(5);P0 = 0X10;while(1){Light_Check();SMG_Display();Alone_Key();if(time_001s == 99999){Mod_2_Stop();break;}}
}
//售水机停水
void Mod_2_Stop()
{EA = 0;SelectHC138(5);P0 = 0X00;time_001s = time_001s / 2;while(1){Light_Check();SMG_Display();}
}//定时器初始化
void InitTimer0()
{TMOD = 0x01;TH0 = (65535 - 10000) / 256;TL0 = (65535 - 10000) % 256;ET0 = 1;EA = 1;TR0 = 1;
}//定时器服务
void ServiceTimer0() interrupt 1
{TH0 = (65535 - 10000) / 256;TL0 = (65535 - 10000) % 256;time_001s++;
}//按键消抖延时
void Delay_five_ms_Key()
{uint i,j;for(i = 0; i < 5; i++)for(j = 845; j > 0; j--);
}//独立按键(BTN)
void Alone_Key()
{//S7按键if(P30 == 0){Delay_five_ms_Key();if(P30 == 0){Mod_1_Strat();}while(!P30){Light_Check();SMG_Display();}}//S6按键else if(P31 == 0){Delay_five_ms_Key();if(P31 == 0){Light_Check();Mod_2_Stop();}while(!P31){SMG_Display();}}
}//配置HC138
void SelectHC138(uchar channel)
{switch(channel){case 4:    //LEDP2 = (P2 & 0X1F) | 0X80;break;case 5:    //蜂鸣器和继电器P2 = (P2 & 0X1F) | 0Xa0;break;case 6:    //位码P2 = (P2 & 0X1F) | 0Xc0;break;case 7:    //段码P2 = (P2 & 0X1F) | 0Xe0;break;case 0:    //锁住所有寄存器P2 = (P2 & 0X1F) | 0X00;break;}
}//系统初始化
void Initsys()
{SelectHC138(5);P0 = 0X00;//关闭蜂鸣器和继电器SelectHC138(4);P0 = 0XFF;//关闭LEDSelectHC138(6);P0 = 0XFF; //选择所有数码管SelectHC138(7);P0 = 0XFF; //关闭所有数码管
}//在pos位码上,显示value段码
void DisplaySMG_Bit(uchar pos, uchar value)
{SelectHC138(6);P0 = 0X01 << pos;SelectHC138(7);P0 = value;
}//数码管8位码显示
void SMG_Display()
{DisplaySMG_Bit(1, SMG_Dot_AC[0]);Delay_one_ms_SMG();DisplaySMG_Bit(2, SMG_duanma[5]);Delay_one_ms_SMG();DisplaySMG_Bit(3, SMG_duanma[0]);Delay_one_ms_SMG();DisplaySMG_Bit(4, SMG_duanma[time_001s / 10000]);Delay_one_ms_SMG();DisplaySMG_Bit(5, SMG_Dot_AC[time_001s % 10000 / 1000]);Delay_one_ms_SMG();DisplaySMG_Bit(6, SMG_duanma[time_001s % 1000 / 100]);Delay_one_ms_SMG();DisplaySMG_Bit(7, SMG_duanma[time_001s % 100 / 10]);Delay_one_ms_SMG();
}//数码管的延时
void Delay_one_ms_SMG()
{uint j;for(j = 845; j > 0; j--);
}//PCF8591
uchar IIC_read(uchar add)
{uchar temp;IIC_Start();IIC_SendByte(0X90);IIC_WaitAck();IIC_SendByte(add);IIC_WaitAck();IIC_Stop();IIC_Start();IIC_SendByte(0X91);IIC_WaitAck();temp = IIC_RecByte();IIC_Stop();return temp;
}
/*
//矩阵键盘(KBD)
void Matrix_Key()
{uchar temp;//第一列P3 = 0X7F;P44 = 0; P42 = 1;temp = P3;temp = temp & 0X0F;if(temp != 0X0F){Delay_five_ms_Key();temp = P3;temp = temp & 0X0F;if(temp != 0X0F){temp = P3;switch(temp){case 0X7E:DisplaySMG_Bit(0, SMG_duanma[1]);break;case 0X7D:DisplaySMG_Bit(1, SMG_duanma[1]);break;case 0X7B:DisplaySMG_Bit(2, SMG_duanma[1]);break;case 0X77:DisplaySMG_Bit(3, SMG_duanma[1]);break;}while(temp != 0X0F){temp = P3;temp = temp & 0X0F;}}}//第二列P3 = 0XBF;P44 = 1; P42 = 0;temp = P3;temp = temp & 0X0F;if(temp != 0X0F){Delay_five_ms_Key();temp = P3;temp = temp & 0X0F;if(temp != 0X0F){temp = P3;switch(temp){case 0XBE:DisplaySMG_Bit(0, SMG_duanma[2]);break;case 0XBD:DisplaySMG_Bit(1, SMG_duanma[2]);break;case 0XBB:DisplaySMG_Bit(2, SMG_duanma[2]);break;case 0XB7:DisplaySMG_Bit(3, SMG_duanma[2]);break;}while(temp != 0X0F){temp = P3;temp = temp & 0X0F;}}}//第三列P3 = 0XDF;P44 = 1; P42 = 1;temp = P3;temp = temp & 0X0F;if(temp != 0X0F){Delay_five_ms_Key();temp = P3;temp = temp & 0X0F;if(temp != 0X0F){temp = P3;switch(temp){case 0XDE:DisplaySMG_Bit(0, SMG_duanma[3]);break;case 0XDD:DisplaySMG_Bit(1, SMG_duanma[3]);break;case 0XDB:DisplaySMG_Bit(2, SMG_duanma[3]);break;case 0XD7:DisplaySMG_Bit(3, SMG_duanma[3]);break;}while(temp != 0X0F){temp = P3;temp = temp & 0X0F;}}}//第四列P3 = 0XEF;P44 = 1; P42 = 1;temp = P3;temp = temp & 0X0F;if(temp != 0X0F){Delay_five_ms_Key();temp = P3;temp = temp & 0X0F;if(temp != 0X0F){temp = P3;switch(temp){case 0XEE:DisplaySMG_Bit(0, SMG_duanma[4]);break;case 0XED:DisplaySMG_Bit(1, SMG_duanma[4]);break;case 0XEB:DisplaySMG_Bit(2, SMG_duanma[4]);break;case 0XE7:DisplaySMG_Bit(3, SMG_duanma[4]);break;}while(temp != 0X0F){temp = P3;temp = temp & 0X0F;}}}
}*/

三、注意事项

  1. define 换行时,要加\
  2. 使用我写的模板DisplaySMG_Bit第二个输入参数,记得要用开头定义的数组
  3. iic,c文件中,要8-12倍延时

蓝桥杯之单片机学习(二十一)——自动售水机(附题目和完整代码)相关推荐

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

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

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

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

  3. 【蓝桥杯】单片机学习(7)——UART串口通信

    UART串口通信 一.基础知识介绍 1.通信方式的分类 2.RS232通信接口 3.UART模块介绍 (1)串口控制寄存器SCON(可位寻址) (2)电源控制寄存器PCON(不可位寻址) (3)辅助寄 ...

  4. 【蓝桥杯】单片机学习(10)——I2C通信协议与E2PROM

    I2C总线与E2PROM 一.I2C总线 1.I2C协议和UART协议的区别 2.I2C时序认识 3.I2C总线的数据传送 (1)数据位的有效性规定 (2)起始信号和停止信号 (3)数据传输 (4)整 ...

  5. 【蓝桥杯】单片机学习(9)——多.c文件初认识及计算器实例

    多.C文件+计算机实例 1.多.C文件的初步认识 extern关键字说明 2.实例(CT107D开发板) main.c代码: system.h代码 smg.c代码: key.c代码: system.h ...

  6. 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器

    蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...

  7. 蓝桥杯之单片机学习(二十五)——温度记录器(附题目和完整代码)

    文章目录 一.题目要求 二.代码操作 2.1 main.c 2.2 ds1302.c 三.一些心得 一.题目要求 二.代码操作 2.1 main.c #include <STC15F2K60S2 ...

  8. 蓝桥杯之单片机学习(三)——共阳数码管的静态显示

    文章目录 一.训练任务 二.训练重点 三.训练准备 3.1 原理图展示 3.2 数字对照表 3.3 数码管分路 3.4 一些解释 四.代码实现 注意事项!!! 一.训练任务 在CT107D单片机综合训 ...

  9. 蓝桥杯51单片机学习——proteus8关于51工程文件的创建

    1.新建工程 2.选择路径 3.要设计电路,选隐含的模式 4.选择是否创建PCB板 一般不创建pcb 5.因为要进行仿真,选择固件模式 因为学习51单片机,所以选择AT89C5151控制器: 结合ke ...

最新文章

  1. 在Archlinuxarm上搭建Minecraft基岩服务器
  2. 下一代Hotmail和MSN Messenger最新界面截图
  3. python连连看小游戏_利用Python制作一个连连看小游戏,边学边玩!
  4. Redis的N种妙用,不仅仅是缓存
  5. oracle数据库6月之后的数据,Oracle数据库SCN存在可能在2019年6月导致宕机问题
  6. XP无法显示经典模式控制面板
  7. java对象转json格式
  8. 关于计算机学科的一些期刊和会议(转)
  9. Bootstrap 第一天
  10. python搭建一个后端平台
  11. SqlServer——正则表达式
  12. 文件分割与合并(Java)
  13. java中rtf转化为html的第三方工具,java .rtf文件转html
  14. php文章下一页,php获取文章上一页与下一页的方法_php技巧
  15. 编译原理 自下而上分析题型
  16. python 获取节假日,二十四节气,中国农历,星次、每日凶煞、每日值神、农历建除十二神、农历每日宜忌、彭祖百忌、每日五行、二十八星宿、天干地支、农历生辰八字、时辰凶吉等
  17. C# 微信企业号--发送消息
  18. 大厂Offer拿到手软啊!隔壁都馋哭了
  19. 技术进化论,GITC2014来见证
  20. 【学习记录】【密码学】SM4分组密码算法

热门文章

  1. Epson L6168的主要参数与特性
  2. 项目一:Java 计算器实现
  3. Android Studio for Mac黑色皮肤设置
  4. 运筹学 知识点总结(四)
  5. CGB2106-Day07
  6. 股市精忠社杨忠国科技介绍:国内智能家居的未来
  7. Cozmo机器人脱离智能手机使用的不完全攻略
  8. python数据处理相关
  9. java编程中开头public是什么意思?
  10. css 通用全局,通用全局CSS样式