⑴ 利用STC89C51單片機完成整數加減乘除四則運算,運算結果用四個數碼管顯示。
4094?我一般用595,帶鎖存的。不過51 32個IO應該夠用的呀。
8個按鍵IO,
4個數碼管選通 4個IO
數轎絕輪碼管8段 8個閉信IO
顯示動態掃描宏譽,一共才20個IO么。
⑵ 用單片機控制4094點亮8個LED燈,C語言程序怎麼做,怎麼實現流水燈在線等,急!!!
#include<reg51.h>
#include<intrins.h>
sbitDAT=P1^2;
sbitCLK=P1^1;
sbitSTB=P1^0;
voidDelay500ms();
voidOUT_4094(unsignedcharn);
voidmain()
{
unsignedchari;
for(i=0;;i++)
{
OUT_4094(i);
Delay500ms();
}
}
voidDelay500ms() //@12.000MHz
{
unsignedchari,j,k;
_nop_();
i=4;
j=205;
k=187;
do
{
do
{
while(--k);
}while(--j);
}while(--i);
}
voidOUT_4094(unsignedcharn)
{
unsignedchari;
DAT=0;
CLK=0;
STB=0;
for(i=0;i<8;++i)
{
CLK=0;
DAT=(n>>(8-i-1))&0x01;
_nop_();
CLK=1;
CLK=0;
}
STB=1;
_nop_();
DAT=0;
CLK=0;
STB=0;
}
⑶ MCS-51編程(用C語言)急!
!a1
!a1ok
!b1
!b1ok
!a2
!a2ok
……
總共有多少種?
===============
/*
操作過程如下:
PC機通過DB9介面與單片機中埋相連,
P1.0燈亮表示單片機已正常工作,然後在PC機用串口調試助手工具,向單片機發送數據,
單片機接收後進行判斷是否正確,然後點亮指定的LED燈,並且向助手回送收到的數據,說明已經正確接收.
P1.0亮表示單片機已正常工作,
用串蠢備口調試助手工具:
發送"!a1",P1.1LED燈亮,返回"!a1ok";
發送"!b1",p1.1LED燈滅,返回"!b1ok";
發送"!a2",p1.2LED燈亮,返回"!a2ok";
發送"!b2",p1.2LED燈滅,返回"!b2ok"。
問題補充:到P1.7,也就是!a7,!a7ok,!b7,!b7ok
共7種
*/賣檔螞
//======================================================
#include
<REG52.H>
unsigned
char
S_BUF[16],
Si;
//串口數據緩存與指針
bit
sended,
disped;
unsigned
char
code
DISP[]
=
;
//------------------------------------------------------
void
main(void)
{
//------------------串口初始化.
SCON
=
0x50;
//
方式1,
8-n-1,
允許接收.
TMOD
=
0x20;
//
用T1控制波特率.
TL1
=
0xFD;
//
波特率設置.
TH1
=
0xFD;
//
[email protected]
TR1
=
1;
//
啟動T1
EA
=
1;
//
開放中斷.
ES
=
1;
//
允許串口中斷.
//--------------------------------
P1
=
0xFE;
//
只有P1.0燈亮.
disped
=
1;
Si
=
0;
while
(1)
{
//
主循環.
if
((Si
==
0)
&&
(disped
==
0))
{
disped
=
1;
if
(S_BUF[1]
==
'a')
{
P1
=
DISP[S_BUF[2]
-
'0'];
//指定位亮燈.
}
if
(S_BUF[1]
==
'b')
{
P1
=
0xFE;
//
只有P1.0亮燈.
}
SBUF
=
'!';
//
向上位機回送.
while
(!sended);
//
等待.
sended
=
0;
SBUF
=
S_BUF[1];
while
(!sended);
sended
=
0;
SBUF
=
S_BUF[2];
while
(!sended);
sended
=
0;
SBUF
=
'o';
while
(!sended);
sended
=
0;
SBUF
=
'k';
while
(!sended);
sended
=
0;
}
}
}
//------------------------------------------------------
void
UART_SER(void)interrupt
4
//
串列中斷函數.
{
if
(RI)
{
//
接收處理.
RI
=
0;
if
(SBUF
==
'!')
Si
=
0;
//
根據串列命令確定首位置.
S_BUF[Si]
=
SBUF;
//
存入緩存.
Si++;
if
(Si
==
16)
Si
=
0;
}
if
(TI)
{
//
發送處理.
TI
=
0;
sended
=
1;
}
}
//======================================================
⑷ 誰能幫我寫下用8051單片機的串列口外接串入並出的晶元CD4094的程序的注釋
#include<reg51.h>
sbit p1_0=p1^o;//管腳定義,可能是光耦三極體,錯把字母o當成數字0
void main()
{
unsigned char i,j;
SCON=0x00;//串口工作方式0,允許接收
j=0x01;//要從串口發送的數據
for(; ;)//死循環,相當於while(1)
{
p1_0=0;
SBUF=j;//j送到SBUF,從串口發送
while(!TI) { ;}//等待發送完成
p1_0=0;TI=0;//TI軟體清0
for ( i=0;i<=254;i++) { ;}//延時
j=j*2;//左移一位,即led燈往左輪流亮
if (j= =0x00) j=0x01;//一輪左移完成,從頭再次左移,循環左移
}
}
⑸ 8051單片機問題 如果用兩個cd4094串列擴展並行IO介面控制16個發光二極體依次亮滅,那麼
具體亮幾個燈,你可以通過編程去控制的,它2片可以控制64路LED的,看你的程序怎麼寫了。
⑹ 我想做個16*16的LED點陣,用51單片機控制,請問是否要外加電壓電源已達到亮度,是不是還要加上拉電阻。
16*16點陣用51單片機控制時可以選啟納仔595或者4094,如果是單個字還可以用三極體作為功率驅動,若是用595的話就不用外加功率驅動電路了,只要在掃描端用三極體隔離154就行(可加限流電阻在三極體基極),同時具有放大作用,若是在數據端用的是三極體作為驅動的話要加上拉電阻才能提茄纖高亮度,一般是4.7K或者5.1K的上拉電阻,所加上拉電阻若在4K以上則可以悄汪不用基極限流電阻(防止損壞單片機),這樣亮度會很高.至於鬼影,我同意一樓,或者在程序中把掃描輸出放在數據更新之前,這樣也可以消除,用595最容易消除鬼影,對595清零一次就OK,或許關一下595的輸出使能就行,希望對你有幫助
⑺ 您好,這幾道題目無從下手,由於有急用還望您能不吝賜教幫忙做下,非常感謝。
1、延時函數+位移函數。
2、延時函數+判斷語句+按位取反岩枯
3、粗肢洞矩陣掃描+消抖+延時函數。
4、memcpy函數
5、判飢隱斷語句+延時函數
6、串口通信
7、自定義協議
8、中斷+定時器操作。
9、中斷+判斷+取反
10、串口通信。
鑒定完畢。
⑻ 單片機多個cd4094連用的問題
QS端就是最後一位Q7,罩灶在時鍾上升沿改變,qs非在時鍾下降沿改變,也是最後一位Q7,它們都是旁悶帶用於運蘆級聯的,具體的參考datasheet
⑼ 用51單片機驅動CD4094BE的C語言程序
參此納大考森豎:茄讓
http://hi..com/do_sermon/item/9b69dd661196762068105b27
⑽ 51單片機怎麼用CD4094晶元和ULN2803來控制繼電器
CD4094 是8 位移位存貯匯流排寄存是不能驅動繼電器的。ULN2803可以,最大負載500mA,就相當一個功率輸出的8非門。
接線沒什麼特別的。單片機IO接到ULN2803的輸入。
ULN2803的輸出直接接繼電器。具體引腳功率查查這個塊子的datasheet就行了。