㈠ 單片機的電路怎麼設計
單片機的電路要實現控制LED燈,需要以單片機最小系統的方式來實現,單片機最小系統由2部分構成:
第1部分:單片機復位電路。硬體組成:電容+電阻構成復位電路。
第2部分:單片機時鍾電路。電阻組成:12MHz晶振+11pF陶瓷電容,提供單片機的工作周期。
完成單片機最小系統後再完成LED燈的控制,LED燈與單片機的IO埠連接時,需要將LED燈串聯220Ω的電阻限流。然後單片機的一組IO口最多串聯2個LED燈,如果要多個LED燈,那最多可以在單片機的IO口並聯4組2個串接在一起的LED燈。單片機有32個IO口,如此算下來,你一個IO口做多可以控制8個LED燈,那麼32個IO口,單片機可以控制256個LED燈。
關於LED的一閃一閃的問題,這個採用單片機的內部定時器即可,51單片機內部有T0、T1供給2個定時器,可以根據需要自行設定。
生活不止有眼前的苟且,還有詩和遠方
頭像賬號也是騰訊賬號。有問題可以添加@
㈡ 單片機如何實現控制電路
建議你仔細看看它的一些IO埠結構圖,然後配合看這些埠的控制和數據寄存器,以及埠相關的匯編指令.注意哦,一定要看匯編的指令才有用,C的看不出來.
實際上,最終埠的輸入和輸出,都是由埠對應的數據寄存器來控制的.
輸入的時候,埠上所呈現的外部電路的狀態,就呈現在輸入寄存器里,用單片機的程序讀出來,就是表示該狀態的數據.比如說讀到了0xF0,就表示該埠的高4條IO處於高電平,低4條IO處於低電平.
同樣的,輸出的時候,就是單片機的程序將數據寫入到埠的輸出寄存器里,這樣就可以在對應的埠上呈現出對應的狀態,用於控制外部的電路.同樣的,比如說你輸出一個0x0F,就表示將該埠的高4條IO置為低電平,而低4條IO置為高電平.
當然,單片機的結構有很多種,有些單片機不分輸入和輸出寄存器,有些單片機也沒有控制寄存器,但也有很多單片機具有這些寄存器.
控制寄存器的作用,是配置埠的各種功能和模式.
比如說要將某埠的某幾條IO引腳設為帶弱上拉的輸入,那麼就應該打開弱上拉寄存器的對應幾bit,並且打開輸入輸出控制寄存器的對應幾bit,部分片子還需要關閉輸入狀態,這樣就將該埠的指定幾條IO引腳配置為了輸入狀態.而輸出的配置也類似,無非就是幾個寄存器的值不同.
配置好了之後,這些埠和這些IO就可以完成實際的輸入和輸出控制了.
如果是標準的MCS51單片機,例如AT89C51/52之類的,則埠要簡單得許多,沒有這么多的控制寄存器,也部分輸入和輸出寄存器.建議你找它們的用戶手冊仔細看看埠結構那一部分.
一般來說,這些資料要在"用戶手冊"中才有,普通的"數據手冊"裡面不一定有.
希望以上回答能讓你大致了解單片機是如何實現具體控制的了.
㈢ 基於51單片機控制交通燈的電路圖與C語言程序
思路:
紅燈停,綠燈行,黃燈閃爍提示行人紅綠燈即將切換。四個方向各有一個紅、黃、綠顯示和兩個數碼管。
東西道為人行道(20秒),南北道為車行道(60秒),黃燈延時最後三秒時,閃爍並切換。
三、硬體電路設計
此電中路設計採用AT89C51單片機,74LS47(數碼管驅動)74LS373(數碼管驅動輸出鎖存),8個數碼管顯示其延時值,四個紅、黃、綠指示燈。硬體設計關鍵在於,延時顯示時,要考慮到當個位數字顯示時,要確保十位數字顯示輸出的不變。因此,可加輸出鎖存器。在延時最後三秒時,要讓黃燈進行閃爍,並同時顯示數字(這一步在軟體設計上很關鍵)。
四、軟體程序(C語言)
以下是整個設計的軟體程序,直接可以編譯成*。Hex代碼。通過以上電路,下載到單片機,可直接運行。
//*****************************//
//程序名:十字路口交通燈控制
//編寫人:黃庭劍
//初寫時間:2009年1月2日
//程序功能:南北為車行道,延時60秒;東西方向為人行道,延時20秒,且在最後3秒黃燈顯示2秒鍾再實現切換.
//CPU說明:AT89C51型單片機;24MHZ晶體振盪器
//完成時間:2009年1月6日
//*****************************//
#include<stdio.h>
#include<reg51.h>
#include<intrins.h>
sfrp0=0x80;
sfrp1=0x90;
sfrp2=0xA0;
sfrp3=0xb0;//這部分內容其實在「#include<reg51.h>」里已經有,但裡面定義的必須區分大小寫,在這里,因為我程序採用的是小寫,reg51.h里對各個埠與寄存器的定義都是大寫,所以在編譯連接時,會報錯,所以,在本設計程序里,我只用到了埠,在這里也就只定義了四個,而沒有去改reg51.h裡面的內容。其實兩者是一樣的。
sbitsw=p0^0;
sbitOE=P0^6;
sbitLE=P0^7;//74LS373鎖存器控制端定義
chardisplay[]={0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99};//p1口的數碼管時間顯示調用,利用74L74BCD碼,8位驅動輸出;
//函數聲明begin
voiddelay1(intcount);
voiddelay_long(intnumber1,intnumber2);
voidpeople_car_drive();
//函數聲明end
//***********************//延時子程序
voiddelay1(intcount)
{inti;
for(i=count;i>0;i--)
{;}
}
voiddelay_long(intnumber1,intnumber2)
{
inta,b;
for(a=number1;a>0;a--)
{
for(b=number2;b>0;b--)
{_nop_();}
}
}
//**********************//延時子程序
voidpeople_car_drive()
{
intp_1=2,i,j=9,p_2=6;//****************//行人通行時,延時20秒
p2=0x09;//南北紅燈亮
p3=0x24;//東西綠燈亮
while(p_1-->0)
{LE=1;
OE=0;
if(p_1==0){OE=1;}//當十位數減到0時,只顯示個位數
p1=display[p_1];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_1==0&&j==3)break;//減到3時退出循環,讓其黃燈閃爍顯示
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
//*******************************************************************************//
p2=0x12;//南北黃燈閃爍三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
//*****************以下是車輛通行時延時60秒//
p2=0x24;//南北綠燈亮
p3=0x09;//東西紅燈亮
while(p_2-->0)
{LE=1;
OE=0;
if(p_2==0){OE=1;}//當十位數減到0時,只顯示個位數
p1=display[p_2];
delay1(1000);
LE=0;
j=9;
for(i=10;i>0;i--)
{
if(p_2==0&&j==3)break;//減到2時退出循環
p1=display[j--];
delay_long(16000,2);
if(sw==1)return;
}
}
p2=0x12;//南北黃燈閃爍三秒,以提醒行人注意
p3=0x12;
p1=display[3];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[2];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);
p2=0x12;
p3=0x12;
p1=display[1];
delay_long(8000,1);
p2=0x00;
p3=0x00;
delay_long(14000,1);//南北黃燈閃爍三秒完畢
}
voidmain()//主函數入口處
{
p0=0x01;
p1=0x00;
p2=0x00;
p3=0x00;//初始化各埠
{while(1)
{
if(sw==0)
{people_car_drive();}
else
{
p2=0x00;
p3=0x00;//關閉所有交通燈
}
}
}
}
詳情訪問:http://hi..com/hjiannew/
㈣ 單片機控制電機的正反轉 程序及電路圖
這個很簡單,我教你怎麼玩,下面是思路和方式
思路:有三個輸入,分別是一個按鈕、兩個霍爾感測器(也就是接近開關),我用p0.0到p0.2來代替;輸出2個或以上(這看你接什麼顯示器,如果是pc的話,就不用數字量輸出,直接串口就可以了)控制正反轉的繼電器管腳用p1.0、p1.1;
ps:顯示那塊我不知道你怎麼處理,但是需要與一個全局變數轉動次數k連接起來,另外兩個輸入接近開關選用npn感測器或用光電隔離,總之有效信號能把管腳電壓拉低就可以了,具體硬體要注意什麼,有需要就問我
現在我們來寫程序:
#include
//選用晶振11.0592mhz
unsigned
char
k=0;
//k表示正反轉次數
sbit
x0=p3^2;
//調節按鈕
sbit
x1=p1^1;
//上限位接近開關信號
sbit
x2=p1^2;
//下限位接近開關信號
sbit
y1=p0^0;
//電機上升(注意:我使用的是管腳輸出為0時候,電機運動,這樣可以避免啟動時候,單片機自復位對電機點動的影響)
sbit
y2=p0^1;
//電機下降
void
delay50ms(unsigned
int
i)
{
unsigned
int
j;
for
(i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
it0=1;
//下降沿觸發
ex0=1;
//開p3.2外部中斷
ea=1;
//總中斷開
while(1)
while(k)
{
y1=0;
//正轉
while(x1==1);
//等待正轉接近開關反應
y1=1;
//正轉停
delay50ms(1);
//停止時間50ms
y2=0;
//反轉
while(x2==1);
//等待反轉接近開關反應
y2=1;
//反轉停
k--;
//圈數減一
}
}
void
counter0(void)
interrupt
0
{
k++;
//外部中斷控制圈數加一
//這個位置可以加你顯示程序
}
程序已經通過測試,放上去就能用,很好玩喲,呵呵
㈤ 設計單片機控制6位數碼管動態顯示電路,並編程實現讓數碼管同時顯示
#include #include #define uchar unsigned char#define uint unsigned intuchar code DSY_CODE[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};void DelayMS(uint x){ uchar t;while(x--)for(t=120;t>0;t--);}void main(){ uchar i=0;P0=0x00;while(1){ P0=~DSY_CODE[i];i=(i+1)%16;/*顯示0-f*/DelayMS(400);}}
㈥ 怎麼設置單片機控制電路
單片機直接驅動不了繼電器,你要用一個功率放大器,用一個三極體也可以
如果你的繼電器線圈電流在100mA以下,則用三極體S9012即可,不過要加續流二極體,還可以用ULN2803,這個是8路的,可以同時驅動8個500mA以下的繼電器,且內部已經有各種保護電路,用起來很方便的。
還可以用MIC5801BN,這個繼電器驅動晶元功能很強大,除了有ULN2803的功能以外,還可以用單片機並行匯流排擴展的方式去進行操作,具有三態門和鎖存輸出功能,另外MIC5801BN的輸入和輸出可以不同電壓,也就是說輸入端可以直接接單片機的IO口進行高低5V電平控制,而輸出則可以接不同的電壓(如常用DC12V,DC24V繼電器等都可以)。在大規模的IO口擴展電路中用的很多,比方說繼電器切換板,有4路驅動和8路驅動兩種。
㈦ 繪制一單片機最小系統電路圖,編寫程序控制P1.7口輸出低電平,並點亮發光二極體。求大神解答哇😭
編程實現對 8 個 LED 的輸出控制 將實驗箱中的 8255 片選信號連接到 218H~21FH,將 8255 的 4 個寄存器地址(A、B、 C 埠及控制字寄存器埠)設置為 218H~21BH。將 8255 的埠 A 的 8 個引腳:PA0~PA7 與 8 個 LED 對應相連,然後打開實驗箱電源,最後編程對 8 個 LED 進行顯示控制。
程序清單:
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,21BH
MOV AL,80H
OUT DX,AL ;工作方式初始化
MOV DX,218H
MOV AL,0FEH ;設置輸出數據,即顯示模式
MOV CX,80 ;設置循環次數
LN: OUT DX,AL
ROL AL,1
CALL DELAY ;調用延遲程序
LOOP LN
MOV AH,4CH
INT 21H ;返回 dos
DELAY PROC ;延遲子程序
PUSH CX
MOV BX,2000
A0: MOV CX,3000
A1: LOOP A1
DEC BX
JNZ A0
POP CX
RET DELAY
ENDP
CODE ENDS
END START。吳鑒鷹單片機開發板。
從剛開始接觸單片機,到現在已經有4年的時間了,在這期間學習和使用了51單片機、飛思卡爾單片機,LPC2138,PIC16F887等系列的單片機,每接觸一款單片機,都會經歷熟悉其基本開發,然後將其用於項目中的過程,對於如何學習一款單片機,自己做了如下的總結。
大家都知道,51單片機是最容易入門的,不僅因為其編程簡單,更重要的是網上的資料非常豐富。所以一般學習單片機開發的都將51單片機作為入門開發的首選。我學習51單片機的時候是採用這樣的一個步驟進行學習的:
第一步(熟悉的過程):買了一款51單片機開發板,然後就開始了我的學習之旅,剛開始的時候沒有去看視頻教程,而是對著一本實驗教材進行學習,那本實驗教材的名字記不清楚了,但是其內容就是圍繞單片機的LED燈進行控制,將51單片機內部的各個功能部件全部都使用到了,這樣就能使我在很短的時間內,通過控制LED燈的亮、滅熟悉了51單片機的內部的各種資源,這時對51單片機也就沒有感到陌生了。所以,個人覺得,學習單片機,要從實驗入手,先熟悉單片機再說,開發語言開始使用的是C語言。
第二步(進階的過程):有了第一步的基礎之後,接下來的便是進階的過程,當時,我看的是郭天祥十天學會單片機的視頻教程,因為這個教程從基礎到復雜的編程慢慢深入,講的比較的全面,而且也生動,所以那一階段,也是我學習單片機進步最快的階段,每次聽課的時候,按照上面的實驗,以及課堂上面調試程序時出現的一些問題,自己認真的在電腦上進行調試,並分析產生故障的原因,讓我有了一定的開發基礎。在看完了視頻教程之後,後面又對基礎的知識進行了下補習,主要是看單片機原理性的教材,因為有些細節性的東西還是要從教材上面獲得。
㈧ 就機電大神指導單片機 如果用一個感測器當一個控制電路的開關,怎麼給單片機編程,這個電路如何設計
其實這個電路應該很簡單,無非就是一個輸入 控制一個輸出的問題,中間由單片機進行判斷和控制輸出動作。
首先前面的感測器信號,可能是微弱的變化信號,這個不管了,如廳燃果信號微弱可以通過放大電路整形後最終是一個開關信號,即你說的肌肉收縮到一定程度這個開信號,這個信號直接需要控制電壓大小,滿足單片機大含識別即可,如:肌肉伸開時電壓低於1V,收縮時高於3V但小於5V(一般情況,還要根據單片機類型,比如工作電壓時3.3V的要另外討論了。) 單片機識別到這個變化信扮仿虛號(0V-->3V,或者3V-->0v )輸出一路信號,這個信號算個執行或者說是反饋信號吧。比如肌肉收縮單片機控制燈亮,肌肉伸開燈滅。
如 51單片機 匯編指令
org 00h
sjmp 30H
ORG 30H
mov r1=#200
wait: setB p1.0 『 假如這個信號接在P1.0上
jnb p1.0,wait '一直等待信號變高
djnz r1,wait '防抖動,去干擾 延時檢測
setb p3.0 '讓單片機的這個埠置高 控制別的東西,或者起到指示反饋的作用
。。。。。後面要根據你要實現的功能來編程。
㈨ 單片機I/O口控制電路,要求c語言程序
可以使用Proteus先進行模擬,然後再到實物上驗證。
㈩ 單片機:設計一個8燈閃爍控制電路,系統晶振為12HMz,編程實現8燈輪流閃爍,每盞燈點亮時間為2秒 求大神!
LED負極接單片機IO口,本程序接P1,低電平點亮
#include<reg52.h> //52系列單片機頭文件
#include<intrins.h>
#defineuintunsignedint //宏定義
#defineucharunsignedchar
voiddelayms(uint); //聲明子函數
ucharaa;
voidmain() //主函數
{
aa=0xfe; //賦初值11111110
while(1) //大循環
{
P1=aa;
delayms(2000); //延時2秒
aa=_crol_(aa,1); //將aa循環左移1位後再賦給aa
}
}
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--) //i=xms即延時約xms毫秒
for(j=110;j>0;j--);
}