#include "reg52.h"
sfr AUXR = 0x8e; //定义辅助寄存器
sbit S5 = P3^2; //定义按键S5引脚
sbit S4 = P3^3; //定义按键S4引脚
unsigned char count = 0; //定义50ms定时中断累计变量
unsigned char t_h = 0; //定义运行时间的时变量
unsigned char t_m = 0; //定义运行时间的分变量
unsigned char t_s = 0; //定义运行时间的秒变量
unsigned char command = 0; //定义串口命令字接收变量
unsigned char stat_led = 0xff; //定义LED灯当前开关状态
//-----共阳数码管的段码编码表(无小数点)----
unsigned char code SMG_NoDot[18]={0xc0,0xf9,
0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
/*==================普通的延时函数======================
功能:普通的非精确延时函数。
参数:t--延时长度。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void Delay(unsigned int t)
{
while(t--);
while(t--);
}
/*================数码管专用延时函数====================
功能:数码管动态显示专用延时函数。
参数:t--延时长度。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void DelaySMG(unsigned int t)
{
while(t--);
}
/*=================锁存器选择函数======================
功能:选择要打通的锁存器。
参数:t--延时长度。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void SelectHC573(unsigned channel)
{
switch(channel)
{
case 4:
P2 = (P2 & 0x1f) | 0x80; //Y4输出0,选择LED控制
break;
case 5:
P2 = (P2 & 0x1f) | 0xa0; //Y5输出0,选择蜂鸣器和继电器控制
break;
case 6:
P2 = (P2 & 0x1f) | 0xc0; //Y6输出0,选择数码管位选
break;
case 7:
P2 = (P2 & 0x1f) | 0xe0; //Y7输出0,选择数码管段码
break;
case 0:
P2 = (P2 & 0x1f) | 0x00; //所有锁存器不选择
break;
}
}
/*=================单个数码管显示函数====================
功能:在指定的数码管位置上显示指定的内容。
参数value--数码管显示的内容
pos--数码管位选,即要点亮的数码管位置。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void DisplaySMG_Bit(unsigned char value, unsigned char pos)
{
P0 = 0xff; //消隐
SelectHC573(6);
P0 = 0x01 << pos; //数码管的段位
SelectHC573(7);
P0 = value; //数码管显示内容
}
/*===============系统运行时间显示函数===================
功能:在数码管上显示系统运行的时间。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void DisplayTime()
{
DisplaySMG_Bit(SMG_NoDot[t_s%10],7); //秒个位
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[t_s/10],6); //秒十位
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[16],5); //分隔符
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[t_m%10],4); //分个位
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[t_m/10],3); //分十位
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[16],2); //分隔符
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[t_h%10],1); //时个位
DelaySMG(500);
DisplaySMG_Bit(SMG_NoDot[t_h/10],0); //时十位
DelaySMG(500);
}
/*================定时器T0初始化函数====================
功能:将定时器T0设置为16位模式,计数初值为50ms。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void InitTimer0()
{
TMOD = 0x21; //必须注意,T0和T1的工作模式一起赋值
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
ET0 = 1; //使能定时器T0
EA = 1; //使能总中断
TR0 = 1; //启动定时器T0
}
/*===============定时器T0中断服务函数===================
功能:进行系统运行时间的逻辑处理。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void ServiceTimer0() interrupt 1
{
TH0 = (65535 - 50000) / 256;
TL0 = (65535 - 50000) % 256;
count++;
if(count == 20)
{
count = 0;
t_s++;
}
if(t_s == 60)
{
t_s = 0;
t_m++;
if(t_m == 60)
{
t_m = 0;
t_h++;
}
}
}
/*=================串口初始化函数========================
功能:将串口初始化为模式1,波特率为9600,允许接收。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void InitUart()
{
TMOD = 0x21; //必须注意,T0和T1的工作模式一起赋值
TH1 = 0xfd; //设置9600波特率的参数
TL1 = 0xfd;
TR1 = 1; //启动定时器T1
SCON = 0x50; //8位UART模式,允许接收
AUXR = 0x00; //辅助寄存器设置(89C82系列不需要)
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
/*=================串口中断服务函数====================
功能:接收上位机的数据并保持在command变量中。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void ServiceUart() interrupt 4
{
if(RI == 1)
{
command = SBUF; //将接收到的数据保存到command变量
RI = 0; //将接收完成标志RI清0
}
}
/*=================串口发送单字节函数====================
功能:串口向上位机发生一个字节。
参数:dat--要发送到内容。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
/*===============上位机命令解析执行函数==================
功能:接收上位机的数据并保持在command变量中。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void ExecuteCommand()
{
if(command != 0x00) //接收到一个上位机命令
{
switch(command & 0xf0) //将命令类型取出来
{
case 0xa0: //远程灯光控制命令
SelectHC573(4);
stat_led = (stat_led | 0x0f) & (~command | 0xf0);
P0 = stat_led;
SelectHC573(0);
command = 0x00;
break;
case 0xb0: //读取现场系统运行时间命令
SendByte((t_h / 10 << 4) | (t_h % 10));
SendByte((t_m / 10 << 4) | (t_m % 10));
SendByte((t_s / 10 << 4) | (t_s % 10));
command = 0x00;
break;
}
}
}
/*=================独立按键扫描函数====================
功能:扫描S5和S4按键并执行现场灯光控制。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void ScanKeys()
{
if(S5 == 0) //发现按键S5信号
{
DisplayTime(); //去抖动处理
if(S5 == 0) //确认按键S5信号
{
while(S5 == 0) //等待按键S5松开
{
DisplayTime();
}
SelectHC573(4);
stat_led = (stat_led | 0x40) & (~stat_led | 0xbf);
P0 = stat_led; //执行现场灯光控制
SelectHC573(0);
}
}
if(S4 == 0) //发现按键S4信号
{
DisplayTime(); //去抖动处理
if(S4 == 0) //确认按键S4信号
{
while(S4 == 0) //等待按键S4松开
{
DisplayTime();
}
SelectHC573(4);
stat_led = (stat_led | 0x80) & (~stat_led | 0x7f);
P0 = stat_led; //执行现场灯光控制
SelectHC573(0);
}
}
}
/*=================工厂灯光检测函数====================
功能:逐个检测工厂灯光的工作状态。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void CheckLED()
{
char i;
SelectHC573(4);
for(i = 0; i < 9; i++)
{
stat_led = 0xfe << i; //逐个点亮LED灯
P0 = stat_led;
Delay(60000);
}
for(i = 0; i < 9; i++)
{
stat_led = ~(0xfe << i); //逐个熄灭LED灯
P0 = stat_led;
Delay(60000);
}
SelectHC573(0);
}
/*================时间显示模块检测函数==================
功能:逐个检测数码管的工作状态。
参数:无。
返回:空。
设计:欧浩源(2018年3月11日)
=======================================================*/
void CheckSMG()
{
char i;
SelectHC573(7);
P0 = 0x00;
for(i = 0; i < 9; i++)
{
SelectHC573(6);
P0 = ~(0xfe << i); //逐个点亮数码管
Delay(60000);
}
for(i = 0; i < 9; i++)
{
SelectHC573(6);
P0 = 0xfe << i; //逐个熄灭数码管
Delay(60000);
}
SelectHC573(0);
}
/*==================系统初始化函数======================
�
没有合适的资源?快使用搜索试试~ 我知道了~
蓝桥杯单片机-基础技能训练-全部15个源码
共245个文件
lst:36个
obj:36个
c:17个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 55 浏览量
2022-03-13
11:10:52
上传
评论
收藏 506KB ZIP 举报
温馨提示
能够学完这些就可以开始做省题了
资源推荐
资源详情
资源评论
收起资源包目录
蓝桥杯单片机-基础技能训练-全部15个源码 (245个子文件)
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
STARTUP.A51 6KB
矩阵键盘.uvgui_OHY.bak 70KB
工厂灯光控制系统(存储器映射扩展).uvgui_OHY.bak 70KB
工厂灯光控制系统.uvgui_OHY.bak 70KB
定时器实现秒闪功能.uvgui_OHY.bak 70KB
独立按键的基本操作.uvgui_OHY.bak 70KB
独立按键的扩展应用.uvgui_OHY.bak 70KB
串口进阶应用案例.uvgui_OHY.bak 70KB
数码管动态显示.uvgui_OHY.bak 70KB
数码管静态显示.uvgui_OHY.bak 70KB
存储器的映射扩展.uvgui_OHY.bak 70KB
外部中断的基本操作.uvgui_OHY.bak 70KB
定时器进阶综合案例.uvgui_OHY.bak 70KB
工厂灯光控制系统(IO版).c 8KB
工厂灯光控制系统(存储器版).c 8KB
矩阵键盘的基本操作.c 3KB
秒表.c 2KB
独立按键的扩展应用.c 1KB
串口进阶应用.c 1KB
数码管动态显示.C 1KB
PWM调光.c 1KB
蜂鸣器与继电器.c 1KB
数码管静态显示.c 1KB
独立按键的基本操作.c 1KB
IO扩展.C 855B
外部中断.c 771B
定时器实现秒闪功能.c 634B
LED跑马灯.C 622B
存储器扩展.c 596B
串口通信基础.c 516B
工厂灯光控制系统.hex 3KB
工厂灯光控制系统(存储器映射扩展).hex 2KB
定时器进阶综合案例.hex 1KB
串口进阶应用案例.hex 1KB
数码管动态显示.hex 1KB
矩阵键盘.hex 1KB
独立按键的扩展应用.hex 1KB
利用PWM控制灯光亮度.hex 950B
外部中断的基本操作.hex 872B
定时器实现秒闪功能.hex 712B
蜂鸣器与继电器.hex 710B
数码管静态显示.hex 668B
独立按键的基本操作.hex 494B
串口通信收发基础.hex 437B
存储器的映射扩展.hex 408B
LED跑马灯.hex 392B
LED跑马灯 3KB
工厂灯光控制系统(存储器映射扩展).lnp 108B
工厂灯光控制系统.lnp 86B
定时器实现秒闪功能.lnp 84B
独立按键的基本操作.lnp 84B
独立按键的扩展应用.lnp 84B
串口进阶应用案例.lnp 76B
串口通信收发基础.lnp 76B
蜂鸣器与继电器.lnp 76B
数码管静态显示.lnp 76B
数码管动态显示.lnp 76B
矩阵键盘.lnp 74B
利用PWM控制灯光亮度.lnp 74B
外部中断的基本操作.lnp 74B
存储器的映射扩展.lnp 74B
定时器进阶综合案例.lnp 70B
LED跑马灯.lnp 66B
工厂灯光控制系统(IO版).LST 15KB
工厂灯光控制系统.LST 15KB
工厂灯光控制系统(存储器版).LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
STARTUP.LST 14KB
矩阵键盘的基本操作.LST 6KB
秒表.LST 5KB
独立按键的扩展应用.LST 4KB
共 245 条
- 1
- 2
- 3
资源评论
m0_57370659
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Android源码新基线代码更新的方法
- 1_二级程序设计题(34).rar
- 二级程序调试题(填空27+改错7).docx
- HM2314-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 基于深度学习的危险驾驶检测算法python源码+视频判断是否闭眼或者张开嘴哈欠和吸烟打电话等手势行为功能涵盖7类.zip
- Free-Fs 开源文件管理系统
- HM2314B-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 毕业设计:Python高校学生学业预警系统(源码 + 数据库 + 说明文档)
- HM2312-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 毕业设计:Python的在线自主评测系统(源码 + 数据库 + 说明文档)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功