|
就是想實現電腦發數據然后單片機數碼管上面顯示相應的數字。遇到瓶頸了。單片機是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);
}
}
|
|