【年度报告】你若安好QvQ那还得了的2021时光机

四、编程控制
(include "reg52.h"
214!
Hefine SI2E 4
(/#define SIMULATE
//仿真时将此行注释掉
unsigned char code table[]=//显示0-9 A-E
{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7C,
0x39,0x5E,0x79,0x71 1;
过
10
D
11 Led=P2^0;
12
13
unsigned char idata index;
14 unsigned char idata buff[2];
15
/ buff[0]:接收数据个数;
buff[1]:接收的数据
16
/1 buff[2]:接收数据个数,
buff[3」:接收的数据
17
void SndCom(char ch);
18
void Disp(unsigned char n);
19
2o
//定时TO ,中断服务用于独立循环显示发送接收数据
四
接收和发送的数据只要存放到数组 buf[4」中,
22
主程序不用管,由本中断T0 程序自动显示。
23
/否则,必须在生程序中不断调用显宗程岸】
24
void TimeO() interrupt 1
25月1
26
Disp(index);
27
index++; index*=4;
28
2e
7/每个字符按高、低四位十六进制数显示
30
77.输入参数:unsigned char n :首左起显示位(0-7)
31
7/返回參数:无
32
void Disp(unsigned char n)
33日{ unsigned char i,SHOW2:]
34
i=n/2;
7/显示字符下标,每个字符显示高低两段
3s
//要显示的字符 buf[i];
3o
if(ns2)
SHOWi-buff[i]&0xf;
//低四位
37
else
SHOWi=(buff[i]>>4)&0xf;//高四位
38自
#ifdef SIMULATE
3e
SHOWi=table[SHOWi];
// SHOWi转换为可显示的数据
eo
#else
田
SHOWi=~table[SHOWi]:
// SHOWi转换为可显示的数据
42
#endif
43
P2=0xff; // 关闭显示
的
PO= SHOWi;
// 将显示码送段显示
A5
i-1<<(n+4);
// 显示第 n 个 7段数码模块
46
P2-i^Oxff;
//使对应的显示段位为0,其它不显示的为1
田
48
49
//串口接收中断
50
51 void inittimers() // 初始化
52甲i char i;
53
// 初始化定时器0 和定时器1
54
TYOD=OX22;//定时器0 显示,定时器1波特率
55
TL1=0Xfd;//定时初值
9600 波特
56
TH1=oXfd;
7
ET1=0;//不允许定时中断
s8
TR1=1;// 启动定时器1」
6s
TLO=OX0;// 定时初值
60
THO=OXO;
61
ETO=1;//允许定时中断
62
EA-1;// 开总中断」
63
TRO=1;//启动定时
64
65
// 初始化串行口
66
SCON=0x50;
//.申行通信方式1,10位通信,
67
//波特率由T1滋出率确定。启动申行口接收数据
68
PCoN=0x00;
//波特率不加倍
ee
(11.0592MHz/12)/32/9600=3
256-3=253=FDH
70
TI=1;
/1,预置发送为空
m
ES=1;
/1.允许串行口中断
12
//键盘中断初始化