本文包含原理图、PCB、源代码、封装库、中英文PDF等资源
您需要 登录 才可以下载或查看,没有账号?注册会员
×
请高手帮忙!!!(急用)
这是我写的一段程序,是用串口实现数码管显示,要做的工作是:在串口调试助手发送十六进制数00~ff,通过串口中断处理,在数码管上显示十进制数000~255;:
hug: 问题:在串口调试发送十六进制,需要在程序中将其转换为十进制数吗? 程序运行时串口调试发送十六进制ff,数码管显示255是正确的,为什么发送其他数据时,数码管显示的数据不正确??
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<math.h>
unsigned char Dis_Baiwei;//定义百位
unsigned char Dis_Shiwei;//定义十位
unsigned char Dis_Gewei; //定义个位
unsigned char const tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567
/*------------------------------------------------
延时子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
void main (void)
{
SCON = 0x50; /* SCON: 模式 1, 8-bit UART, 使能接收 */
TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */
TR1 = 1; /* TR1: timer 1 run */
EA = 1; /*打开总中断*/
ES = 1; /*打开串口中断*/
while (1)
{
P0=Dis_Baiwei;
P2=0;
delay(30);
P0=Dis_Shiwei;//显示十位
P2=1;
delay(30); //短暂延时
P0=Dis_Gewei; //显示个位
P2=2;
delay(30);
}
}
/******************************************************************/
/* 串口中断程序 */
/******************************************************************/
void UART_SER (void) interrupt 4 //串行中断服务程序
{
unsigned char Temp; //定义临时变量
if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值
Dis_Baiwei=tab[Temp/100];//百位显示处理
Dis_Shiwei=tab[(Temp%100)/10];//十位显示值处理
Dis_Gewei=tab[(Temp%100)%10]; //个位显示处理;
P1=Temp; //把值输出到P1口,用于观察
SBUF=Temp; //把接收到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
} [ |
|