① 單片機怎麼實現數碼管顯示電子鍾時間到01 02 03 ...通過單片機發送到串口通信
很多方式都可以,只有遠程驅動需要匯流排,本地還要有驅動電路或者單片機,一般使用解碼器或者鎖存器即可驅動,程序中依次通過埠向鎖存器數據線輸出顯示字元對應的內容位元組即可。
② 在51單片機的串口通信中,如何在數碼管上用16進制顯示0-65536
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab_disp[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code tabwela[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar i,k,flag;
uint b,num1[2];
uchar num[5];
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
void display()
{
uchar j;
for(j=0;j<5;j++)
{
P0=tabwela[j];
P2=tab_disp[num[j]];
delay(1);
P2=0x00;
}
}
void main()
{
TMOD=0x20;//定時器1的工作方式2
TH1=0xfd; //裝數,設定波特率 9600
TL1=0xfd;
TR1=1;//啟動定時器1
REN=1;//啟動串口接收數據
SM0=0;//串口工作方式1
SM1=1;
EA=1;//開總中斷
ES=1;//開串口中
while(1)
{
if(flag==1)
{
num[0]=b/10000;
num[1]=b%10000/1000;
num[2]=b%1000/100;
num[3]=b%100/10;
num[4]=b%10;
flag=0;
SBUF=b;
while(TI==1)
TI=0;
}
display(); }
}
void ser() interrupt 4
{
while(RI==1)
{
RI=0;
num1[i]=SBUF;
i++;
if(i==2)
i=0;
k++;
}
if(k==2)
{
k=0;
b=(num1[0]*256)+num1[1];
flag=1;
}
}
③ 如何用單片機的串口控制數碼管
單片機的串口控制數碼管,要怎麼控制,是控制顯示什麼數嗎?
用串口控制,是單片機的串口接收數據嗎?那就要電腦串口發送數據了。
那你想怎麼控制呢,電腦發送一個數據,你自己確定,單片機串口接收到這個數據 了,數據就應該怎樣就行了。
④ 基於stc15單片機的串口通信,發送數據用數碼管顯示(源程序)
#include<reg51.h>
#define uchar unsigned char
uchar code ledtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共陽級數碼管碼表0-9
uchar time,scanled;
uchar disdat[2];
bit flag=0;
void dischg() //顯示碼轉換
{
disdat[0]=s_dat/10; //秒轉換
disdat[1]=s_dat%10;
}
void t0isr() interrupt 1 //秒計時
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=20)
{
time=0;
s_dat++;
flag=1;
}
}
void t1isr() interrupt 3 //顯示控制
{
TH1=(65536-4000)/256;
TL1=(65536-4000)%256;
an=1;
P0=0xff; //消隱
an=0;
wei=1;
P0=1<<scanled; //位碼
wei=0;
an=1;
P0=disdat[scanled];
an=0;
scanled++;
scanled%=2; //共8位顯示
}
main()
{
TMOD=0x21; //定時器0和1都為模式1
TH0=(65536-50000)/256; //定時器0,50毫秒中斷一次
TL0=(65536-50000)%256;
TH1=0xfd;
TL1=0xfd;
SCON=0x40;
TR1=1;
TR0=0;
ET0=1;
EA=1;
scanled=0;
time=0;
dischg();
while(1)
{
if(flag)
{
flag=0;
SBUF=s_dat;
while(TI==0);
TI=0;
}
}
}
⑤ 單片機串口通信問題。通過上位機發送數據控制數碼管顯示。
一般 上電時 串口 有可能 會接收到 一個干擾信號,
只要在 上電 時給一個 就十 mS 的延時,初始化一下 數據緩沖器,及顯示緩沖器。
⑥ 51單片機怎麼通過串口通信在數碼管的顯示大於255的值
這個,建議多看一些有關編碼的知識。
串口助手「以16進制發送數據」時,軟體會先將「FF」轉換成8位二進制數據「11111111」即十進制數據「255」發送出去。單片機接收到的實際上也是二進制數據「11111111」。
而你的單片機代碼中「=x/100;"是我們人類的思維模式,編譯器將代碼編譯時,實際上進行的運算是"=X/0b01100100"。
⑦ 用串口通信控制單片機數碼管的問題:我在電腦上輸入的是16進制數,輸出來的是十進制數
兩個解決辦法啊:
1)你在電腦端直接輸入10進制數,那麼你顯示的就是10進制數
2)如果你要顯示你輸入的16進制數MCU端不要直接將接到的數直接/10 %10,這計算出的全部是10進制數。
直接取高4位,送去顯示,然後取低四位送去顯示,那就可以了
程序的話,一個char rx_data
msb = unsigned char (rx_data >> 4)
lsb = unsigned char(rx_data & 0x0f)
然後msb送去十位顯示
LSB送去低位顯示就是你需要的數了
或者用1樓的方法,將你要顯示的數轉化成BCD碼的形式
然後在分別取每一位數送去顯示
⑧ 跪求51單片機高手賜教 關於串口通信和數碼管顯示上位機數據的程序
串口發來2位元組的數據(一般還要加上校驗),按16進制顯示用4個數碼管,10進制用5個數碼管。如果是10進制,先轉換成5個0-9的數(16進制轉換成4個0-15的數),再分別按照數碼管驅動對照表從控制口發出0-9(0-15)對應的驅動碼就可以了。
⑨ 51單片機串口通訊:把上位機接收的數據在數碼管顯示
建議把這幾行代碼
n=SBUF;while(!RI);RI=0;
SBUF=n;while(!TI);TI=0;
P0=dis[n];
dislay();
改為
while(1){
while(!RI);
RI=0;
n=SBUF;
SBUF=n;
while(!TI);
TI=0;
P0=dis[n];
dislay();
}
另外,如果是實際製作電路,P0口和數碼管之間的七根連線中間要串入7個電阻才比較好,阻值在幾百歐,例如200~510歐之間。