搜索
bottom↓
回复: 0

为什么我串口发送13数码管显示却是33

[复制链接]

出0入0汤圆

发表于 2012-9-6 11:26:36 | 显示全部楼层 |阅读模式
程序如下:

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char flag,a,i,b,b1;
static unsigned char data CN[4];
static unsigned char data CT;
uchar code seg7[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uchar code table[]="OK ";
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit buzzer=P0^6;

void delay1(uchar z)
{
        while(z--);
}

uchar ASCII2HEX(uchar ASCIIData)                                //接收到的校验和作为Ascii码,需转换成16进制
{
        uchar HexData;

        if (ASCIIData==0x30)
        {
                HexData=0x00;
        }
        else if         (ASCIIData==0x31)
        {
                HexData=0x01;
        }
        else if         (ASCIIData==0x32)
        {
                HexData=0x02;
        }
        else if         (ASCIIData==0x33)
        {
                HexData=0x03;
        }
        else if         (ASCIIData==0x34)
        {
                HexData=0x04;
        }
        else if         (ASCIIData==0x35)
        {
                HexData=0x05;
        }
        else if         (ASCIIData==0x36)
        {
                HexData=0x06;
        }
        else if         (ASCIIData==0x37)
        {
                HexData=0x07;
        }
        else if         (ASCIIData==0x38)
        {
                HexData=0x08;
        }
        else if         (ASCIIData==0x39)
        {
                HexData=0x09;
        }
        return HexData;
}

void display(uint mm)
{
    uchar m1,m2,m3;
        m1=mm/100;
    m2=mm%100/10;//个、十位分离
    m3=mm%100%10;
  
           P0=seg7[m1];
           P2 |= 0xE0;
           P2 &= 0x1F;
           P0 = 0x02;
           P2 |= 0xC0;
           P2 &= 0x3F;
           delay1(10);
       P0=seg7[m2];
           P2 |= 0xE0;
           P2 &= 0x1F;
           P0 = 0x04;
           P2 |= 0xC0;
           P2 &= 0x3F;
           delay1(10);
       
           P0=seg7[m3];
           P2 |= 0xE0;
           P2 &= 0x1F;
           P0 = 0x08;
           P2 |= 0xC0;
           P2 &= 0x3F;
           delay1(10);


       

}


void serinit()        //初始化
{
   TMOD=0x20;
   TH1=0xf3;
   TL1=0xf3;
   TR1=1;
   REN=1;
   SM0=0;
   SM1=1;
   EA=1;
   ES=1;

}
uint serial()
{
     if(flag)
         {
                 ES=0;
                for(i=0;i<2;i++)
                {
                        SBUF=table[i];
                        while(!TI);
                        TI=0;
                }
                b=ASCII2HEX(CN[0]);
                b1=ASCII2HEX(CN[1]);

                b=b*10+b1;
               
                CT=0;
                ES=1;
                flag=0;
         }
         return b,b1;
}


void main()
{
         buzzer = 0;                    //高有效
        P25=1;
        P26=0;
        P27=1;
        P25=0;
        P26=0;
        P27=0;
         serinit();
        while(1)
        {
                       
        serial();               
          display(b);
        }
}       
void ser() interrupt 4  //接收成功后自动进入串口中断程序
{
       
   if(RI)
   {
   CN[CT] = SBUF;                                        //将寄存器数据传递给临时寄存器。
   CT++;
   RI=0;     //串口中断为手动置0恢复
   }
   
   flag=1;   //标志位置一
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 18:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表