不知道你是不是用的51单片机,给你一个程序参考一下吧。
/**************************************
函数功能:
在#MCU2的数码管上显示收到的学号后3位
若与自己的相符合,则发送Right!否则发送Wrong!
默认学号为123
***************************************/
#include<reg52.h>
#include<absacc.h>
/*******************************
总线地址定义区
********************************/
#define LED_DIG XBYTE[0xD000] //定义数码管的段选总线地址
#define LED_COM XBYTE[0xC000] //定义数码管的位选总线地址
/*******************************
全局变量定义区
********************************/
unsigned char code DisCode[] = {0x0C0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90,0xFF,0xe1,0x89};
//共阳极数码管码表,定位在ROM中
bit Flag = 0; //一个标志位,防止MCU重复发送
unsigned char RR = 0; //收数指针
unsigned char TT = 0; //发数指针
unsigned char *SDat;
unsigned char Disbuf[] = {0,0,0,0x0a}; //存放欲显示的数据
unsigned char Hello[] = {'H','e','l','l','o','!','\n'};
unsigned char Right[] = {'R','i','g','h','t','!','\n'};
unsigned char Wrong[] = {'W','r','o','n','g','!','\n'};
/********************************
显示延时
*********************************/
void Delay()
{
unsigned char i = 10;
while(i--);
}
/********************************
带参数传递的显示程序循环方式
*********************************/
void Display(unsigned char Dat[4])
{
unsigned char COM = 0X01; //数码管位选
unsigned char i;
for(i=0;i<4;i++)
{
LED_DIG = DisCode[Dat[i]]; //送段选
LED_COM = COM; //选通一个数码管
Delay();
LED_COM = 0; //消隐
COM<<=1; //移位,准备选通下一个数码管
}
}
/********************************
主函数
*********************************/
void main(void)
{
//初始化
TMOD = 0x20;
TH1 = TL1 = -11059200/12/32/9600;
SCON = 0x50;
TR1 = 1;
ES= 1;
EA= 1;
//主循环
SDat = Hello;
TI = 1;
while(1)
{
Display(Disbuf); //功能子函数调用
}
}/********************************
中断函数
*********************************/
void SER_SR() interrupt 4 using 2
{
if(RI)
{
RI = 0;
Disbuf[RR++] = SBUF;
if(RR==3)
{
RR = 0;
if((Disbuf[0]==0x01)&&(Disbuf[1]==0x02)&&(Disbuf[2]==0x03))
{
Disbuf[3] = 0x0b;
SDat = Right;
}
else
{
Disbuf[3] = 0x0c;
SDat = Wrong;
}
TI = 1;
}
}
else
{
TI = 0;
if(TT<7)
{
SBUF = *(SDat+TT);
TT++;
}
else
TT = 0;
}
}
温馨提示:答案为网友推荐,仅供参考