微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来

以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
unsigned long num;
uint a1,a2;
uchar num1,flag;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,    //显示数据编码
                                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delayms(uint xms);
void display(unsigned long int value);
void init();
void main()
{
        init();
        while(1)
        {
                display(num);
        }
}
void init()
{
        TMOD=0x20; //定义定时器1为方式2工作
        TH1=0xfd; //给T1高位赋初值,设置串口波特率为9600bps.
        TL1=0xfd; //给T1低位赋初值,设置串口波特率为9600bps.
        TR1=1;         //定时器1运行控制位置1,运行T1定时器
        SCON=0x50; //定义串口为方式1工作,并开串口允许串行接收位(REN=1)
        EA=1;        //开总中断
        ES=1;  //开串口中断
}
void serial() interrupt 4
{
        num1++; //设置循环num1
        if(num1==1)
        {
                a1=SBUF; //将第一次的数据给temp
                 RI=0;        //置RI为0以便接收下一个数据
        }
        if(num1==2)
        {
                a2=SBUF; //将第二次的数据给temp
                num=(a1<<8|a2);//a1的低位数据向左移变成num的高位,低位空出,通过或运算将a2的储存在num的最低位。
                 RI=0;//置RI为0以便接收下一个数据
                num1=0;
        }
}
void display(unsigned long int value)
{
        uchar N1,N2,N3,N4,N5,N6;
        N1=value/100000;
        N2=value%100000/10000;
        N3=value%100000%10000/1000;
        N4=value%100000%10000%1000/100;
        N5=value%100000%10000%1000%100/10;
        N6=value%10;
/*        dula=1;
        P0=table[N1];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfe;
        wela=0;
        P0=0xff;
        delayms(1);        */
        dula=1;
        P0=table[N2];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfd;
        wela=0;
        P0=0xff;
        delayms(1);
        dula=1;
        P0=table[N3];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xfb;
        wela=0;
        P0=0xff;
        delayms(1);
        dula=1;
        P0=table[N4];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xf7;
        wela=0;
        P0=0xff;
        delayms(1);
        dula=1;
        P0=table[N5];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xef;
        wela=0;
        P0=0xff;
        delayms(1);
        dula=1;
        P0=table[N6];
        dula=0;
        P0=0xff;
        wela=1;
        P0=0xdf;
        wela=0;
        P0=0xff;
        delayms(1);
}
void delayms(uint xms)
{
        uint x,y;
        for(x=xms;x>0;x--)
                for(y=110;y>0;y--);
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top