| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
功能实现要求:上位机给单片机发送数据,单片机接收,然后将数据写入P0端口寄存器,然后将输入的数据返回给上位机 
问题:单片机对接收的数据不能写入端口寄存器 
 
#include<reg51.h> 
 
//--定义使用的IO--// 
#define GPIO_DIG P0 
 
sbit LSA=P2^2; 
sbit LSB=P2^3; 
sbit LSC=P2^4; 
 
//--定义全局变量--// 
unsigned char code DIG_CODE[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码 
unsigned char DisplayData[8]; 
//用来存放要显示的8位数的值 
 
//--声明全局函数--// 
void DigDisplay();         //动态显示函数            
void UsartConfiguration(); 
/******************************************************************************* 
* 函 数 名         : main 
* 函数功能                   : 主函数 
* 输    入         : 无 
* 输    出         : 无 
*******************************************************************************/ 
 
void main() 
{ 
        unsigned char receiveData; 
 
        UsartConfiguration(); 
        while(1) 
        { 
                if(RI == 1)                                //查看是否接收到数据 
                { 
                        receiveData = SBUF;        //读取数据 
                        RI = 0;                                //清除标志位 
                        SBUF=receiveData; //将接收到的数据放入到发送寄存器 
            while(!TI);                  //等待发送数据完成 
            TI=0;                          //清除发送完成标志位 
                        DisplayData[7] = DIG_CODE[receiveData]; 
                        DisplayData[0] = 0x00; 
                        DisplayData[1] =0x00;      
                        DisplayData[2] = 0x00; 
                        DisplayData[3] = 0x00;           
                        DisplayData[4] = 0x00; 
                        DisplayData[5] = 0x00;    
                        DisplayData[6] = 0x00; 
                } 
                DigDisplay(); 
        } 
} 
/******************************************************************************* 
* 函 数 名         :UsartConfiguration() 
* 函数功能                   :设置串口 
* 输    入         : 无 
* 输    出         : 无 
*******************************************************************************/ 
 
void UsartConfiguration() 
{ 
        SCON=0X50;                        //设置为工作方式1 
        TMOD=0X20;                        //设置计数器工作方式2 
        PCON=0X80;                        //波特率加倍 
        TH1=0XF3;                    //计数器初始值设置,注意波特率是4800的 
        TL1=0XF3; 
        TR1=1;                                            //打开计数器 
        ES=1;                                                //打开接收中断 
        EA=1;                                                //打开总中断 
} 
/******************************************************************************* 
* 函 数 名         : DigDisplay 
* 函数功能                   : 使用数码管显示 
* 输    入         : 无 
* 输    出         : 无 
*******************************************************************************/ 
void DigDisplay() 
{ 
        unsigned char i; 
        unsigned int j; 
        for(i=0;i<8;i++) 
        { 
                switch(i)         //位选,选择点亮的数码管, 
                { 
                        case(0): 
                                LSA=0;LSB=0;LSC=0; break;//显示第0位 
                        case(1): 
                                LSA=1;LSB=0;LSC=0; break;//显示第1位 
                        case(2): 
                                LSA=0;LSB=1;LSC=0; break;//显示第2位 
                        case(3): 
                                LSA=1;LSB=1;LSC=0; break;//显示第3位 
                        case(4): 
                                LSA=0;LSB=0;LSC=1; break;//显示第4位 
                        case(5): 
                                LSA=1;LSB=0;LSC=1; break;//显示第5位 
                        case(6): 
                                LSA=0;LSB=1;LSC=1; break;//显示第6位 
                        case(7): 
                                LSA=1;LSB=1;LSC=1; break;//显示第7位         
                } 
                GPIO_DIG=DisplayData[i];//发送段码 
                j=10;                                                 //扫描间隔时间设定 
                while(j--);         
                GPIO_DIG=0x00;//消隐 
        } 
} |   
 
 
 
 |