代码编织梦想

73ba71cdfcac645b1c5a3cfb89166170.jpeg
#include <STC15F2K60S2.h>
#include "iic.h"

#define uchar unsigned char
#define uint unsigned int
    
uchar 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:    //LED
            P2 = (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;//关闭LED
    
    SelectHC138(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;
            }
        }
    }
}

*/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hvbkbb/article/details/128754904

2015第六届蓝桥杯javab组省赛真题详解-爱代码爱编程

题解待更新 第一题:三角形面积 题目描述 如图1所示。图中的所有小方格面积都是1。 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积。不要填写任何多余内容或说明性文字。 第二题:立方变自身 题目描述 观察下面的现象,某个数字的立方,按位累加仍然等于自身。 1^3 = 1  8^3  = 512    5+1+2=8 17^3 =

2017第八届蓝桥杯javab组省赛真题详解-爱代码爱编程

题解待更新 第一题:购物单 题目描述 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦,但又不好推辞。     这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优惠的。     小明也有个怪癖,不到万不得已,从不刷卡,直接现金搞定。     现在小明很心烦,请你帮他计算一下,需要

2018第九届蓝桥杯javab组省赛真题详解-爱代码爱编程

题解待更新 第一题:第几天 题目描述 2000年的1月1日,是那一年的第1天。 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容。 第二题:方格计数 题目描述 如图p1.png所示,在二维平面上有无数个1x1的小方格。 我们以某个小方格的一个顶点为圆心画一个半径为1000的圆。 你能计算出这个

2014第五届蓝桥杯javaa组省赛真题详解-爱代码爱编程

目录 第一题:猜年龄 第二题:李白打酒 第三题:神奇算式 第四题:写日志 第五题:锦标赛 第六题:六角填数 第七题:绳圈 第八题:兰顿蚂蚁 第九题:斐波那契 第十题:波动数列 题解待更新 第一题:猜年龄 题目描述 小明带两个妹妹参加元宵灯会。别人问她们多大了,她们调皮地说:“我们俩的年龄之积是年龄之和的6倍”。小明又补充说:“

2016第七届蓝桥杯javaa组省赛真题详解-爱代码爱编程

目录 第一题:煤球数目 第二题:生日蜡烛 第三题:搭积木 第四题:分小组 第五题:抽签 第六题:寒假作业 第七题:剪邮票  第八题:取球博弈 第九题:交换瓶子 第十题:压缩变换 题解待更新 第一题:煤球数目 题目描述 有一堆煤球,堆成三角棱锥形。具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形),

第五届蓝桥杯javab组省赛真题_普通网友的博客-爱代码爱编程

解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1、武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页

传智杯第一届 真题解析 Jaca-爱代码爱编程

例题一 从古至今,各种末日谣言层出不穷。假如现在有这样一个谣言:天文学家在2014年6月1日,发现一颗行星,根据该行星的运行轨道,在3000天以后,该行星将撞击地球。现在,请编写Java程序计算,该谣言指向的“世界末日”是哪一天? 要求输出格式为:xxxx-xx-xx(例如:2015-12-12),不要添加任何其他多余文字。 输出描述: 计算的结果日

第五届蓝桥杯java答案_2014年第五届蓝桥杯javaB组 试题 答案 解析-爱代码爱编程

1.武功秘籍 小明到X山洞探险,捡到一本有破损的武功秘籍(2000多页!当然是伪造的)。他注意到:书的第10页和第11页在同一张纸上,但第11页和第12页不在同一张纸上。 小明只想练习该书的第81页到第92页的武功,又不想带着整本书。请问他至少要撕下多少张纸带走? 这是个整数,请通过浏览器提交该数字,不要填写任何多余的内容。 热身题 publ

蓝桥杯java第八届考题_2017年第八届蓝桥杯JavaB组省赛试题解析-爱代码爱编程

题目及解析如下: 题目大致介绍: 第一题到第四题是结果填空,方法不限只要得到最后结果就行 第五题和第六题是代码填空题,主要考察算法基本功和编程基本功 第七题到第十题是编程题,要求编程解决问题 第一题  购物单 题目如下: 1 标题: 购物单2 3 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购

2018第九届蓝桥杯省赛JAVA A组真题解析(带源码及解析)-爱代码爱编程

蓝桥杯历年真题及解析. 目录: 蓝桥杯历年真题及解析.A:分数(难度:★)题目:分析:代码:B:星期一(难度:★)题目:分析:代码:C:复数幂(难度:★★★)题目:分析:代码:D:方格计数(难度:★★)题目:分析:代码:E:打印图形(难度:★★)题目:分析:代码:F:航班时间(难度:★★★)题目:分析:代码:G:三体攻击(难度:★★★★)题目:分

第七届蓝桥杯c语言a组答案,第七届蓝桥杯 C语言A组试题.pdf-爱代码爱编程

第七届蓝桥杯 C语言A组试题 第七届蓝桥杯大赛个人赛省赛(软件类) C/C++ 大学A 组 考生须知:  考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试题。  考试时间为4 小时。时间截止后,提交答案无效。  在考试强制结束前,选手可以主动结束考试(需要身份验证),结束考试后将无法 继续提交或浏览答案。  选手

【蓝桥杯专辑】第十二届蓝桥杯国赛 EV3 中级组真题-爱代码爱编程

小店地址:https://www.zspay.shop/product/PaMNjpPPZZ3wkopB EV3 交流群:824808884 蓝桥杯大赛是工信部人才交流中心举办的全国性专业信息技术赛事。 12 年来,做为首屈一指的信息技术赛事,蓝桥杯吸引了北大清华在内的超过 1500 所院校、累计 50 余万名学子参赛,IBM、百度等知名企业全程参与。蓝

蓝桥杯第十二届真题解析-爱代码爱编程

目录 前言 考试技巧 真题解析         第一题 (ASC) 第二题 (卡片) 第三题 (直线) 第四题 (货物摆放) 第五题 (路径) 第六题 (时间显示) 第七题 (最少砝码) 第八题 (杨辉三角形) 第九题 (双向排序) 第十题 (括号序列) 总结 前言         蓝桥杯第十三届省赛在4月9号开始,按照以往

第十三届蓝桥杯python 大学b组真题详解_蓝桥杯python组真题-爱代码爱编程

第十三届蓝桥杯Python B组真题详解 试题A 排列字母试题B 寻找整数试题C 纸张尺寸试题D 位数排序试题E 蜂巢试题F 消除游戏试题G 全排列的价值试题H 技能升级试题I 最长不下降子序列最优清零方案