#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);
}
/*==================系统初始化函数======================
�
没有合适的资源?快使用搜索试试~ 我知道了~
51单片机代码文件下载,仅供参考,欢迎计算机,物联网,嵌入式爱好者下载,观看,实验,调整
共245个文件
obj:36个
lst:36个
c:17个
需积分: 0 0 下载量 110 浏览量
2023-08-10
13:47:08
上传
评论
收藏 523KB ZIP 举报
温馨提示
51单片机小实验代码下载, 最好的技术就是分享,此文件完全免费,如果您下载有问题请联系我2748342623@qq.com 欢迎技术爱好者来观看,我只是提供分享,希望对大家有所帮助。欢迎大家下载哦。 此文件包含: 01-LED跑马灯 02-蜂鸣器与继电器 03-数码管静态显示 04-数码管动态显示 05-独立按键的操作 06-独立按键的扩展应用 07-矩阵键盘的扫描原理与基本应用 08-外部中断的基本操作 09-定时器实现秒闪功能 10-定时器的进阶综合案例 11-利用PWM控制灯光亮度 12-串口通信的基本操作 13-串口通信进阶应用案例 14-存储器映射扩展应用 15-基础技能综合实训案例(IO扩展版) 16-基础技能综合实训案例(存储器扩展版) 在此我也希望广大技术人员以更开发,更开源的心态去面对技术和同行。 众思在大多数胜独想。 有计算机,网络,物联网,信息通信技术的爱好者,可以联系我,一起去进步!
资源推荐
资源详情
资源评论
收起资源包目录
51单片机代码文件下载,仅供参考,欢迎计算机,物联网,嵌入式爱好者下载,观看,实验,调整
(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
利用PWM控制灯光亮度.lnp 74B
矩阵键盘.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
资源评论
XMeetme
- 粉丝: 14
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功