1. 用PLC編寫一個關於交通信號燈的電路圖!
你買一本單片機編程的書,那上面說的比較詳細,
2. 怎麼用單片機C語言編寫驅動蜂鳴器發出7個音的電路圖和程序代碼(最好有解釋)。
將51單片機的P1.2口連接到蜂鳴器的一個管腳上,另外一個管腳接地。若聲音小,則添加一個三級管放大電路或直接串一個UL2003
/*------------------------------------------------*/
#include<reg52.h> //包含頭文件,一般情況不需要改動?
//頭文件包含特殊功能寄存器的定義
/*------------------------------------------------
硬體埠定義
------------------------------------------------*/
sbit SPK=P1^2; //定義音樂輸出埠
unsigned char Timer0_H,Timer0_L,Time;
//世上只有媽媽好數據表
code unsigned char MUSIC[]={ 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1,
6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1,
6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2,
5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3, 3,2,1,
2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0
};
// 音階頻率表 定時器高八位
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, //1,2,3,4,5,6,7,8,i
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
} ;
// 音階頻率表 定時器低八位
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, //1,2,3,4,5,6,7,8,i
0xEE,0x44, 0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
/*------------------------------------------------
uS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字元變數,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數,含有輸入參數 unsigned char t,無返回值
unsigned char 是定義無符號字元變數,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*------------------------------------------------
節拍延時函數
各調1/4節拍時間:
調4/4 125ms
調2/4 250ms
調3/4 187ms
------------------------------------------------*/
void delay(unsigned char t)
{
unsigned char i;
for(i=0;i<t;i++)
DelayMs(250);
TR0=0;
}
/*------------------------------------------------
定時器0中斷
------------------------------------------------*/
void TIM0_ISR() interrupt 1
{
TR0=0;
SPK=!SPK;
TH0=Timer0_H;
TL0=Timer0_L;
TR0=1;
}
/*------------------------------------------------
歌曲處理函數
------------------------------------------------*/
void Song()
{
TH0=Timer0_H;//賦值定時器時間,決定頻率
TL0=Timer0_L;
TR0=1; //打開定時器
delay(Time); //延時所需要的節拍
}
/*------------------------------------------------
主函數
------------------------------------------------*/
void main(void)
{
unsigned char k,i;
TMOD|=0x01; //置定時器0工作方式1
EA=1; //打開全局中斷
ET0=1; //打開定時0中斷
while(1)
{
i=0;
while(i<100)
{ //音樂數組長度 ,唱完從頭再來
k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振盪頻率所需數據
Timer0_H=FREQH[k];
Timer0_L=FREQL[k];
Time=MUSIC[i+2]; //節拍時長
i=i+3;
Song();
}
}
}
3. 跪求此電路圖的編寫程序
你這是要實現什麼功能?我可以幫你設計一下看看
4. 畫出電路圖,有可以根據電路圖能寫出程序的嗎
你可以這樣理解
在編寫PLC程序的時候如果你手裡只有對應電路圖,那麼你首先要做的是按照你現有的電路圖來分析它的工作原理、設備的工作流程和控制方式等等,在實際編寫的時候對於初學者來說有時候可能喜歡參考電路圖上邊的走線來編寫程序,本人不建議這樣做,當你真的弄明白設備的工作原理及工作流程及控制要求的話,在編寫PLC程序時候完全可以按照自己的思路來,怎麼方便怎麼簡單就怎麼寫,只要能達到控制目的就行
5. 大家都用什麼軟體繪制電氣原理圖
現在的電抄氣原理圖軟襲件五花八門,各有各的長處。普遍用的有AutoCAD Electrical、EPLAN、eleworks、SEE Electrical。電路圖設計的軟體的使用則在國內用protel 99se和protel 2004的最多。
AutoCAD 是最原始的,應用也是最多的,畫圖也很麻煩,現在有很多專業軟體,國外的SEE Electrical,pcs等,國內的有天正,中望,浩辰,利馳的SuperWORKS等。
elecworks,電氣元件很全,畫原理圖,布線圖,機櫃的設計,還可以和solidworks一起完成機櫃的三維設計,包括元器件的插入,智能布線等。
也有工程師朋友推薦:現在電氣電路圖最專業的軟體是德國的Eplan P8,功能非常強大,可以包含器件選型,甚至轉化3D電氣製造圖紙。
如果是設計電氣原理圖,需要反復修改,建議使用Visio2003,其所帶的電氣圖庫完全滿足需要,也可做自己的圖庫,好用易上手;如果是畫電子版電氣圖,建議使用AutoCAD Electrical 2006或2008,非常專業的CAD作圖工具,一旦掌握,可大幅提高工作效率。
6. 能幫我設計一個電路圖嗎 讓紅黃綠三個燈循環閃爍,模擬交通信號燈,紅的20秒,黃燈4秒,綠燈20秒。
圖
7. 誰會編寫這個電路圖的的梯形圖!自鎖電路
如圖所示:X2為啟動,X1為停止,X0為過載保護。Y0控制KM線圈。
8. 怎麼樣設計電路圖呢
方法如下:來
首先一定要先把源分立元器件學好,學透。比如:電阻、電容、二極體、穩壓管、三極體、比較器、運放、MOSFET等。分立元器件在模擬電路中是最基本也是最小的組成部分。這好比人的組織細胞,要想研究人就要先研究組織細胞。
其次,需要懂得利用這些分立器件的工作特性和條件來組成一個小的單元電路,學會讓這個單元電路正常工作。這就好比各個組織細胞組成了人體的各個器官,模擬電路的各個單元電路正常高效工作就好比人體器官的正常健康;
再次,學會將各個單元電路有機地協調運轉,聯調可靠運行,這就好比各個器官的協調運動組成了一個健康充滿活力的有生命的人。
最後,學會設計和調試電路,藉助示波器等測量儀器讓電路的參數調整合理並最優化。這就好比利用儀器對人體進行體檢,並根據體檢報告進行調理,使人精神飽滿,健康充滿活力。
9. 寫出一個你感興趣的電路:1,寫出電路的用途2,畫出電路圖或原理方框圖3,簡述電路的基本工作原理或調試方
電子時鍾
一摘要
單片計算機即單片微型計算機。(Single-ChipMicrocomputer),是集CPU,RAM,ROM,
定時,計數和多種介面於一體的微控制器。他體積小,成本低,功能強,廣泛應用於智能產
品和工業自動化上。而51單片機是各單片機中最為典型和最有代表性的一種。這次畢業設
計通過對它的學習,應用,從而達到學習、設計、開發軟、硬的能力。
二說明
系統由AT89C51、LED數碼管、按鍵、發光二極體等部分構成,能實現時間的調整、定
時時間的設定,輸出等功能。系統的功能選擇由SB0、SB1、SB2、SB3、SB4完成。其中SB0
為時間校對,定時器調整功能鍵,按SB0進入調整狀態。SB1為功能切換鍵。第一輪按動
SB1依次進入一路、二路、三路定時時間設置提示程序,按SB3進入各路定時調整狀態。定
時時間到,二極體發亮。到了關斷時間後滅掉。如果不進入繼續按SB1鍵,依次進入時間
¡年¡位校對、¡月¡位校對、¡日¡位校對、¡時¡位校對、¡分¡位校對、¡秒¡位
校對狀態。不管是進入那種狀態,按動SB2皆可以使被調整位進行不進位增量加1變化。各
預置量設置完成後,系統將所有的設置存入RAM中,按SB1退出調整狀態。上電後,系統自
動進入計時狀態,起始於¡00¡時¡00¡分。SB4為年月日顯示轉換鍵,可使原來顯示時分
秒轉換顯示年月日。
三、電路原理分析
1.顯示原理
電原理圖見附圖1。由6個共陰極的數碼管組成時、分、秒的顯示。P0口的8條數據線
P0.0至P0.7分別與兩個CD4511解碼的ABCD口相接,P2口的P2.0至P2.2分別通過電阻
R10至R13與VT1至VT3的基極相連接。這樣通過P0口送出一個存儲單元的高位、低位BCD
顯示代碼,通過P2口送出掃描選通代碼輪流點亮LED1至LED6,就會將要顯示的數據在數
碼管中顯示出來。從P0口輸出的代碼是BCD碼,從P2口輸出的就是位選碼。這是掃描顯示
原理。
。
2鍵盤及讀數原理
鍵盤是人與微機打交道的主要設備,按鍵的讀取容易引起誤動作。可採用軟體去
抖動的方法處理,軟體的觸點在閉合和斷開的時候會產生抖動,這時觸點的邏輯電
平是不穩定的,如不採取妥善處理的話,將引起按鍵命令錯誤或重復執行,在這里
採用軟體延時的方法來避開抖動,延時時間20ms.
3連擊功能的實現
按下某鍵時,對應的功能鍵解釋程序得到執行,如操作者沒有釋放按鍵,則對應
的功能會反復執行,好象連續執行,在這里我們採用軟體延時250ms,當按鍵沒釋放則
執行下一條對應程序。利用連擊功能,能實現快速調時操作。
四、程序設計思想和相關指令介紹
本系統的主程序主要完成時間顯示和定時輸出判斷功能。而年月日顯示和各時間單元進
位,時間設定時,調定時間設定時等功能全部在中斷服務程序中完成。
1.數據與代碼轉換。
由前述可知,從P2口輸出位選碼,從P0口輸出段選碼,LED就會顯示出數字來。但P0
口的輸出的數據是要BCD碼,各存儲單元存儲的是二進制數,也就是和要顯示出的字元表達
的含義是不一致的。可見,將要顯示的存儲單元的數據直接送到P0口去驅動LED數碼管顯
示是不能正確表達的,必須在系統內部將要顯示的數據經過BCD碼行轉換後,將各個單元數
據的段選代碼送入P0口,給CD4511解碼後去驅動數碼管顯示。
具體轉換過程如下:
我們先將要顯示的數據裝入累加器A中,再將A中的數據轉換成高低兩位的BCD碼,
再放回A中,然後將A中的值輸出。如:有一個單元存儲了45這樣一位數,則需轉換成四
位的BCD碼:(0100)(0101)然後放入A中。A中BCD碼,高位四位代表¡4¡低四位代
表¡5¡同時送給兩個解碼器中,解碼後¡45¡字就在兩個LED中顯示出來。
2.計時功能的實現與中斷服務程序
時間的運行依靠定時中斷子程序對時鍾單元數值進位調整來實現的。計數器T0打開後,
進入計時,滿100毫秒後,重裝定時。中斷一次,滿一秒後秒進位,滿60秒後即為1分鍾,
分鍾單元進位,60分到了後,時單元進位,24小時滿後,天單元進位。這樣然後根據進率,
得到年、月、日、時、分、秒存儲單元的值,並經解碼後,通過掃描程序送LED中顯示出來,
實現時鍾計時功能。累加是用指令INC來實現的。
進入中斷服務程序以後,執行PUSHPSW和PUSHA將程序狀態寄存器PSW的內容和累
加器A中的數據保存起來,這便是所謂的¡保護現場¡.以保護現場和恢復現場時存取關鍵
數據的存儲區叫做堆棧。在軟體的控制之下,堆棧可在片內RAM中的任一區間設定,而堆棧
的數據存取與一般的RAM存取又有區別,對它的操作,要遵循¡後進先出¡的原則。
3時間控制功能與比較指令
系統的另一功能就是實現對執行設備的定時開關控制,其主要控制思想是這樣的:先
將執行設備開啟的時間和關閉時間置入RAM某一單元,在計時主程序當中執行幾條比較指
令,如果當前計時時間與執行設備的設定開啟時間相等,就執行一條CLR指令,將對應的
那路P3置為高電位,開啟;如果當前計時時間與執行設備設定的關閉時間相等,就執行SETB
對應的P3置低電位,二極體截止,。實現此控制功能用到的比較指令為CJNEA,#direct,
rel,其轉移條件是累加器A中的值與立即數不等則轉移。
參考文獻
1、謝自美,《電子線路設計、實驗、測試》武漢:華中理工大學出版社,2000
2、何書森、何華斌《實用數字電路原理與設計速成》福州:福建科學技術出版社,2000.6
3、白駒衍,《單片計算機及應用》北京:電子工業出版社,1999.2
五:程序
SECEQU32H;秒即時時間偽指令
MINEQU31H;分
HOUREQU30H;時
DAYEQU35H;日
MONEQU34H;月
YEAREQU33H;年
MIN_1EQU41H;分定時器1路、開存儲單元
HOUR_1EQU42H;時
DAY_1EQU43H;
MON_1EQU44H;
YEAR_1EQU45H;
MIN_11EQU40H;分定時器1路、關存儲單元
HOUR_11EQU46H;時
DAY_11EQU47H;日
MON_11EQU48H;月
YEAR_11EQU49H;年
;***********************
ORG0000H
ljmpMAIN
ORG0003H;中斷轉換顯示年月日、INT0(SB4鍵)
LJMPSHOW
ORG000BH;計數中斷T0、方式1
LJMPTIME
ORG0013H
LJMPCHANGE;調整時間、定時、INT1(SB0鍵)
;------主程序
ORG0030H
MAIN:
;--------初始化付值
MOVYEAR,#02
MOVMON,#05
MOVDAY,#01
MOVHOUR,#00
MOVMIN,#00
MOVSEC,#00
CLR40H;定時單元1路清零
CLR41H
CLR42H
CLR43H
CLR44H
CLR45H
CLR46H
CLR47H
CLR48H
CLR49H
;-------開中斷
MOVTMOD,#01H;計數、模式1、T0
MOVTL0,#0B0H;100SM計數定時
MOVTH0,#3CH;
clrp3.0
MOV20H,#0AH;10次*100SM
SETBPT0;T0為最高級
SETBTR0;允許計數
SETBET0;允許T0中斷
SETBEX0;允許INT0中斷
SETBEX1;允許INT1中斷
SETBEA;開總中斷
;------顯示、定時器啟動判斷
LOOP:
MOVR1,#30H;存儲單元
MOVR4,#01H;位選通
MOVR3,#03H;三組顯示
NEXT:
MOVA,@R1;
MOVB,#10;將存儲單元轉換成兩高低兩組的BCD碼
DIVAB
SWAPA
ORLA,B
MOVP0,A;輸出
MOVP2,R4
INCR1;下一單元
MOVA,R4;
RLA;位移
MOVR4,A
LCALLDE5SM;延時0.5SM
DJNZR3,NEXT;全掃描顯示一偏
;------判斷定時輸出(只編寫了一路)
CJNER7,#88H,LOOP;是8則開,否則、定時已關、轉
;---------開
MOVA,YEAR
CJNEA,YEAR_1,LOOP_1;年比較,不等轉關
MOVA,MON
CJNEA,MON_1,LOOP_1
MOVA,DAY
CJNEA,DAY_1,LOOP_1
MOVA,HOUR
CJNEA,HOUR_1,LOOP_1
MOVA,MIN
CJNEA,MIN_1,LOOP_1
CPLP3.0
;---------關
LOOP_1:
MOVA,YEAR
CJNEA,YEAR_11,LOOP;年比較
MOVA,MON
CJNEA,MON_11,LOOP
MOVA,DAY
CJNEA,DAY_11,LOOP
MOVA,HOUR
CJNEA,HOUR_11,LOOP
MOVA,MIN
CJNEA,MIN_11,LOOP
CPLP3.0
LJMPLOOP
;-----年月日顯示中斷子程序
SHOW:
PUSHPSW
pushACC
PUSHB
PUSH01H
PUSH02H
PUSH03H
PUSH04H
MOVR2,#0FFH;中斷掃描次數
TURN:MOVR1,#33H
MOVR4,#01H
MOVR3,#03H
NEXT_1:
MOVA,@R1
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,R4
INCR1
RLA
MOVR4,A
LCALLDE5SM
DJNZR3,NEXT_1
DJNZR2,TURN;反復顯示一定時間後返回
POP04H
POP03H
POP02H
POP01H
POPB
POPACC
POPPSW
RETI
;-----計數中斷服務子程序
TIME:
PUSHPSW
PUSHACC
PUSHB
PUSH06H
MOVTH0,#3CH;重裝計數
MOVTL0,#0BH;
DJNZ20H,OUT;轉到中斷跳出pop程序
MOV20H,#0AH;重裝:100*10=1000
;-----進位程序
INCSEC
MOVR6,SEC;
CJNER6,#60,OUT;比較
MOVSEC,#00;
INCMIN
MOVR6,MIN
CJNER6,#60,OUT
MOVMIN,#00
INCHOUR
MOVR6,HOUR
CJNER6,#25,OUT
MOVHOUR,#00
INCDAY
MOVR5,MON
CJNER5,#1,MON_22;是否1月、不是轉2月
MOVR5,DAY
CJNER5,#32,OUT;本月是否益出
INCMON
MOVDAY,#1
LJMPOUT
OUT:
POP06H
POPB
POPACC
POPPSW
RETI
MON_22:
MOVR5,MON
CJNER5,#2,MON_33;是否2月、不是轉3月
MOVA,YEAR;判斷是否瑞年
MOVB,#4
DIVAB
MOVA,B
JNZOUT_1;不是則轉(A不為零則轉)
MOVR5,DAY
CJNER5,#30,OUT;如是瑞年、判斷是否到29天
INCMON
MOVDAY,#1
LJMPOUT
OUT_1:
MOVR5,DAY
CJNER5,#29,OUT;平年二月判斷
INCMON
MOVDAY,#1
LJMPOUT
MON_33:
MOVR5,MON
CJNER5,#3,MON_44
MOVR5,DAY
CJNER5,#32,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_44:
MOVR5,MON
CJNER5,#4,MON_55
MOVR5,DAY
CJNER5,#31,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_55:
MOVR5,MON
CJNER5,#5,MON_66
MOVR5,DAY
CJNER5,#32,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_66:
MOVR5,MON
CJNER5,#6,MON_77
MOVR5,DAY
CJNER5,#31,OUT
INCMON
MOVDAY,#1
LJMPOUT
MON_77:
MOVR5,MON
CJNER5,#7,MON_88
MOVR5,DAY
CJNER5,#32,L1
INCMON
MOVDAY,#1
L1:LJMPOUT
MON_88:
MOVR5,MON
CJNER5,#8,MON_99
MOVR5,DAY
CJNER5,#32,L2
INCMON
MOVDAY,#1
L2:LJMPOUT
MON_99:
MOVR5,MON
CJNER5,#9,MON_00
MOVR5,DAY
CJNER5,#31,L3
INCMON
MOVDAY,#1
L3:LJMPOUT
MON_00:
MOVR5,MON
CJNER5,#10,MON_AA
MOVR5,DAY
CJNER5,#32,L4
INCMON
MOVDAY,#1
L4:LJMPOUT
MON_AA:
MOVR5,MON
CJNER5,#11,MON_BB
MOVR5,DAY
CJNER5,#31,L5
INCMON
MOVDAY,#1
L5:LJMPOUT
MON_BB:
MOVR5,DAY
CJNER5,#32,L6
INCYEAR
MOVMON,#1
MOVDAY,#1
L6:LJMPOUT
;-------按SB2定時器年單元加1子程序
SB3_2:LJMPSHOW_2;二路沒編返回
SB3_3:LJMPSHOW_3;三路沒編返回
SB3_1:
MOVA,YEAR_1;調時年單元
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,SB3_1
CJNEA,#0FBH,KEY2_7;按SB2轉年調整
LJMPMON_111;按SB1往下調月單元
KEY2_7:CJNEA,#0FDH,SB3_1
INCYEAR_1;1路年單元加1
MOVR5,YEAR_1
CJNER5,#09,SB3_1;益出
MOVYEAR_1,#00H
AJMPSB3_1;
;-------月單元加1子程序
MON_111:
MOVA,MON_1;調時月單元顯示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MON_111
CJNEA,#0FBH,KEY2_8;按SB2轉月調整
LJMPDAY_111
KEY2_8:
CJNEA,#0FDH,MON_111
INCMON_1;1路月單元加1
MOVR5,MON_1
CJNER5,#13,MON_111;益出
MOVMON_1,#01H
AJMPMON_111;轉到月顯
;_------日單元加1子程序
DAY_111:
MOVA,DAY_1;調時日單元顯示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#04H
LCALLREAD
LCALLDE250SM
CJNEA,01H,DAY_111
CJNEA,#0FBH,KEY2_9;按SB2轉日調整
LJMPHOUR_111
KEY2_9:CJNEA,#0FDH,DAY_111
INCDAY_1;1組日單元加1
MOVR5,DAY_1
CJNER5,#32,DAY_111;益出
MOVDAY_1,#01H
AJMPDAY_111;轉到日顯
;-------按SB2時單元加1子程序
HOUR_111:
MOVA,HOUR_1;調時時單元顯示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,HOUR_111
CJNEA,#0FBH,KEY2_10;按SB2轉時調整
LJMPMIN_111
KEY2_10:CJNEA,#0FDH,HOUR_111
INCHOUR_1
MOVR5,HOUR_1
CJNER5,#24,HOUR_111;益出
MOVHOUR_1,#00H
AJMPHOUR_111;轉到時顯
;-------分單元加1子程序
MIN_111:
MOVA,MIN_1;調時分單元、並顯示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MIN_111
CJNEA,#0FBH,KEY2_11;按SB2轉分調整
AJMPOFF_CH;按SB3往下調定時:關單元
KEY2_11:CJNEA,#0FDH,MIN_111
INCMIN_1;1路分單元加1
MOVR5,MIN_1
CJNER5,#60,MIN_111;益處
MOVMIN_1,#00H
AJMPMIN_111;轉到分顯
年單元調整
OFF_CH:MOVA,YEAR_11;調時年單元
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,OFF_CH
CJNEA,#0FBH,KEY2_F7;按SB2轉年調整
LJMPMON_OFF;按SB1往下調月單元
KEY2_F7:CJNEA,#0FDH,OFF_CH
INCYEAR_11;1路年單元加1
MOVR5,YEAR_11
CJNER5,#09,OFF_CH;益出
MOVYEAR_11,#00H
AJMPOFF_CH;
;-------月單元加1子程序
MON_OFF:
MOVA,MON_11;調時月單元顯示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MON_OFF
CJNEA,#0FBH,KEY2_F8;按SB2轉月調整
LJMPDAY_OFF
KEY2_F8:
CJNEA,#0FDH,MON_OFF
INCMON_11;1路月單元加1
MOVR5,MON_11
CJNER5,#13,MON_OFF;益出
MOVMON_11,#01H
AJMPMON_OFF;轉到月顯
;_------日單元加1子程序
DAY_OFF:
MOVA,DAY_11;調時日單元顯示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#04H
LCALLREAD
LCALLDE250SM
CJNEA,01H,DAY_OFF
CJNEA,#0FBH,KEY2_F9;按SB2轉日調整
LJMPHOUR_OFF
KEY2_F9:CJNEA,#0FDH,DAY_OFF
INCDAY_11;1組日單元加1
MOVR5,DAY_11
CJNER5,#32,DAY_OFF;益出
MOVDAY_11,#01H
AJMPDAY_OFF;轉到日顯
;-------按SB2時單元加1子程序
HOUR_OFF:
MOVA,HOUR_11;調時時單元顯示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#01H
LCALLREAD
LCALLDE250SM
CJNEA,01H,HOUR_OFF
CJNEA,#0FBH,KEY2_F10;按SB2轉時調整
LJMPMIN_OFF
KEY2_F10:CJNEA,#0FDH,HOUR_OFF
INCHOUR_11
MOVR5,HOUR_11
CJNER5,#24,HOUR_OFF;益出
MOVHOUR_11,#00H
AJMPHOUR_OFF;轉到時顯
;-------分單元加1子程序
MIN_OFF:
MOVA,MIN_11;調時分單元、並顯示提示
MOVB,#10
DIVAB
SWAPA
ORLA,B
MOVP0,A
MOVP2,#02H
LCALLREAD
LCALLDE250SM
CJNEA,01H,MIN_OFF
CJNEA,#0FBH,KEY2_F11;按SB2轉分調整
LJMPON_1;按SB3往下調定時:開與關
KEY2_F11:CJNEA,#0FDH,MIN_OFF
INCMIN_11;1路分單元加1
MOVR5,MIN_11
CJNER5,#60,MIN_OFF;益處
MOVMIN_11,#00H
LJMPMIN_OFF;轉到分顯
;-------開、關定時
ON_1:CJNEA,#0FBH,MIN_OFF
K1:MOVA,#88H
MOVR7,A
MOVP0,A
MOVP2,#0FFH;三組都顯示開
LCALLREAD
LCALLDE250SM
CJNEA,01H,ON_1;去抖後比較
CJNEA,#0FBH,KEY2_12;按SB2轉關
LJMPOUT_A;按SB3調出、處於開狀態
KEY2_12:CJNEA,#0FDH,K1
k2:MOVA,#00H;顯示0關
MOVR7,A
MOVP0,A
MOVP2,#0FFH;
LCALLREAD
LCALLDE250SM
CJNEA,01H,K2;去抖後比較
CJNEA,#0FBH,KEY2_13;按SB2轉開
LJMPOUT_A;SB3調出、處關狀態
KEY2_13:
CJNEA,#0FDH,K2;比較按了沒
LJMPK1;按了SB2、轉開
OUT_A:
POP00H
POPB
POPACC
POPPSW
RETI
;_------讀取按鍵程序
READ:MOVA,P1;讀取按鍵
MOVR1,A
LCALLDE10MS
MOVA,P1
RET
;_----延時程序
DE5SM:
PUSH01H
MOVR1,#0FFH
DJNZR1,$
POP01H
RET
DE10MS:PUSH04H
PUSH05H
MOVR4,#0AH
Dl1:MOVR5,#0FFH
dl2:DJNZR5,$
DJNZR4,dl1
POP05H
POP04H
RET
DE250SM:PUSH02H
PUSH00H
MOVR0,#0FFH
DEL:MOVR2,#0FFH
DJNZR2,$
DJNZR0,DEL
POP00H
POP02H
RET
;_---調整時間進位程序
MIN_AD:
INCMIN
MOVR6,MIN
CJNER6,#60,OU1
MOVMIN,#00
OU1:RET
HOUR_AD:
INCHOUR
MOVR6,HOUR
CJNER6,#25,OU2
MOVHOUR,#00
OU2:RET
DAY_AD:
INCDAY
MOVR6,DAY
CJNER6,#32,OU3;是否益出
MOVDAY,#01H
OU3:RET
MON_AD:
INCMON
MOVR6,MON
CJNER6,#13,OU4;是否益出
MOVMON,#01H
OU4:RET
YEAR_AD:
INCYEAR
MOVR6,YEAR
CJNER6,#09,OU5;是否益出
MOVYEAR,#00H
OU5:RET
六:附錄
實驗設計電路圖1
10. 繪制一單片機最小系統電路圖,編寫程序控制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語言。
第二步(進階的過程):有了第一步的基礎之後,接下來的便是進階的過程,當時,我看的是郭天祥十天學會單片機的視頻教程,因為這個教程從基礎到復雜的編程慢慢深入,講的比較的全面,而且也生動,所以那一階段,也是我學習單片機進步最快的階段,每次聽課的時候,按照上面的實驗,以及課堂上面調試程序時出現的一些問題,自己認真的在電腦上進行調試,並分析產生故障的原因,讓我有了一定的開發基礎。在看完了視頻教程之後,後面又對基礎的知識進行了下補習,主要是看單片機原理性的教材,因為有些細節性的東西還是要從教材上面獲得。