![]() |
發(fā)布時間: 2019-2-18 15:27
正文摘要:/****************** 語言: 匯編 項目: 1位數(shù)碼管顯示 0-F 芯片: STC 12C2052AD PDIP-20 日期: 2019.2.18 ... |
本次還是延續(xù)發(fā)表于 2019-2-18 電路 本次更換芯片:STC 12C2052AD更換為STC 12C5608AD /****************** 語言: 匯編 項目: 數(shù)碼管點閃爍 芯片: STC 12C5608AD PDIP-20 日期: 2019.3.4 編寫: ZCT P3.5 接數(shù)碼管COM P3.4 接數(shù)碼管COM P3.3 接數(shù)碼管COM P3.2 接數(shù)碼管COM P1.0-P1.7 接數(shù)碼管段位a b c d e f g dp 晶振:12M ******************/ ORG 0000H JMP START ORG 0030H START: MOV SP,#60H MOV P1,#0FFH CLR P3.5 ;設(shè)置LED初始狀態(tài) MOV TMOD,#01H ;設(shè)置定時器/計數(shù)器方式 MOV R0,#10 LOOP: MOV P1,#07FH AGAIN: MOV TH0,#HIGH(65535-50000) ;設(shè)置計數(shù)值 MOV TL0,#LOW(65535-50000) ;設(shè)置計數(shù)值 SETB TR0 ;啟動定時器0 TF0_0: JBC TF0,TIMEOUT ;查詢定時器是否中斷 JMP TF0_0 ;連續(xù)查詢是否中斷 TIMEOUT: CLR TR0 ;關(guān)閉定時器 DJNZ R0,TF0_0 ;重復(fù)10次時間定時 CPL P3.5 ;重復(fù)10次后,顯示數(shù)字加1 MOV R0,#10 JMP LOOP ;調(diào)至LOOP形成一個新循環(huán) END |
本次還是延續(xù)發(fā)表于 2019-2-18 電路 本次更換芯片:STC 12C2052AD更換為STC 12C5608AD 本次增加交替顯示: 秒鐘和分鐘時鐘交替顯示 /****************** 語言: 匯編 項目: 4位數(shù)碼管時間顯示 時鐘分鐘和秒鐘交替顯示 芯片: STC 12C5608AD PDIP-20 日期: 2019.3.3 編寫: ZCT P3.5 接數(shù)碼管COM P3.4 接數(shù)碼管COM P3.3 接數(shù)碼管COM P3.2 接數(shù)碼管COM P1.0-P1.7 接數(shù)碼管段位a b c d e f g dp 晶振:12M ******************/ /**************數(shù)碼管顯示時間初始化***************************/ LED0 BIT P3.5 LED1 BIT P3.4 LED2 BIT P3.3 LED3 BIT P3.2 SEC DATA 30H MIN DATA 31H HOUR DATA 32H ORG 0000H JMP MAIN ORG 000BH LJMP TIME_TF0 ORG 0030H MAIN: MOV SP,#60H MOV P1,#0FFH MOV P3,#0FFH MOV SEC,#57 ;秒鐘初值 MOV MIN,#58 ;分鐘初值 MOV HOUR,#19 ;時鐘初值 MOV 20H,#0 MOV DPTR,#TABLE MOV TMOD,#11H ;設(shè)置定時器工作方式為1 MOV IE,#10001010B ;啟動總中斷;啟動定時器0中斷 MOV TH0,#HIGH(65535-50000) ;定時器0高8位賦值 MOV TL0,#LOW(65535-50000) ;定時器0低8位賦值 SETB TR0 ;啟動定時器 MOV R0,#20 ;定時器中斷循環(huán)次數(shù) MOV R1,#20 LCALL DISPLAY_MIN ;顯示分鐘初值 LCALL DISPLAY_HOUR ;顯示時鐘初值 START: LCALL DISPLAY_MIN LCALL DISPLAY_HOUR CJNE R4,#6,START ;分鐘時鐘顯示時間 DIAPLAYSEC: LCALL DISPLAY_SEC CJNE R4,#13,DIAPLAYSEC ;秒鐘顯示時間 MOV 20H,#0 ;交替值清零 JMP START /***************定時器中斷程序******************/ TIME_TF0: CLR TR0 ;關(guān)閉定時器 MOV TH0,#HIGH(65535-50000) ;定時器重新賦值 MOV TL0,#LOW(65535-50000) SETB TR0 ;啟動定時器 DJNZ R0,RETURN ;1秒定時。判斷R0是否為零,返回到START。如等于零,執(zhí)行下一條。*/ MOV R0,#20 ;重新賦值 INC SEC ;秒寄存器加1 INC 20H ;交替顯示時間 MOV R4,20H MOV R3,SEC ;秒的值載人R3 CJNE R3,#60,TIME_TF0 ;判斷SEC不等于60,返回到定時器中斷。 等于60下一條 MOV SEC,#0 ;秒值清零 JMP TIME_MIN ;跳到分鐘寄存器 RETURN:RETI TIME_MIN: ;注釋同上 INC MIN MOV R3,MIN CJNE R3,#60,TIME_TF0 MOV MIN,#0 JMP TIME_HOUR TIME_HOUR: INC HOUR MOV R3,HOUR CJNE R3,#24,TIME_TF0 MOV HOUR,#0 JMP TIME_TF0 ;返回到定時器中斷 /***************以下參考2月24日的注釋****************/ /***************秒鐘顯示程序****************/ DISPLAY_SEC: MOV A,SEC MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED1 CALL DELAY_10MS SETB LED1 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED0 CALL DELAY_10MS SETB LED0 CALL DELAY_10MS RET /***************分鐘顯示程序****************/ DISPLAY_MIN: MOV A,MIN MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED1 CALL DELAY_10MS SETB LED1 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED0 CALL DELAY_10MS SETB LED0 CALL DELAY_10MS RET /***************時鐘顯示程序****************/ DISPLAY_HOUR: MOV A,HOUR MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED3 CALL DELAY_10MS SETB LED3 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED2 CALL DELAY_10MS SETB LED2 CALL DELAY_10MS RET /**************延時程序****************/ DELAY_10MS: MOV R7,#1 D1: MOV R6,#5 D2: DJNZ R6,D2 DJNZ R7,D1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END |
4位數(shù)碼管顯示FFFF,就不發(fā)了,自己動手改一下。 本次還是延續(xù)發(fā)表于 2019-2-18 電路 /****************** 語言: 匯編 項目: 4位數(shù)碼管時間顯示 芯片: STC 12C2052AD PDIP-20 日期: 2019.3.2 編寫: ZCT P3.5 接數(shù)碼管COM P3.4 接數(shù)碼管COM P3.3 接數(shù)碼管COM P3.2 接數(shù)碼管COM P1.0-P1.7 接數(shù)碼管段位a b c d e f g dp 注意:時間精度不高,每分鐘慢4.3秒 ******************/ /**************數(shù)碼管顯示時間初始化***************************/ LED0 BIT P3.5 LED1 BIT P3.4 LED2 BIT P3.3 LED3 BIT P3.2 SEC DATA 30H MIN DATA 31H HOUR DATA 32H ORG 0000H JMP MAIN ORG 000BH LJMP TIME_TF0 ORG 0030H MAIN: MOV SP,#60H MOV P1,#0FFH MOV P3,#0FFH MOV SEC,#59 ;秒鐘初值 MOV MIN,#59 ;分鐘初值 MOV HOUR,#00 ;時鐘初值 MOV DPTR,#TABLE MOV TMOD,#11H ;設(shè)置定時器工作方式為1 SETB EA ;啟動總中斷 SETB ET0 ;啟動定時器0中斷 MOV TH0,#HIGH(65535-50000) ;定時器0高8位賦值 MOV TL0,#LOW(65535-50000) ;定時器0低8位賦值 SETB TR0 ;啟動定時器0 MOV R0,#11 ;定時器中斷循環(huán)次數(shù) LCALL DISPLAY_MIN ;顯示分鐘初值 LCALL DISPLAY_HOUR ;顯示時鐘初值 START: LCALL DISPLAY_MIN ;顯示定時值 LCALL DISPLAY_HOUR JMP START /***************定時器中斷程序******************/ TIME_TF0: CLR TR0 ;關(guān)閉定時器 MOV TH0,#HIGH(65535-50000) ;定時器重新賦值 MOV TL0,#LOW(65535-50000) SETB TR0 ;啟動定時器 DJNZ R0,RETURN ;1秒定時。判斷R0是否為零,返回到START。如等于零,執(zhí)行下一條。 MOV R0,#11 ;重新賦值 INC SEC ;秒寄存器加1 MOV R3,SEC ;秒的值載人R3 CJNE R3,#60,TIME_TF0 ;判斷SEC不等于60,返回到定時器中斷。 等于60下一條 MOV SEC,#0 ;秒值清零 JMP TIME_MIN ;跳到分鐘寄存器 RETURN:RETI TIME_MIN: ;注釋同上 INC MIN MOV R3,MIN CJNE R3,#60,TIME_TF0 MOV MIN,#0 JMP TIME_HOUR TIME_HOUR: INC HOUR MOV R3,HOUR CJNE R3,#24,TIME_TF0 MOV HOUR,#0 JMP TIME_TF0 ;返回到定時器中斷 /***************以下參考發(fā)表于2月24日的注釋****************/ /***************分鐘顯示程序****************/ DISPLAY_MIN: MOV A,MIN MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED1 CALL DELAY_10MS SETB LED1 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED0 CALL DELAY_10MS SETB LED0 CALL DELAY_10MS RET /***************時鐘顯示程序****************/ DISPLAY_HOUR: MOV A,HOUR MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR LED3 CALL DELAY_10MS SETB LED3 CALL DELAY_10MS MOV A,B MOVC A,@A+DPTR MOV P1,A CLR LED2 CALL DELAY_10MS SETB LED2 CALL DELAY_10MS RET /**************延時程序****************/ DELAY_10MS: MOV R7,#10 D1: MOV R6,#250 D2: DJNZ R6,D2 DJNZ R7,D1 RET TABLE: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH END |
1位數(shù)碼管改成2位數(shù)碼管了?可是你的電路圖是4位數(shù)碼管的! |
延續(xù)上次電路 /****************** 語言: 匯編 項目: 2位數(shù)碼管顯示 0-FF 芯片: STC 12C2052AD PDIP-20 日期: 2019.2.24 編寫: ZCT P3.5 接數(shù)碼管COM P3.4 接數(shù)碼管COM P1.0-P1.7 接數(shù)碼管段位a b c d e f g dp ******************/ LED BIT P3.5 ;用 LED 表示 I/O口P3.5 LED1 BIT P3.4 ORG 000H ;程序從地址 00H 開始 JMP MAIN ;調(diào)轉(zhuǎn)到 MAIN 函數(shù) MAIN: MOV SP,#60H ;堆棧地址設(shè)為 60H MOV P1,#0FFH ;P1口值1 MOV P3,#0FFH MOV DPTR,#TABLE ;表格數(shù)據(jù)放入指針 MOV R0,#0FFH ;顯示賦初值,并放入寄存器 R0 DISP: MOV R1,#30 ;刷新次數(shù),可以更改立即數(shù)看效果。 MOV A,R0 ;裝入初值 MOV B,#16 ;16進制調(diào)整. 可以載人 10 看看效果。 DIV AB ;除 MOV 30H,B ;余數(shù)放B MOV 31H,A ;商放A LOOP: MOV A,31H ;裝入商 MOVC A,@A+DPTR ;查表 MOV P1,A ;顯示A的數(shù)據(jù) CLR LED1 ;LED1 值0,打開 CALL DELAY_5MS ;延時 SETB LED1 ;LED1 值1,關(guān)閉 MOV A,30H ;同上 MOVC A,@A+DPTR MOV P1,A CLR LED CALL DELAY_5MS SETB LED DJNZ R1,LOOP ;刷新次數(shù)循環(huán),一定要調(diào)至LOOP。動手改跳到DISP看看效果 INC R0 ;R0 加1 CJNE R0,#255,DISP ;判斷R0 是否等于 255,不等調(diào)至DISP MOV R0,#0 ;清R0 JMP MAIN DELAY_5MS: MOV R3,#20 D3: MOV R4,#250 DJNZ R4,$ DJNZ R3,D3 RET TABLE: ;0-F 表格查詢 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H ;0-9 DB 90H,88H,80H,0C6H,0C0H,86H,8EH ;A-F END |
本帖需要重新編輯補全電路原理圖即可獲得100+黑幣(帖子下方有編輯按鈕) |
Powered by 單片機教程網(wǎng)