#include "reg52.h"
sbit C1 = P2^7;
sbit C2 = P2^6;
sbit C3 = P2^5;
sbit C4 = P2^4;
sbit SW1 = P3^4;
sbit SW2 = P3^3;
sbit SW3 = P2^1;
sbit SW4 = P2^0;
//共阳数码管3641BH段码数组:0~9
const char SMGNoDot_CA[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
unsigned char n1 = 0; //SW1按键的触发数累计变量
unsigned char n2 = 0; //SW2按键的触发数累计变量
unsigned char n3 = 0; //SW3按键的触发数累计变量
unsigned char n4 = 0; //SW4按键的触发数累计变量
unsigned char urdat; //串口接收数据变量
/*======================普通的延时程序======================*/
void Delay(unsigned int t)
{
while(t--);
}
/*======================数码管延时程序======================*/
void DelaySMG(unsigned char t)
{
while(t--);
}
/*====================数码管显示底层驱动====================
*功能:向指定位置的一位数码管输出指定的段码值。
*参数1 pos:数码管的位置
0:全部4个数码管。
1:第1个数码管
2:第2个数码管
3:第3个数码管
4:第4个数码管
*参数2 dat:数码管的段码值
==========================================================*/
void DisplaySMG_Bit(unsigned char pos, unsigned char dat)
{
P0 = 0xff; //消隐
switch(pos)
{
case 0:
C1 = 1;C2 = 1;C3 = 1;C4 = 1;
break;
case 1:
C1 = 1;C2 = 0;C3 = 0;C4 = 0;
break;
case 2:
C1 = 0;C2 = 1;C3 = 0;C4 = 0;
break;
case 3:
C1 = 0;C2 = 0;C3 = 1;C4 = 0;
break;
case 4:
C1 = 0;C2 = 0;C3 = 0;C4 = 1;
break;
}
P0 = dat; //显示段码
}
/*==================系统上电开始初始化显示==================*/
void Display_Open()
{
char i;
//四个数码管同时倒数3333 ~ 1111
for(i = 3; i >= 1; i--)
{
C1 = 1;C2 = 1;C3 = 1;C4 = 1;
P0 = SMGNoDot_CA[i];
Delay(50000);
P0 = 0xff;
Delay(30000);
}
//8个LED灯进行正向流水巡检
for(i = 0; i < 8; i++)
{
P1 = 0xff << i;
Delay(10000);
}
//8个LED灯进行反向流水巡检
for(i = 0; i <= 8; i++)
{
P1 = ~(0xff >> i);
Delay(10000);
}
}
/*================实时显示每个按键触发的次数================*/
void Display_Keys()
{
DisplaySMG_Bit(1,SMGNoDot_CA[n1]); //第1位数码管:SW1按键
DelaySMG(200);
DisplaySMG_Bit(2,SMGNoDot_CA[n2]); //第2位数码管:SW2按键
DelaySMG(200);
DisplaySMG_Bit(3,SMGNoDot_CA[n3]); //第3位数码管:SW3按键
DelaySMG(200);
DisplaySMG_Bit(4,SMGNoDot_CA[n4]); //第4位数码管:SW4按键
DelaySMG(200);
DisplaySMG_Bit(0,0xff); //4个数码管全部关闭
DelaySMG(200);
}
/*======================按键扫描函数========================*/
void Scan_Keys()
{
if(SW1 == 0)
{
Delay(500);
if(SW1 == 0)
{
while(SW1 == 0)
{
Display_Keys();
}
n1++;
if(n1 > 9)
n1 = 0;
}
}
if(SW2 == 0)
{
Delay(500);
if(SW2 == 0)
{
while(SW2 == 0)
{
Display_Keys();
}
n2++;
if(n2 > 9)
n2 = 0;
}
}
if(SW3 == 0)
{
Delay(500);
if(SW3 == 0)
{
while(SW3 == 0)
{
Display_Keys();
}
n3++;
if(n3 > 9)
n3 = 0;
}
}
if(SW4 == 0)
{
Delay(500);
if(SW4 == 0)
{
while(SW4 == 0)
{
Display_Keys();
}
n4++;
if(n4 > 9)
n4 = 0;
}
}
}
/*=======================初始化串口=========================*/
void Init_Uart()
{
TMOD = 0x20;
TH1 = 0xf3;
TL1 = 0xf3;
TR1 = 1; //以上4句代码设置串口波特率为2400
SCON = 0x50; //允许接收数据
ES = 1; //使能串口中断
EA = 1; //使能总中断
}
/*===================串口中断服务函数=======================*/
void ServiceUart() interrupt 4
{
if(RI == 1) //判断是否为接收数据中断
{
RI = 0; //清除接收标志位
urdat = SBUF; //从缓冲区取出接收到的数据
}
}
/*==================串口单字节发送函数======================*/
void SendByte(unsigned char dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
/*==================串口字符串发送函数======================*/
void SendString(unsigned char *str)
{
while(*str != '\0')
{
SendByte(*str++);
}
}
/*========================主函数============================*/
void main()
{
Init_Uart();
Display_Open();
SendString("欢迎使用小蜜蜂XMF05系列开发板\r\n");
while(1)
{
Scan_Keys();
Display_Keys();
if(urdat == 0xa3) //如果串口接收到上位机0xA3命令字
{
urdat = 0;
P1 = ~P1; //对8个LED灯的开关状态取反
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
cong-blue-bridge-cup蓝桥杯单片机资料
共36个文件
obj:4个
lst:4个
bak:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 106 浏览量
2023-11-13
16:20:22
上传
评论
收藏 557KB ZIP 举报
温馨提示
蓝桥杯单片机资料
资源推荐
资源详情
资源评论
收起资源包目录
cong-blue-bridge-cup-master.zip (36个子文件)
cong-blue-bridge-cup-master
01-LED跑马灯
LED跑马灯.hex 392B
LED跑马灯 3KB
STARTUP.LST 14KB
LED跑马灯.C 676B
LED跑马灯.uvproj 13KB
STARTUP.A51 6KB
LED跑马灯.LST 3KB
LED跑马灯.OBJ 3KB
LED跑马灯.uvgui.OHY 70KB
LED跑马灯.M51 6KB
LED跑马灯.plg 434B
STARTUP.OBJ 749B
LED跑马灯_uvproj.bak 13KB
LED跑马灯_uvopt.bak 54KB
LED跑马灯.lnp 66B
LED跑马灯.uvopt 54KB
LICENSE 9KB
小蜜蜂蓝桥杯单片机-基础技能训练-全部15个源码.rar 529KB
【05A综合01】按键灯光串口数码管综合应用
【05A综合01】按键灯光串口数码管综合应用
按键灯光串口数码管综合应用.uvproj 13KB
按键灯光串口数码管综合应用.plg 262B
按键灯光串口数码管综合应用.LST 790B
按键灯光串口数码管综合应用.c 4KB
STARTUP.LST 14KB
按键灯光串口数码管综合应用.lnp 100B
STARTUP.A51 6KB
按键灯光串口数码管综合应用.OBJ 10KB
按键灯光串口数码管综合应用.__i 65B
按键灯光串口数码管综合应用.M51 16KB
按键灯光串口数码管综合应用.hex 2KB
按键灯光串口数码管综合应用.uvopt 6KB
STARTUP.OBJ 749B
按键灯光串口数码管综合应用.uvgui.Administrator 70KB
按键灯光串口数码管综合应用 9KB
按键灯光串口数码管综合应用.uvgui_Administrator.bak 70KB
.gitignore 350B
嵌入式与物联网串口数据监测助手-V1.22.zip 13KB
共 36 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6732
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功