找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 648|回复: 1
收起左侧

stc12c5204ad,关于串口的问题。

[复制链接]
ID:1081034 发表于 2023-6-1 11:28 | 显示全部楼层 |阅读模式
就是想实现电脑发数据然后单片机数码管上面显示相应的数字。遇到瓶颈了。单片机是STC12C5204AD
U16~U19是LS145 芯片。这个是我敲的代码但是运行结果不对,不懂是不是写错了。
附带原理图请大神们指教。
#include<reg51.h>
#include "intrins.h"
#define uchar unsignedchar
#define uint unsigned int
unsigned char senddata;
unsigned char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x00};
void delayms(unsigned int k);
void Deng();
void Smg();
void Nixie(unsigned char L,N)
{
    switch(L)
    {
        case 1:P3=0x08;break;
        case 2:P3=0x0c;break;
        case 3:P3=0x10;break;
        case 4:P3=0x14;break;

        case 5:P3=0x20;break;
        case 6:P3=0x24;break;
        case 7:P3=0x28;break;
        case 8:P3=0x2c;break;

        case 9:P3=0x30;break;
        case 10:P3=0x34;break;
        case 11:P3=0x38;break;
        case 12:P3=0x3c;break;
    }
    P1=seg[N];
    P2=seg[N];
    delayms(1);
    P1=0x00;
    P2=0x00;

}
void Deng()   //灯
{
        P1=0X00;
        P2=0X00;
        P3=0x30;
        delayms(1);

        P1=0X00;
        P3=0x34;
        delayms(1);

        P1=0X00;
        P2=0X00;
        P3=0x38;
        delayms(1);

        P3=0x3c;
        P1=0x00;
        delayms(1);
}
void Smg()  //数码管
{
        Nixie(1,1);
        delayms(1);
        Nixie(2,2);
        delayms(1);
        Nixie(3,3);
        delayms(1);
        Nixie(4,4);
        delayms(1);
        Nixie(5,5);
        delayms(1);
        Nixie(6,6);
        delayms(1);
        Nixie(7,7);
        delayms(1);
        Nixie(8,8);
        delayms(1);
}
void InitializeSystem()   //串口初始化,波特率9600
{
        SCON = 0X50;//串口方式1,允许接收
        TMOD = 0X20;//定时器1定时方式2
        TCON = 0x40;//设定时器1开始计数
        TH1 = TL1 = 250;
        PCON = 0x80; //波特率加倍控制,SMOD位
        RI = 0; //清收发标志
        TI = 0;
        TR1 = 1; //启动定时器
        EA=1;                //开启总中断
        ES = 1;
        ET1=0;
}
   //字符发送函数
void putchar(unsigned char data1)  
{
        SBUF = data1;               //将待发送的字符送入发送缓冲器
        while(TI == 0);            //等待发送完成
        TI = 0;                     //发送中断标志请0
}
//字符串发送函数
void putstring(unsigned char *dat)
{
        while(*dat != '\0')           //判断字符串是否发送完毕
        {
                putchar(*dat);        //发送单个字符
                dat++;                 //字符地址加1,指向先下一个字符
                delayms(1);
        }
}
//接收中断函数
void revdata(void) interrupt 4
{
        if(RI == 0) return;         //如果没有接收中断标志,返回
        ES = 0;            //关闭串口中断
        RI = 0;            //清串行中断标志位
        senddata=SBUF;
        ES = 1;                 //开启串口中断
}

void main(void)
{
     InitializeSystem( );
         while(1)
          {
        if(senddata=='1')
       {
        Nixie(1,1);
       }

        }
}
void delayms(unsigned int k)
{

        unsigned char data i, j;
    while(k--)
    {
        i = 22;
        j = 128;
        do
        {
                while (--j);
        } while (--i);
   }
}


51hei图片20230531095542.jpg

Schematic_显示板_2023-05-29.pdf

183.99 KB, 下载次数: 3

回复

使用道具 举报

ID:276663 发表于 2023-6-1 22:52 | 显示全部楼层
nixie传入参数的方式不对,(unsigned char L, unsigned char N)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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