國立勤益科技大學 第 54 組實務專題報告 實務專題報告 太陽能電池充電中英文切換雙色搖搖棒 指導教授 : 蘇志超老師 學生 :3A313043 連俊宇 3A313052 劉家峻 中華民國 106 年 6 月 1
中文摘要 視覺暫留的現象在亙古便已存在, 物體在快速運動時, 當人眼所看到的影像消失後, 人眼仍能繼續保留其影像, 約 0.1-0.4 秒左右的圖像 人眼觀看物體時, 成像於視網膜上, 並由視神經輸入人腦, 感覺到物體的像, 但當物體移去時, 視神經對物體的印象不會立即消失, 而要延續 0.1-0.4 秒的時間, 人眼的這種性質被稱為 眼睛的視覺暫留 此專題以單晶片 89S51 和 16 顆 LED 組成 LED 搖搖棒來驗證此原理 英文摘要 The phenomenon of visual persistence exists in ancient times, the object in the fast movement, when the human eye to see the image disappears, the human eye can continue to retain its image, about 0.1-0.4 seconds or so images. The human eye to see the object, the imaging on the retina, and by the optic nerve into the human brain, feel the object of the image, but when the object is removed, the optic nerve on the object of the impression will not immediately disappear, and to extend 0.1-0.4 seconds, This kind of nature of the human eye is called "the eye of the visual stay" This topic to single-chip 89S51 and 16 LED LED rocker stick to verify this principle. 2
目錄 緒言...4 簡介...4 ( 一 ) 研究動機...4 ( 二 ) 研究方法...4 ( 三 ) 原理與分析.5 ( 四 ) 排字排法.5 軟 硬體分析...6 ( 一 ) 線路圖. 6 ( 二 ) 硬體方塊圖. 7 ( 三 ) 程式流程圖. 8 ( 四 ) 程式內容.9 實驗結果...21 未來應用...22 結論...22 參考資料...22 3
緒言 當我們觀賞煙火時或者看電影, 都會用到所謂 視覺暫留 視覺暫留 ( 英文 :Persistence of vision) 也稱為正片後像, 是光對視網膜所產生的視覺, 在光停止作用後, 仍然保留一段時間的現象, 其具體應用是電影的拍攝和放映 原因是由視神經的反應速度造成的, 其時值約是 1/16 秒, 對於不同頻率的光有不同的暫留時間 我們各設置 16 顆 LED 燈, 當按下開關時會先呈現藍色燈搖擺時產生出中文字當切換開換時會時會變成紅色顯示圖形及英文字, 當沒電時在戶外時可連接太陽板進行充電, 以此來驗證視覺暫流現象, 並結合太陽板使用太陽能進行充電, 節省購買電池的花費 簡介 ( 一 ) 研究動機 動機是常常在演唱會或是尾牙表演等活動時, 在燈光黯淡的時候, 無法看清楚事物, 這時依靠著搖搖棒可以產生出想要的字形, 也可以把它整合成一個大字幕, 那感覺勢必能夠為臺上歌手加油以及震撼透過轉播觀看的們 ( 二 ) 研究方法 4
( 三 ) 原理與分析 單晶片 AT89S51 介紹 : MCS-51 系列單晶片是 INTEL 公司的產品, 其中 8051 是 INTEL 公司於 1981 年生產製造的原始晶片 主要的功能及特性說明如下 : 特色 : 8051 單晶片 1.8 位元微電腦控制晶片 2.4KB 內部程式記憶體, 最大外接擴充至 64KB 3.128Byte 內部資料憶體, 最大可外接擴充至 64KB 4. 具有布林代數運算能力 ( 位元邏輯 ) ( 四 ) 排字排法採取 16x16 的矩陣並採取二進制方式 5
軟 硬體分析 ( 一 ) 線路圖 6
( 二 ) 硬體方塊圖 7
( 三 ) 程式流程圖 8
( 四 ) 程式內容 ;---------------------------------------------- ; 顯示字幕 ;---------------------------------------------- 旗號定義 MS50_F BIT 20H.0 SEC_F BIT 20H.1 SEC_CNT EQU 21H MODE_SEL EQU 22H ;MODE0= 紅色字串 1 MODE1= 綠色字串 2 OFFSET_CNT EQU 23H ; 顯示位置點 DA_PORTH EQU P2 DA_PORTL EQU P1 SENSOR_SW BIT P3.5 ; 不導通時為正向文字 RED_LED_POWER BIT P3.6 GRN_LED_POWER BIT P3.7 MODE_SW BIT P3.0 SHOW_LED BIT P0.0 ;---------------------------------------------- 程式碼 ORG 0000H ;RESET JMP RESET ORG 001BH JMP TIME1_IRQ ;TIME1 ;---------------------------------------------- RESET: CALL ALL_OFF ; 關閉 CALL INIT_TIMER ; 原始 timer 設定 CLR CLR RED_LED_POWER GRN_LED_POWER MOV SEC_CNT,#20 ;SEC_CNT=20 計時 1 秒 CLR SEC_F ;SEC_F=0 RES1: JNB SEC_F,RES1 CLR SEC_F ; 清除計時 CALL ALL_ON ; 亮 RES2: JNB SEC_F,RES2 9
CALL ALL_OFF ; 關閉 MOV MODE_SEL,#0 WAIT1: JNB SENSOR_SW,WAIT1 ; 等待正向開始 LOOP11: MOV R1,#6 ;R1= 顯示第 1 第 2 字正向顯示 ;=============================== 正向顯示 ( 由第 1 字顯 示 ) MOV A,MODE_SEL JNZ TXT12 ;-------------------------- CLR RED_LED_POWER ; 紅色 SETB GRN_LED_POWER MOV DPTR,#W11 ;DPTR=W11 開始位 置 JMP S100 TXT12: SETB RED_LED_POWER ; 綠色 CLR GRN_LED_POWER MOV DPTR,#W21 ;DPTR=W21 開始位 置 S100: MOV OFFSET_CNT,#0 顯示 CLR SHOW_LED ; 亮指示 LED 開始 S10: MOV R0,#16 ;R0=1 字 16 行 S11: MOV A,OFFSET_CNT MOVC A,@A+DPTR ;(A+DPTR) 指到的程 式記憶體內容放入 A CPL A MOV DA_PORTL,A ;OUT 字型 INC OFFSET_CNT ;OFFSET+1 MOV A,OFFSET_CNT 10
MOVC A,@A+DPTR ;(A+DPTR) 指到的程 式記憶體內容放入 A CPL A MOV DA_PORTH,A ;OUT 字型 INC OFFSET_CNT ;OFFSET+1 DJNZ R0,S11 ; 若 R0-1 不等於 0 跳 S11( 完成 1 字 ) CALL ALL_OFF DJNZ R1,S10 ; 若 R1-1 不等於 0 跳 S10( 完成指定字數 ) 結束 SETB SHOW_LED ; 暗指示 LED 顯示 ;=============================== 反向顯示第 4 第 3( 由第 4 字顯示 ) MOV R0,#150 WT1: CALL CHK_MODE_SW ; 按鍵變色 DJNZ R0,WT1 ; 邊緣 delay LOOP21: MOV R1,#6;R1= 顯示 2 字反向顯示 ;=============================== 反向顯示 ( 由第 4 字顯 示 ) MOV A,MODE_SEL JNZ TXT22 ;-------------------------- CLR RED_LED_POWER ; 紅色 11
置 SETB GRN_LED_POWER MOV DPTR,#W12 ;DPTR=W11 開始位 JMP S200 TXT22: SETB RED_LED_POWER ; 綠色 CLR GRN_LED_POWER MOV DPTR,#W22 ;DPTR=W21 開始位 置 S200: MOV A,R1 MOV B,#32 ;1 字 32 BYTE MUL AB ; 計算最後 1 字的位 置 MOV OFFSET_CNT,A 顯示 CLR SHOW_LED ; 亮指示 LED 開始 S20: MOV R0,#16 ;R0=1 字 16 行 S21: MOV A,OFFSET_CNT MOVC A,@A+DPTR ;(A+DPTR) 指到的程 式記憶體內容放入 A CPL A MOV DA_PORTL,A ;OUT 字型 DEC OFFSET_CNT ;OFFSET+1 MOV A,OFFSET_CNT MOVC A,@A+DPTR ;(A+DPTR) 指到的程 式記憶體內容放入 A CPL A MOV DA_PORTH,A ;OUT 字型 DEC OFFSET_CNT ;OFFSET+1 DJNZ R0,S21 ; 若 R0-1 不等於 0 跳 S21( 完成 1 字 ) 12
CALL CALL CALL CALL DELAYMS DELAYMS DELAYMS ALL_OFF DJNZ R1,S20 ; 若 R1-1 不等於 0 跳 S20( 完成指定字數 ) 結束 SETB SHOW_LED ; 暗指示 LED 顯示 MOV R0,#150 ; 由 0 為 1 WT2: CALL CHK_MODE_SW ; 按鍵變色 DJNZ R0,WT2 ; 邊緣 delay JNB SENSOR_SW,LOOP21 JMP LOOP11 ; 跳至 loop11 ;----------------------------------------------------- CHK_MODE_SW: JB MODE_SW,CHK_END ; 未按至 CHK_END JB MODE_SW,CHK_END ; 未按至 CHK_END INC MODE_SEL MOV A,MODE_SEL JNZ SEL2 ;-------------------------- 選擇顏色 CLR RED_LED_POWER ; 紅色 SETB GRN_LED_POWER JMP W_UP SEL2: SETB RED_LED_POWER ; 綠色 CLR GRN_LED_POWER MOV MODE_SEL,#0FFH 13
W_UP: CALL ALL_ON WUP1: JNB MODE_SW,WUP1 ; 等放開 CALL ALL_OFF CHK_END: RET ;------------------------------------------ DELAYMS: MOV R6,#2 D1: MOV R7,#250 DJNZ R7,$ ; DJNZ R6,D1 RET ;----------------------------------------------------- ALL_OFF: MOV P1,#0FFH ; MOV P2,#0FFH RET ;----------------------------------------------------- ALL_ON: MOV P1,#0 ; MOV P2,#0 RET ; 返回 ;-------------------------------------------------- 原始 timer 設定副程式 INIT_TIMER: MOV TMOD,#00010000B ;TIME0 模式 1 MOV TH1,#3CH ;TH1 放入 TIME1_DATA 值的高位元 MOV TL1,#0B0H ;TL1 放入 TIME1_DATA 值的低位元 MOV IE,#10001000B ; 啟動 TIME0 中斷 SETB TR1 ; 開始 TIME0 RET ;==================================================TIME0 中斷副程式 TIME1_IRQ: PUSH ACC MOV A,PSW PUSH ACC MOV TH1,#3CH ;TH1 放入 TIME1_DATA 值的高位元 MOV TL1,#0B0H ;TL1 放入 TIME1_DATA 值的低位元 14
SETB MS50_F ;MS50_F=1 跳 T_END DJNZ SEC_CNT,T_END ; 若 SEC_CNT-1 不等於 0 SETB SEC_F ;SEC_F=1 MOV SEC_CNT,#20 ;SEC_CNT=20 T_END: POP ACC MOV PSW,A POP ACC RETI ; 中斷返回 ;================================================== 字型 W11: 00000000B,00000000B ; 勤 00100000B,00000100B 00101011B,11000100B 00101010B,01011110B 00101010B,01010100B 00111111B,11110100B 00101010B,01011110B 00101010B,01000100B 01001011B,11000100B 00110000B,00010000B 00001111B,00010000B 00100000B,11111110B 01000000B,00010000B 00111100B,00010000B 00000011B,11110000B 00000000B,00000000B 00000000B,00000000B ; 益 01000000B,00010000B 01111110B,00010000B 01000010B,10010000B 01000010B,01010010B 01111110B,00111100B 15
16 01000010B,00010000B 01000010B,00010000B 01000010B,00010000B 01111110B,00111100B 01000010B,01010010B 01000010B,10010000B 01111110B,00010000B 01000000B,00010000B 00000000B,00010000B 00000000B,00000000B 00000000B,00000000B ; 科 00000001B,00100100B 00000000B,10100100B 01111111B,11111100B 00000000B,10100100B 00000101B,00100010B 00000100B,00100010B 00000100B,00000000B 00000100B,01000100B 00000100B,10001000B 00000101B,00010000B 00000100B,00000000B 01111111B,11111110B 00000100B,00000000B 00000100B,00000000B 00000000B,00000000B W12: 00000000B,00000000B ; 技 00100010B,00010000B 01000010B,00010000B 00111111B,11111110B
17 00000001B,00010000B 01000000B,10010000B 01000000B,00001000B 00100000B,10001000B 00100011B,10001000B 00010100B,10001000B 00001000B,11111110B 00010100B,10001000B 00100010B,10001000B 01000001B,10001100B 01000000B,00001000B 00000000B,00000000B 00000000B,00000000B ; 大 01000000B,00100000B 00100000B,00100000B 00010000B,00100000B 00001000B,00100000B 00000110B,00100000B 00000001B,10100000B 00000000B,01111110B 00000001B,10100000B 00000110B,00100000B 00001000B,00100000B 00010000B,00100000B 00100000B,00100000B 01000000B,00110000B 00000000B,00100000B 00000000B,00000000B 00000000B,00000000B ; 學 00001001B,00000000B 00001000B,01111100B 00001010B,10101010B 00001010B,10101010B 00001010B,10000000B 00101010B,11011010B 01001010B,10100100B
18 00111010B,11011010B 00001110B,10000000B 00001010B,10101010B 00001010B,10101010B 00001000B,11111110B 00001000B,10000000B 00001001B,10000000B 00000000B,00000000B W21: ;i 11111111B,11111111B 11111111B,11111111B 00000000B,00000000B ; 愛心 00000000B,11100000B 00000001B,11110000B 00000011B,11111000B 00000111B,11111000B 00001111B,11100000B 00011111B,11100000B 00111111B,11000000B 00111111B,11000000B
19 00011111B,11100000B 00001111B,11110000B 00000111B,11111000B 00000011B,11111000B 00000001B,11110000B 00000000B,11100000B 00000000B,00000000B 00000000B,00000000B ;Y 00000000B,00000010B 00000000B,00000100B 00000000B,00001000B 00000000B,00010000B 00000000B,00100000B 00000000B,01000000B 11111111B,10000000B 00000000B,10000000B 00000000B,01000000B 00000000B,00100000B 00000000B,00010000B 00000000B,00001000B 00000000B,00000100B 00000000B,00000000B 00000000B,00000000B W22: 00000000B,00000000B ;o 00000111B,11100000B
00001111B,11100000B 00000000B,00000000B 00000111B,11111000B ;u 00001000B,00000000B 00010000B,00000000B 00010000B,00000000B 00010000B,00000000B 00010000B,00000000B 00010000B,00000000B 00010000B,00000000B 00010000B,00000000B 00001000B,00000000B 00000111B,11111000B 00000000B,00000000B 00000000B,00000000B 00000000B,00000000B 00000000B,00000000B 00000000B,00000000B END 20
實驗結果可以顯示多種文字和圖形, 例如切換藍燈能顯示勤益科技大學, 切換紅燈能顯示我愛你, 用來告白使用, 另外接上太陽能板顯示充電情況,LED 亮代表現在正在充電 21
未來應用 視覺暫留時鐘 雨刷 結論 經由同學和老師互相合作下成功完成專題, 讓人學習到許多東西, 搖搖棒是市面上普及的東西, 但他的未來應用卻是無可限量, 例如視覺暫留雨刷在雨天時能讓他顯示標語左轉 右轉 待轉等等... 提醒用路人和駕駛人的安全, 視覺暫留時鐘也是個應用, 藉由這次專題能夠深入了解視覺暫留現象對生活的影響, 這些都要感謝老師和同學的努力 參考資料 楊明豐 (2016) 8051 入門 : 組合語言輕鬆學 勤益圖書館 翁明周 (2014) Android 與 8051 單晶片應用開發實務 勤益圖書館 盧正興 (2013) 8051 單晶片微電腦應用 勤益圖書館 視覺暫留維基百科 22