#include"REG52.h"
#define uchar unsigned char
#define uint unsigned int
extern uchar code acLedSegCode[];
extern uchar led[4];
uchar Tdata;
uchar LEDMode = 0;
uchar LEDmax = 0;
uchar ComTimerT;
uchar ScanIndex;
uchar KEY;
uchar Recnum = 0;
uchar check;
uchar Timer[12]; // LED显示缓冲
uchar fs = 0;
uchar Ctrl = 55; // LED显示控制字
uchar ComBuf[16]; // 串口接收缓冲
uint DelayKey; // 键盘延时
bit bFlag = 0;
extern bit Flag;
void SendAByte(uchar LData); // 单个字符发送
void DisposeCOM();
void DisposeLED();
void DisposeLED()
{
if(bFlag)
{
switch(LEDMode)
{
case 0:
led[0] = acLedSegCode[Timer[0]]; // 显示年月
led[1] = acLedSegCode[Timer[1]];
led[2] = acLedSegCode[Timer[2]];
led[3] = acLedSegCode[Timer[3]];
break;
case 1:
led[0] = acLedSegCode[Timer[4]]; // 显示日时
led[1] = acLedSegCode[Timer[5]];
led[2] = acLedSegCode[Timer[6]];
led[3] = acLedSegCode[Timer[7]];
break;
case 2:
led[0] = acLedSegCode[Timer[8]]; // 显示分秒BCD码
led[1] = acLedSegCode[Timer[9]];
led[2] = acLedSegCode[Timer[10]];
led[3] = acLedSegCode[Timer[11]];
break;
case 3:
led[0] = acLedSegCode[15]; //F // 显示发送界面
led[1] = 0x40;
led[2] = 0x40;
led[3] = acLedSegCode[fs]; //显示发送的值
default :
break;
}
}
else
{
switch(LEDMode)
{
case 0:
led[0] = acLedSegCode[0];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[1]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[1]%10]; // 接收控制字ASCII码低位
break;
case 1:
led[0] = acLedSegCode[1];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[2]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[2]%10]; // 接收控制字ASCII码低位
break;
case 2:
led[0] = acLedSegCode[2];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[3]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[3]%10]; // 接收控制字ASCII码低位
break;
case 3:
led[0] = acLedSegCode[3];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[4]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[4]%10]; // 接收控制字ASCII码低位
break;
case 4:
led[0] = acLedSegCode[4];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[5]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[5]%10]; // 接收控制字ASCII码低位
break;
case 5:
led[0] = acLedSegCode[5];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[6]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[6]%10]; // 接收控制字ASCII码低位
break;
case 6:
led[0] = acLedSegCode[6];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[7]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[7]%10]; // 接收控制字ASCII码低位
break;
case 7:
led[0] = acLedSegCode[7];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[8]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[8]%10]; // 接收控制字ASCII码低位
break;
case 8:
led[0] = acLedSegCode[8];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[9]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[9]%10]; // 接收控制字ASCII码低位
break;
case 9:
led[0] = acLedSegCode[9];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[10]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[10]%10]; // 接收控制字ASCII码低位
break;
case 10:
led[0] = acLedSegCode[10];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[11]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[11]%10]; // 接收控制字ASCII码低位
break;
case 11:
led[0] = acLedSegCode[11];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[12]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[12]%10]; // 接收控制字ASCII码低位
break;
case 12:
led[0] = acLedSegCode[12];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[13]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[13]%10]; // 接收控制字ASCII码低位
break;
case 13:
led[0] = acLedSegCode[13];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[14]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[14]%10]; // 接收控制字ASCII码低位
break;
case 14:
led[0] = acLedSegCode[14];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[15]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[15]%10]; // 接收控制字ASCII码低位
break;
case 15:
led[0] = acLedSegCode[15];
led[1] = 0x40; // 第二个LED一直显示-,保持不变
led[2] = acLedSegCode[ComBuf[16]/10]; // 接收控制字ASCII码高位
led[3] = acLedSegCode[ComBuf[16]%10]; // 接收控制字ASCII码低位
break;
case 16:
led[0] = acLedSegCode[15]; //F // 显示发送界面
led[1] = 0x40;
led[2] = 0x40;
led[3] = acLedSegCode[fs]; //显示发送的值
default :
break;
}
}
}
void DisposeKEY2()
{
switch(cKeyCode)
{
case 0x60: //程序切换P2.0
Flag = 0;
TR1 = 0;
break;
case 0x50: //显示切换P2.1
LEDMode ++;
if(LEDMode == LEDmax)
{
if(bFlag == 0)
LEDMode = 16;
else
LEDMode = 0;
}
if(LEDMode == 17)
LEDMode = 0;
break;
case 0x30: //发送键P2.2
fs ++;
if(bFlag == 0)
LEDMode = 16;
else
LEDMode = 3;
if(fs == 0x10)
fs = 0x00;
SendAByte(fs);
break;
default:
break;
}
cKeyCode = 0;
DisposeLED();
}
void SendAByte(uchar LData)
{
if(LData >= 0 && LData <=9)
LData += 48;
else if(LData >= 10 && LData <= 15)
LData += 87;
SBUF = LData;
ComTimerT = 200; //延时
while(TI == 0 && ComTimerT); //延时时间到了或者发送完毕退出
}
void Serial() interrupt 4
{
uchar i;
if(TI)
TI=0;
else
{
ComBuf[Recnum++] = SBUF;
RI = 0;
if(ComBuf[0] == 'T' && Recnum == 13) //接收时间开始标志位位,T为接收时间标志
{
for(i = 0;i < 12;i ++)
Timer[i] = ComBuf[i + 1] - 48;
LEDMode = 0;
LEDmax = 4;
Recnum = 0; //接收控制字2字节
bFlag = 1;
}
if(ComBuf[0] == '<' && Recnum != 1 && ComBuf[Recnum- 1] == '>') //接收数据开始和结束位都为'!'
{
LEDMode = 0;
LEDmax = Recnum - 2;
Recnum = 0;
bFlag = 0;
}
}
}
zc.rar_visual c_数控 电源_电源
版权申诉
170 浏览量
2022-09-24
15:54:40
上传
评论
收藏 1KB RAR 举报
寒泊
- 粉丝: 76
- 资源: 1万+
最新资源
- 2406011243520696.mp4
- sql语句及应用场景.zip
- 疯狂吃月饼游戏小程序前端源码
- 硬件工程师+电子类工程师岗位简历模板
- 知识领域: 人工智能 技术关键词: TensorFlow、Keras、深度学习、神经网络
- 知识领域: 自动化测试 技术关键词: pytest、unittest、自动化测试、测试框架
- 知识领域: 数据库管理 技术关键词: SQLAlchemy、数据库、ORM、SQL 内容关键词: 数据库连接、数据查询、数据操作
- 知识领域: 网络编程 技术关键词: socket、网络编程、异步IO、TCP/IP 内容关键词: 客户端、服务器、网络协议
- 知识领域: 自然语言处理 技术关键词: NLTK、spaCy、文本处理、语言模型
- ubuntu20.04安装教程.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈