编辑: 元素吧里的召唤 | 2019-07-02 |
* 函数声明 void init_data(void);
void init_COM(void);
void serial_IRQ(void);
uchar ASCII2SEG(uchar ascii);
void display_SEG(uchar *buffer);
void code_index(uchar *buffer, uchar index);
void transmit(void);
void set_baud(void);
void delay(void);
* 全局变量定义 uchar rdata;
// 接收字符 uchar tdata;
// 发送字符 uchar rcount;
// 接收字符个数 uchar tcount;
// 发送字符个数 uchar baud;
// 波特率 uchar baud_opt;
// 波特率选项 * 常量表 // 0~9,a~z,-,.段码 const uchar code Tab_char[] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6, 0xFA,0x3E,0x9C,0x7A,0x9E,0x8E,0xF6,0x2E,0x0C,0x70, 0x6E,0x1C,0xED,0xEC,0xFC,0xCE,0xE6,0x8C,0xB6,0x1E, 0x7C,0x38,0x7D,0x6E,0x76,0xDA,0x02,0x01 };
// 数码管位码 const uchar code Tab_dig[] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
// 波特率参数 const uchar code Tab_baud[] = {12,24,48,96, 0x98,0xCC,0xE6,0xF3};
int main(void) { uchar LED_buf[8];
// 数码管中显示字符在段码表中位置数组 init_data();
init_COM();
while(1) { display_SEG(LED_buf);
} return 0;
} * 函数名称:init_COM * * 函数功能描述:初始化串口 * 输入参数:none * * 返回数据:none * * 说明:使用串口控制、计数方式、计数控制、电源控制、中断允许、中断优先级控制 * 寄存器 void init_COM(void) { SCON = 0x50;
// 串口方式1,允许接收 TMOD |= 0x20;
// 计数方式2 PCON = 0x80;
// 波特率加倍 TH1 = Tab_baud[7];
// 波特率9600bps TL1 = Tab_baud[7];
IE |= 0x91;
// 串口、片外中断0中断允许 IP |= 0x10;
// 串口中断为高优先级 IT0 = 1;
// 片外中断申请边沿触发方式 TR1 = 1;
// 启动波特率发生器 } * 函数名称:init_data * * 函数功能描述:初始化变量,对发送接收变量及计数变量清零 * 输入参数:none * * 返回数据:none * * 说明:'
-'
作为等待标志 void init_data(void) { rdata = '
-'
;
tdata = '
-'
;
rcount = 0;
tcount = 0;
baud_opt = 0;
baud = Tab_baud[3];
} * 函数名称:serial_IRQ * * 函数功能描述:串口中断申请的处理程序,接收数据、清中断标志位及字符计数 * 输入参数:none * * 返回数据:none * * 说明: none void serial_IRQ(void) interrupt
4 using
1 { if (1 == RI) { rdata = SBUF;
RI = 0;
tdata = rdata;
// 备份接收到的字符,为发送做准备 transmit();
// 调用发送函数 rcount++;
} else if (1 == TI) { TI = 0;
tcount++;
} if (99 == rcount) rcount = 0;
else if (99 == tcount) tcount = 0;
} * 函数名称:ASCII2SEG * * 函数功能描述:将ASCII码转换成数码管段码数组的下标 * 输入参数:待转换的ASCII字符 * * 返回数据:自定义数码管段码数组的下标 * * 说明:'
.'
作为未定义字符的标志 uchar ASCII2SEG(uchar ascii) { if ((ascii >
= '
0'
) &
&
(ascii = '
a'
) &
&
(ascii = '
A'
) &
&
(ascii = '
a'
) &
&
(tdata = '
A'
) &
&
(tdata ........