|
就是想实现电脑发数据然后单片机数码管上面显示相应的数字。遇到瓶颈了。单片机是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);
}
}
|
|