⑴ 什麼叫單片機採用單片機的目的與意義單片機課設的目的與意義
單片機是一種集成在電路晶元,是採用超大規模集成電路技術把具有數據處理能力的中央處理器CPU隨機存儲器RAM、只讀存儲器ROM、多種I/O口和中斷系統、定時器/計時器等功能(可能還包括顯示驅動電路、脈寬調制電路、模擬多路轉換器、A/D轉換器等電路)集成到一塊矽片上構成的一個小而完善的計算機系統。
採用單片機可以完成很多功能,現在很多電子產品都要用到單片機。
因為單片機這么課是一門實踐性很強的課程,單純學習課本不能掌握這門知識,經過課程設計,你的硬體設計能力和編程能力都能得到提升。
⑵ 單片機學什麼核心課程是那些
專業對數學和英語要求不低,學起來比較郁悶要拿高薪,英語是必需的;
吃技術這碗飯,動手能力和數學是基本功當然,也不要求你成為數學家,只要能看懂公式就可以了,比如微積分和概率統計公式,至少知道是在說些什麼而線性代數要求就高一些,因為任何書在講一個演算法時,最後都會把演算法化為矩陣計算(這樣就能編程實現了,而現代的電子工程相當一部分工作都是編程)
對於動手能力,低年級最好能焊接裝配一些小電路,加強對模擬、數字、高頻電路(這三門可是電子線路的核心)的感性認識;工具嗎就找最便宜的吧!電烙鐵、萬用表是必需的,如果有錢可以買個二手示波器電路圖嗎,無線電雜志上經常刊登,無線電愛好者的入門書對實際操作很有好處
另一塊是單片機、CPLD/FPGA、DSP其中單片機是必會的,51系列單片機就可以,因為這個用得最多;找塊51開發板(比較便宜)自己動手編編程序就可以了ARM單片機、FPGA、DSP開發板都比較貴,不過這是趨勢,有條件就玩玩吧
編程方面:c是要會的,實際上單片機/DSP應用系統就常用c語言來開發數據結構和操作系統是計算機軟體專業最核心的課程(北大老師認為,學過這兩門課就認為是學過計算機了)大型單片機(比如ARM系列)經常使用嵌入式操作系統(比如uCLinux),因此除了windows編程外,有機會可以玩玩Linux編程
⑶ 學習單片機要學習哪些課程
單片機是軟硬體結合的,要想學好單片機就要分別把軟體和硬體都學好。硬體的話,應該要把數電、模電學好;軟體的話,應該把編程語言學好,比如C語言、匯編語言……
⑷ 學好單片機的前提是什麼
我覺得學習單片機你該注意以下幾個方面:1.學習的目標。其實,我開始也是不知道如何下手學習。後來,我參加了學校的項目申報,電子設計大賽之後。就有了學習的目標和動力了。2.學習的方法。這個你可以加入幾個BBS或加幾個QQ群。與有技術的人在一起學習,他們會教你很多東西的。3.學習的資源。教師是最好的資源,其次一些軟體(proteus,keilc,icc),一些開發板等都是你的號幫手。此外,我覺得一個非常重要的因素就是你自己。你有沒有信心堅持做完一個項目。並總結得到屬於你自己的知識。
要學好單片機應該學好哪幾門課程?
重要的有微機原理,C語言程序設計,模電,數電。重要的是你要去做項目。
OK!祝你成功。
⑸ 學習單片機課程的核心是什麼
單片機的主要學習內容是:
1、存儲器結構:包括程序存儲器、RAM(工作寄存器、位寄存器、用戶寄存器、特殊功能寄存器、擴展RAM)
2、中斷資源:外部中斷、定時器中斷、串口中斷等
3、IO口:很多IO都是復用的,所以需要弄清楚具體意義及控制方法
4、各個功能模塊:如RS232、SPI、定時計數器、I2C、PWM、WATCHDOG等等,這些模塊有的單片機只有其中之一,有的多些。
5、最好學一下匯編,這樣有利於你更好的理解這些東西。
⑹ 談談對單片機課程的理解認識意見和建議
單片機又稱單片微控制器,它不是完成某一個邏輯功能的晶元,而是把一個計算機系統集成到一個晶元上。
概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用單片機是了解計算機原理與結構的最佳選擇。
單片機內部也用和電腦功能類似的模塊,比如CPU,內存,並行匯流排,還有和硬碟作用相同的存儲器件,不同的是它的這些部件性能都相對我們的家用電腦弱很多,不過價錢也是低的,一般不超過10元即可......用它來做一些控制電器一類不是很復雜的工作足矣了。我們現在用的全自動滾筒洗衣機、排煙罩、VCD等等的家電裡面都可以看到它的身影!......它主要是作為控制部分的核心部件。 它是一種在線式實時控制計算機,在線式就是現場控制,需要的是有較強的抗干擾能力,較低的成本,這也是和離線式計算機的(比如家用PC)的主要區別。
單片機是靠程序的,並且可以修改。通過不同的程序實現不同的功能,尤其是特殊的獨特的一些功能,這是別的器件需要費很大力氣才能做到的,有些則是花大力氣也很難做到的。
一個不是很復雜的功能要是用美國50年代開發的74系列,或者60年代的CD4000系列這些純硬體來搞定的話,電路一定是一塊大PCB板!但是如果要是用美國70年代成功投放市場的系列單片機,結果就會有天壤之別!只因為單片機的通過你編寫的程序可以實現高智能,高效率,以及高可靠性!
由於單片機對成本是敏感的,所以目前占統治地位的軟體還是最低級匯編語言,它是除了二進制機器碼以上最低級的語言了,既然這么低級為什麼還要用呢?很多高級的語言已經達到了可視化編程的水平為什麼不用呢?原因很簡單,就是單片機沒有家用計算機那樣的CPU,也沒有像硬碟那樣的海量存儲設備。
一個可視化高級語言編寫的小程序裡面即使只有一個按鈕,也會達到幾十K的尺寸!對於家用PC的硬碟來講沒什麼,可是對於單片機來講是不能接受的。 單片機在硬體資源方面的利用率必須很高才行,所以匯編雖然原始卻還是在大量使用。
一樣的道理,如果把巨型計算機上的操作系統和應用軟體拿到家用PC上來運行,家用PC的也是承受不了的。 可以說,二十世紀跨越了三個「電」的時代,即電氣時代、電子時代和現已進入的電腦時代。
不過,這種電腦,通常是指個人計算機,簡稱PC機。它由主機、鍵盤、顯示器等組成。還有一類計算機,大多數人卻不怎麼熟悉。這種計算機就是把智能賦予各種機械的單片機(亦稱微控制器)。顧名思義,這種計算機的最小系統只用了一片集成電路,即可進行簡單運算和控制。因為它體積小,通常都藏在被控機械的「肚子」里。
它在整個裝置中,起著有如人類頭腦的作用,它出了毛病,整個裝置就癱瘓了。現在,這種單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。
各種產品一旦用上了單片機,就能起到使產品升級換代的功效,常在產品名稱前冠以形容詞——「智能型」,如智能型洗衣機等。
現在有些工廠的技術人員或其它業余電子開發者搞出來的某些產品,不是電路太復雜,就是功能太簡單且極易被仿製。究其原因,可能就卡在產品未使用單片機或其它可編程邏輯器件上。
⑺ 單片機交通燈課程設計
/*****************************************************
十字路口交通燈控制C程序
******************************************************/
#defineucharunsignedchar
#defineuintunsignedint
#include<reg52.h>
/*****定義控制位**********************/
sbit Time_Show_LED2=P2^5;//Time_Show_LED2控制位
sbit Time_Show_LED1=P2^4;//Time_Show_LED1控制位
sbitEW_LED2=P2^3;//EW_LED2控制位
sbitEW_LED1=P2^2;//EW_LED1控制位
sbitSN_LED2=P2^1;//SN_LED2控制位
sbitSN_LED1=P2^0;//SN_LED1控制位
sbit SN_Yellow=P1^6;//SN黃燈
sbit EW_Yellow=P1^2;//EW黃燈
sbit EW_Red=P1^3;//EW紅燈
sbit SN_Red=P1^7;//SN紅燈
sbit EW_ManGreen=P3^0;//EW人行道綠燈
sbit SN_ManGreen=P3^1;//SN人行道綠燈
sbit Special_LED=P2^6;//交通正常指示燈
sbit Busy_LED=P2^7;//交通繁忙指示燈
sbit Nomor_Button=P3^5;//交通正常按鍵
sbit Busy_Btton=P3^6;//交通繁忙按鍵
sbit Special_Btton=P3^7;//交通特殊按鍵
sbit Add_Button=P3^3;//時間加
sbit Reces_Button=P3^4;//時間減
bit Flag_SN_Yellow;//SN黃燈標志位
bit Flag_EW_Yellow;//EW黃燈標志位
charTime_EW;//東西方向倒計時單元
charTime_SN;//南北方向倒計時單元
ucharEW=60,SN=40,EWL=19,SNL=19;//程序初始化賦值,正常模式
ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用於存放修改值的變數
ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段選碼
ucharcodeS[8]={0X28,0X48,0X18,0X48,0X82,0X84,0X81,0X84};//交通信號燈控制代碼
/**********************延時子程序************************/
voidDelay(uchara)
{
uchari;
i=a;
while(i--){;}
}
/*****************顯示子函數**************************/
voidDisplay(void)
{
charh,l;
h=Time_EW/10;
l=Time_EW%10;
P0=table[l];
EW_LED2=1;
Delay(2);
EW_LED2=0;
P0=table[h];
EW_LED1=1;
Delay(2);
EW_LED1=0;
h=Time_SN/10;
l=Time_SN%10;
P0=table[l];
SN_LED2=1;
Delay(2);
SN_LED2=0;
P0=table[h];
SN_LED1=1;
Delay(2);
SN_LED1=0;
h=EW1/10;
l=EW1%10;
P0=table[l];
Time_Show_LED1=1;
Delay(2);
Time_Show_LED1=0;
P0=table[h];
Time_Show_LED2=1;
Delay(2);
Time_Show_LED2=0;
}
/**********************外部0中斷服務程序************************/
voidEXINT0(void)interrupt0using1
{
EX0=0;//關中斷
if(Add_Button==0)//時間加
{
EW1+=5;
SN1+=5;
if(EW1>=100)
{
EW1=99;
SN1=79;
}
}
if(Reces_Button==0)//時間減
{
EW1-=5;
SN1-=5;
if(EW1<=40)
{
EW1=40;
SN1=20;
}
}
if(Nomor_Button==0)//測試按鍵是否按下,按下為正常狀態
{
EW1=60;
SN1=40;
EWL1=19;
SNL1=19;
Busy_LED=0;//關繁忙信號燈
Special_LED=0;//關特殊信號燈
}
if(Busy_Btton==0)//測試按鍵是否按下,按下為繁忙狀態
{
EW1=45;
SN1=30;
EWL1=14;
SNL1=14;
Special_LED=0;//關特殊信號燈
Busy_LED=1;//開繁忙信號燈
}
if(Special_Btton==0)//測試按鍵是否按下,按下為特殊狀態
{
EW1=75;
SN1=55;
EWL1=19;
SNL1=19;
Busy_LED=0;//關繁忙信號燈
Special_LED=1;//開特殊信號燈
}
EX0=1;//開中斷
}
/**********************T0中斷服務程序*******************/
voidtimer0(void)interrupt1using1
{
staticucharcount;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==10)
{
if(Flag_SN_Yellow==1)//測試南北黃燈標志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1) //測試東西黃燈標志位
{EW_Yellow=~EW_Yellow;}
}
if(count==20)
{
Time_EW--;
Time_SN--;
if(Flag_SN_Yellow==1)//測試南北黃燈標志位
{SN_Yellow=~SN_Yellow;}
if(Flag_EW_Yellow==1)//測試東西黃燈標志位
{EW_Yellow=~EW_Yellow;}
count=0;
}
}
/*********************主程序開始**********************/
voidmain(void)
{
Busy_LED=0;
Special_LED=0;
IT0=1;//INT0負跳變觸發
TMOD=0x01;//定時器工作於方式1
TH0=(65536-50000)/256;//定時器賦初值
TL0=(65536-50000)%256;
EA=1;//CPU開中斷總允許
ET0=1;//開定時中斷
EX0=1;//開外部INTO中斷
TR0=1;//啟動定時
while(1)
{/*******S0狀態**********/
EW_ManGreen=0;//EW人行道禁止
SN_ManGreen=1;//SN人行道通行
Flag_EW_Yellow=0; //EW關黃燈顯示信號
Time_EW=EW;
Time_SN=SN;
while(Time_SN>=5)
{P1=S[0];//SN通行,EW紅燈
Display();}
/*******S1狀態**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN開黃燈信號位
EW_Red=1; //SN黃燈亮,等待左拐信號,EW紅燈
Display();
}
/*******S2狀態**********/
Flag_SN_Yellow=0;//SN關黃燈顯示信號
Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];//SN左拐綠燈亮,EW紅燈
Display();}
/*******S3狀態**********/
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1;//SN開黃燈信號位
EW_Red=1; //SN黃燈亮,等待停止信號,EW紅燈
Display();}
/***********賦值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
/*******S4狀態**********/
EW_ManGreen=~EW_ManGreen;//EW人行道通行
SN_ManGreen=~SN_ManGreen;//SN人行道禁止
Flag_SN_Yellow=0; //SN關黃燈顯示信號
Time_EW=SN;
Time_SN=EW;
while(Time_EW>=5)
{P1=S[4];//EW通行,SN紅燈
Display();}
/*******S5狀態**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EW開黃燈信號位
SN_Red=1;//EW黃燈亮,等待左拐信號,SN紅燈
Display();}
/*******S6狀態**********/
Flag_EW_Yellow=0; //EW關黃燈顯示信號
Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];//EW左拐綠燈亮,SN紅燈
Display();}
/*******S7狀態**********/
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EN開黃燈信號位
SN_Red=1;//EW黃燈亮,等待停止信號,SN紅燈
Display();}
/***********賦值**********/
EW=EW1;
SN=SN1;
EWL=EWL1;
SNL=SNL1;
}
}
⑻ 單片機學習主要涉及哪些課程
高中物理的電學定律(歐姆定律,串並聯等之類的)
電工(電烙鐵的使用和各種元器件的識別使用)
模數電(別害怕,只要會做每一章的最簡單的一兩道題就足夠了)
計算機原理(我也不知道干神馬用的)
電子小製作一本(需要動手製作幾個)
C語言編程(能達到會使用函數和指針就可以了)
數學(主要是四則運算……)
大量的晶元和單片機的DATASHEET(保守估計也有幾千萬冊,不過只要能會讀一兩冊就可以了)
通信(各種通信)
以上的知識都是建立在單片機的開發應用上。
如果你只是想要這一科及格,那麼以上什麼都不涉及。
⑼ 單片機課程設計
附2:程序
ORG 0000H
LJMP START
ORG 0003H
LJMP JIA
ORG 0013H
LJMP JIAN
ORG 0030H
FLAG1 BIT F0 ;DS18B20存在標志位
DQ BIT P2.2
TEMPER_L EQU 29H
TEMPER_H EQU 28H
A_BIT EQU 35H
B_BIT EQU 36H
START:
MOV IE,#85H
MOV 30H,#30
SHEZHI:MOV R1,#30H
ACALL DISPLAY
MOV P2,#0FFH
MOV A,P2
MOV C,ACC.0
JNC SHEZHI
LJMP MAIN
DISPLAY:MOV A,@R1;將29H中的十六進制數轉換成10進制
MOV B,#10 ;10進制/10=10進制
DIV AB
MOV B_BIT,A ;十位在A
MOV A_BIT,B ;個位在B
MOV DPTR,#TAB ;指定查表啟始地址
SETB P3.7 ;選中第一個數碼管
MOV A,A_BIT ;取個位數
MOVC A,@A+DPTR ;查個位數的7段代碼
MOV P1,A ;送出個位的7段代碼
LCALL DELAY ; 調用延時
CLR P3.7
SETB P3.6 ;選中第二個數碼管
MOV A,B_BIT ;取十位數
MOVC A,@A+DPTR ;查十位數的7段代碼
MOV P1,A ;送出十位的7段代碼
LCALL DELAY
CLR P3.6
RET
JIA:
MOV P2,#0FFH
MOV A,P2
MOV C,ACC.0
JC OUT
INC @R1
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
OUT:
RETI
JIAN:
MOV P2,#0FFH
MOV A,P2
MOV C,ACC.0
JC OUT1
DEC @R1
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
OUT1:
RETI
DELAY: ;延時子程序
MOV R5,#120
NOP
NOP
D1: MOV R6,#100
D2: DJNZ R6,D2
DJNZ R5,D1
RET
;**************主程序開始************
MAIN:
LCALL INIT_18B20
;LCALL RE_CONFIG
LCALL GET_TEMPER
LJMP CHANGE
;**********DS18B20復位程序*****************
INIT_18B20: SETB DQ
NOP
CLR DQ
MOV R0,#0FBH
TSR1: DJNZ R0,TSR1 ;延時
SETB DQ
MOV R0,#25H
TSR2: JNB DQ ,TSR3
DJNZ R0,TSR2
TSR3: SETB FLAG1 ;置標志位,表明DS18B20存在
CLR P0.5 ;二極體指示
AJMP TSR5
TSR4: CLR FLAG1
LJMP TSR7
TSR5: MOV R0,#06BH
TSR6: DJNZ R0,TSR6
TSR7:SETB DQ ;表明不存在
RET
;*****************讀轉換後的溫度值****************
GET_TEMPER:
SETB DQ
LCALL INIT_18B20
JB FLAG1,TSS2
RET ;若不存在則返回
TSS2: MOV A,#0CCH ;跳過ROM
LCALL WRITE_18B20
MOV A,#44H ;發出溫度轉換命令
LCALL WRITE_18B20
;LCALL DISPLAY ;延時
LCALL INIT_18B20
MOV A,#0CCH ;跳過ROM
LCALL WRITE_18B20
MOV A,#0BEH ;發出讀溫度換命令
LCALL WRITE_18B20
LCALL READ2_18B20 ;讀兩個位元組的溫度
RET
;***************寫DS18B20程序************
WRITE_18B20:
MOV R2,#8
CLR C
WR1:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;***********讀18B20程序,讀出兩個位元組的溫度*********
READ2_18B20:
MOV R4,#2 ;低位存在29 H,高位存在28H
MOV R1,#29H
RE00: MOV R2,#8
RE01: CLR C
SETB C
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;************讀出的溫度進行數據轉換**************
CHANGE: MOV A,29H
MOV C,28H.0 ;將28H中的最低位移入C
RRC A
MOV C,28H.1
RRC A
MOV C,28H.2
RRC A
MOV C,28H.3
RRC A
MOV 29H,A
MOV R1,#29H
LCALL DISPLAY ;調用數碼管顯示子程序
CLR C
MOV A,30H
SUBB A,29H
JC BJ
LJMP MAIN
BJ:CPL P0.0
CPL P0.1
LJMP MAIN
;***********************************
D1MS: MOV R7,#80 ;1MS延時(按12MHZ算)
DJNZ R7,$
RET
;*************************
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END