设计程序,用于本地和远程控制现场灯光的开关,并能通过串口远程读取工厂的系统运行时间。

  1. 设计系统初始化函数,关闭蜂鸣器和继电器等无关设备。
  2. 设计设备检测函数,首先检测LED指示灯,从L1~L8依次逐个点亮,再依次逐个熄灭;然后检查数码管,从左到右依次点亮数码管的所有段码,再依次从左到右熄灭。
  3. 系统从上电开始显示系统运行时间。从00时00分00秒开始,显示格式:
  4. 八个LED指示灯分为2组:L1L4为远程控制组,L7L8为本地控制组。远程控制组的指示灯由上位机通过串口发送命令控制开关,本地控制组的指示灯由独立按键控制开关。按键检测需做去抖动处理,松开有效,按键S5控制L7,按键S4控制L8。
#include <STC15F2K60S2.H>
#include <intrins.h>void Init();  //系统初始化,关闭无关设备
void InTimer(); //定时器初始化
void Init_Uart();//串口初始化void LED_Test();//LED灯测试
void SMG_Test();//数码管测试void show(unsigned int w,unsigned int n); //数码管显示指定数据
void Time_show();//时间显示
void SendByte(unsigned char dat); //单字节发送数据
void execute();  //数据解析函数void selectHC(unsigned int n); //寄存器选择
void delay_ms(int n); //延时函数
void scanKeys(); //按键扫描unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//0xbf为数码管显示 ——
unsigned char which[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};sbit S5 = P3^2;  //控制L7
sbit S4 = P3^3;  //控制L8unsigned char hour=0;  //时
unsigned char min=0;   //分钟
unsigned char sec=0;   //秒
unsigned char count=0; //毫秒
unsigned char command=0;       //存放串口数据
unsigned char stat_LED=0xff;   //stat_LED作为暂时储存P0的值void main()
{Init();LED_Test();SMG_Test();InTimer();Init_Uart();while(1){execute();Time_show();scanKeys();}
}/*===================LED灯检测函数=====================
功能:测试LED灯
=======================================================*/
void LED_Test()
{unsigned char i = 0;selectHC(4);for(i = 0 ; i < 8 ; i++){P0 = 0xFE << i;delay_ms(2000); }delay_ms(2000);for(i = 0 ; i < 8 ; i++){P0 = ~(0x7F >> i);delay_ms(2000);}
}/*===================数码管检测函数====================
功能:测试数码管
=======================================================*/
void SMG_Test()
{unsigned char i = 0;selectHC(7);P0 = 0x00;for(i = 0 ; i < 8 ; i++){selectHC(6);P0 = ~(0xFE << i);delay_ms(2000);}for(i = 0 ; i < 8 ; i++){selectHC(6);P0 = 0x7F >> i;delay_ms(2000);}selectHC(0);
}/*==================系统初始化函数======================
功能:关闭无关设备
=======================================================*/
void Init()
{selectHC(5);P0=0x00;selectHC(4);P0 = stat_LED;selectHC(0);
}/*==================寄存器选择函数======================
功能:选择指定的功能寄存器
=======================================================*/
void selectHC(unsigned int n)
{switch(n){case 4: P2=(P2&0x1f)|0x80; break; //LED灯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; //锁存数据,退出前一锁存器,防止改变数据。default: break;}
}
/*==================数码管显示函数======================
功能:第w位数码管显示数字n
=======================================================*/
void show(unsigned int w,unsigned int n)
{selectHC(6);P0=which[w-1];selectHC(7);P0=table[n];delay_ms(5);P0=0xff;P2&=0x1f;
}/*===================时间显示函数======================
功能:显示时间
=======================================================*/
void Time_show()
{unsigned char i;for(i=0;i<8;i++){switch(i){case 7:show(8,sec%10);delay_ms(5);break;case 6:show(7,sec/10);delay_ms(5);break;case 5:show(6,10);delay_ms(5);break;case 4:show(5,min%10);delay_ms(5);break;case 3:show(4,min/10);delay_ms(5);break;case 2:show(3,10);delay_ms(5);break;case 1:show(2,hour%10);delay_ms(5);break;case 0:show(1,hour/10);delay_ms(5);break;}}
}
//***********************************************************************************************************
/*=================定时器T0初始化函数===================
功能:初始化定时器T0
=======================================================*/
void InTimer()
{TMOD=0X21;    //定时器0十六位计数模式TH0=(65536-50000)/256;    //50ms计时 TL0=(65536-50000)%256;ET0=1;EA=1;            TR0=1;
}
/*================定时器T0中断服务函数===================
功能:时间计时
=======================================================*/
void seviceTimer() interrupt 1
{TH0=(65536-50000)/256;    TL0=(65536-50000)%256;count++;if(count==20)  //说明到了20*50ms=1S,{count=0;sec++;   //秒加1if(sec==60){sec=0;min++;    //分加1if(min==60){min=0;hour++;if(hour==24){sec=0;min=0;hour=0;}}}}
}
//***********************************************************************************************************
/*=================串口初始化函数======================
功能:串口初始化
=======================================================*/
void Init_Uart()
{TMOD=0X21;  //定时器1工作模式为自动重装TH1=0XFD;   //设置波特率为9600,  11.0592M或12M的12分频TL1=0XFD;TR1=1;      //启动定时器1AUXR=0X00;  //bit7=1:定时器1不分频,0则12分频SCON = 0x50;      //串口参数为模式1和允许接收ES=1;             //使能串口中断EA=1;             //使能总中断
}/*=================串口服务函数======================
功能:串口服务
=======================================================*/
void ServiceUart() interrupt 4
{    if(RI==1)  //接收到一个完整的字节  如果RI==1就说明接收到一个完整的数据{command=SBUF;  //接收到的数据放在 command 里面RI=0;          //人工清零  清除接收完成标志}
}
/*===============串口发送单字节函数====================
功能:发送单字节数据
=======================================================*/
void SendByte(unsigned char dat)
{SBUF=dat;     //将数据放进SBUF缓冲器while(TI==0); //等待发送数据完成TI=0;         //清除发送完成标志
}
/*===============上位机命令解析执行函数=================
功能:接收上位机的数据并保持在command变量中
=======================================================*/
void execute()
{if(command != 0x00){switch (command & 0xF0){case 0xA0 :selectHC(4);stat_LED = (stat_LED | 0x0F) & (~command | 0xF0);P0 = stat_LED;selectHC(0);command = 0x00;//清零break;case 0xB0 :SendByte(((hour / 10) << 4 ) |(hour % 10));//发送时SendByte(((min / 10) << 4 ) |(min % 10));//发送分SendByte(((sec / 10) << 4 ) |(sec % 10));//发送秒command = 0x00;//清零break;}}
}
/*=================独立按键扫描函数====================
功能:扫描S5和S4按键并执行现场灯光控制。
=======================================================*/
void scanKeys()
{if(S5 == 0){delay_ms(5); //按键消抖if(S5 == 0){while(S5 == 0){delay_ms(5);}selectHC(4);stat_LED = (stat_LED | 0x40) & (~stat_LED | 0xBf);//控制L7亮灭P0 = stat_LED;selectHC(0);}   }if(S4 == 0){delay_ms(5);  //按键消抖if(S4 == 0){while(S4 == 0){delay_ms(5);}selectHC(4);stat_LED = (stat_LED | 0x80) & (~stat_LED | 0x7f);//控制L8亮灭P0 = stat_LED;selectHC(0);}}
}/*=====================延时函数========================
功能:扫描S5和S4按键并执行现场灯光控制。
=======================================================*/
void delay_ms(int n)
{int i,j;for(i=n;i>0;i--)for(j=110;j>0;j--);
}

【蓝桥杯08】——工厂灯光控制系统相关推荐

  1. 【蓝桥杯单片机】工厂灯光控制系统案例解析(小蜜蜂老师基础综合实训)

    工厂灯光控制系统案例解析 题目 流程图 关键点复盘 参考代码(IO模式) 题目 流程图 关键点复盘 设备检测--移位 L1~L8在板子上是从左至右,但是在对P0口赋值时是16进制从高位(L8)-> ...

  2. 蓝桥杯学习笔记--工厂灯光控制系统(小蜜蜂笔记作业)

    文章目录 前言 一.功能要求 1.功能图 二.硬件分析 1.功能一硬件电路: 2.功能二硬件电路: 3.功能三硬件电路: 4.功能四硬件电路: 三.代码 1.整体流程(主函数) 2.138选择函数与关 ...

  3. 【蓝桥杯-单片机学习笔记(十二)】工厂灯光控制系统

    一.要求 在CT107D单片机综合训练平台上,设计程序,实现实时显示开机系统运行时间和按键控制灯光. 1.设计系统初始化函数,关闭蜂鸣器和继电器等无关设备. 2.设计设备检测函数,首先检测LED灯,从 ...

  4. 蓝桥杯单片机CT107D_13_工厂灯光控制系统

    需求:(题目来自小蜜蜂老师) #include<reg52.h> sfr AUXR = 0x8e; //设置辅助寄存器AUXR sbit S7 = P3^0; //独立按键S7 sbit ...

  5. 【蓝桥杯】小蜜蜂老师—工厂灯光控制系统代码(IO模式)

    [本代码定时器与串口部分的初始化函数均由ISP自动生成.] 本代码参考多位csdn博主,进行融汇修改,全部亲测无问题,可自行烧录查看. #include"reg52.h"unsig ...

  6. 蓝桥杯单片机-小蜜蜂老师-工厂灯光控制系统(P15代码)

    1.代码 HEADFILE.h #ifndef __HEADFILE_H_ #define __HEADFILE_H_#include <STC15F2K60S2.H> #define Y ...

  7. 2017第八届蓝桥杯 08 拉马车(java)

    标题:拉马车 小的时候,你玩过纸牌游戏吗? 有一种叫做"拉马车"的游戏,规则很简单,却很吸引小朋友. 其规则简述如下: 假设参加游戏的小朋友是A和B,游戏开始的时候,他们得到的随机 ...

  8. 第七届蓝桥杯初赛——————模拟风扇控制系统

    代码部分(实现题目要求的全部功能) #include<stc15f2k60s2.h> #include<intrins.h> #define uchar unsigned ch ...

  9. 2015第六届蓝桥杯 08 饮料换购(java)

    饮料换购 乐羊羊饮料厂正在举办一次促销优惠活动.乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去,但不允许赊账. 请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始 ...

最新文章

  1. EMNLP'21 | 基于相似样本检索的在线更新机器翻译系统
  2. 存储时间:从Symmetrix V-Max看高端存储的未来
  3. boost::make_biconnected_planar用法的测试程序
  4. MySQL各个版本区别
  5. linux touch 源码,每天一个Linux命令(09)--touch命令
  6. request.getParameterMap()使用
  7. mysql 去重命令_MySQL 命令操作
  8. 树莓派串口通信编码_树莓派和STM32通过USB和串口通信记录
  9. 程序和算法之间,主要有什么关系?
  10. SpringBoot之自定义starter
  11. win11更新启动后黑屏有鼠标(本人亲测有效)
  12. selenium之鼠标操作详解
  13. 理解负反馈可以减小输出电阻
  14. 同时买票是怎么实现的_候补购票和抢票有什么不同 候补购票和抢票能同时进行吗...
  15. string类型转换成LPCTSTR
  16. Camera Sensor
  17. 函数中arguments是什么?
  18. 从零开始学Excel VBA
  19. web性能优化以及SEO
  20. python入门教程NO.3 用python破解谍报密码

热门文章

  1. 计算机自带游戏纸牌怎么玩,电脑上自带的游戏是怎么玩的,【红心大战】,【空当接龙】,【纸牌】都是怎么玩的啊...
  2. 日本语达人之道 第二章
  3. 【附源码】计算机毕业设计SSM社区居家养老服务管理系统
  4. CentOS4.4下架设简单的邮件服务器笔记
  5. IBM X3650 M4安装win 2008 Server操作指南
  6. 五成网友反对新浪微博取消字数限制:140字才是微博特质
  7. excel批量修改文件名方法
  8. charles抓不到微信小程序的包【亲测解决】
  9. 自考知识点计算机组成原理,自考计算机组成原理复习笔记
  10. C# excel转换Json