【年度報(bào)告】你若安好QvQ那還得了的2021時(shí)光機(jī)

四、編程控制
(include "reg52.h"
214!
Hefine SI2E 4
(/#define SIMULATE
//仿真時(shí)將此行注釋掉
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]:接收數(shù)據(jù)個(gè)數(shù);
buff[1]:接收的數(shù)據(jù)
16
/1 buff[2]:接收數(shù)據(jù)個(gè)數(shù),
buff[3」:接收的數(shù)據(jù)
17
void SndCom(char ch);
18
void Disp(unsigned char n);
19
2o
//定時(shí)TO ,中斷服務(wù)用于獨(dú)立循環(huán)顯示發(fā)送接收數(shù)據(jù)
四
接收和發(fā)送的數(shù)據(jù)只要存放到數(shù)組 buf[4」中,
22
主程序不用管,由本中斷T0 程序自動顯示。
23
/否則,必須在生程序中不斷調(diào)用顯宗程岸】
24
void TimeO() interrupt 1
25月1
26
Disp(index);
27
index++; index*=4;
28
2e
7/每個(gè)字符按高、低四位十六進(jìn)制數(shù)顯示
30
77.輸入?yún)?shù):unsigned char n :首左起顯示位(0-7)
31
7/返回參數(shù):無
32
void Disp(unsigned char n)
33日{(diào) unsigned char i,SHOW2:]
34
i=n/2;
7/顯示字符下標(biāo),每個(gè)字符顯示高低兩段
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轉(zhuǎn)換為可顯示的數(shù)據(jù)
eo
#else
田
SHOWi=~table[SHOWi]:
// SHOWi轉(zhuǎn)換為可顯示的數(shù)據(jù)
42
#endif
43
P2=0xff; // 關(guān)閉顯示
的
PO= SHOWi;
// 將顯示碼送段顯示
A5
i-1<<(n+4);
// 顯示第 n 個(gè) 7段數(shù)碼模塊
46
P2-i^Oxff;
//使對應(yīng)的顯示段位為0,其它不顯示的為1
田
48
49
//串口接收中斷
50
51 void inittimers() // 初始化
52甲i char i;
53
// 初始化定時(shí)器0 和定時(shí)器1
54
TYOD=OX22;//定時(shí)器0 顯示,定時(shí)器1波特率
55
TL1=0Xfd;//定時(shí)初值
9600 波特
56
TH1=oXfd;
7
ET1=0;//不允許定時(shí)中斷
s8
TR1=1;// 啟動定時(shí)器1」
6s
TLO=OX0;// 定時(shí)初值
60
THO=OXO;
61
ETO=1;//允許定時(shí)中斷
62
EA-1;// 開總中斷」
63
TRO=1;//啟動定時(shí)
64
65
// 初始化串行口
66
SCON=0x50;
//.申行通信方式1,10位通信,
67
//波特率由T1滋出率確定。啟動申行口接收數(shù)據(jù)
68
PCoN=0x00;
//波特率不加倍
ee
(11.0592MHz/12)/32/9600=3
256-3=253=FDH
70
TI=1;
/1,預(yù)置發(fā)送為空
m
ES=1;
/1.允許串行口中斷
12
//鍵盤中斷初始化