本帖最后由 b7857281 于 2017-4-30 17:02 编辑
我这个数码管只能显示0-15 我想显示0-99 可是如果我在服务程序直接写也是可以 可是我想有没有简便的方法?
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
bit flag;
uchar UART_data;
uchar NUM;
sbit dula=P2^6;
sbit wela=P2^7;
sbit LED1=P1^1;
uchar code table[]="I get ";
uchar code SMG_Dula[]={
0x3f,0x06,0x5b,0x4f,
//0 1 2 3
0x66,0x6d,0x7d,0x07,
//4 5 6 7
0x7f,0x6f,0x77,0x7c,
//8 9 A B
0x39,0x5e,0x79,0x71}; //duanxuan
void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=114;y>0;y--);
}
void Scon_init()
{
TMOD=0X20; //定时器1
TH1=0XFD; //9600波特率
TL1=0XFD;
TR1=1; //启动定时器
REN=1; //启动串口
SM0=0; //方式2
SM1=1;
EA=1; //打开全局中断
ES=1; //打开串口中断
}
void SMG_Display(uchar num)
{
wela=1;
P0=0xfe;
wela=0;
dula=1;
P0=SMG_Dula[num/10];
dula=0;
delayms(5);
wela=1;
P0=0xfd;
wela=0;
dula=1;
P0=SMG_Dula[num%10];
dula=0;
delayms(5);
}
void main()
{
uchar i;
Scon_init();
while(1)
{
if(flag==1)
{
ES=0;
LED1=~LED1;
for(i=0;i<6;i++)
{
SBUF=table
;
while(!ti);
TI=0;
}
SBUF=UART_data;
while(!TI);
TI=0;
ES=1;
flag=0;
}
SMG_Display(NUM);
}
}
void Scon_ser()interrupt 4
{
UART_data=SBUF;
RI=0;
flag=1;
if(UART_data == '0') NUM=0;
if(UART_data == '1') NUM=1;
if(UART_data == '2') NUM=2;
if(UART_data == '3') NUM=3;
if(UART_data == '4') NUM=4;
if(UART_data == '5') NUM=5;
if(UART_data == '6') NUM=6;
if(UART_data == '7') NUM=7;
if(UART_data == '8') NUM=8;
if(UART_data == '9') NUM=9;
if(UART_data == 'A') NUM=10;
if(UART_data == 'B') NUM=11;
if(UART_data == 'C') NUM=12;
if(UART_data == 'D') NUM=13;
if(UART_data == 'E') NUM=14;
if(UART_data == 'F') NUM=15;
}
是不是在服务函数要定义好0-99的值
一周热门 更多>