一、求按時服藥單片機語音提醒器的設計與制作的c語言程序
;我是從電子制作實驗室網站上改編的,電路圖是51單片機試驗板的電路圖,只要保留P1.0的LED、4位撥碼按鈕、蜂鳴器、K1、K2開關、顯示電路、穩壓電路和單片機最小系統就行了;可設定時間的倒計時定時器,可選擇5/15/20/30/35/45/50分鐘倒計時;倒計時時間由四位撥碼開關的2/3/4位來控制,;第2位表示5分鐘,第3位表示15分鐘,第4位表示30分鐘,;通過不同的組合可以產生5/15/20/30/35/45/50分鐘倒計時;P1.0口的外接的發光二極管為狀態LED,定時未開始時LED常亮,定時過程中LED閃爍;K1為開始按鈕,K2為停止按鈕a_bit equ 20h ;數碼管個位數存放內存位置b_bit equ 21h ;數碼管十位數存放內存位置temp equ 22h ;計數器數值存放內存位置;開機初始化MOV P3,#0FFH;對P3口初始化,設置為高電平,用于按鍵輸入MOV P0,#0FFH;使顯示時間數碼管熄滅CLR P1.0;點亮LED指示燈;等待鍵盤輸入START:JB P3.6,$;循環判斷開始按鈕K1是否按下?ACALL DELAY10;延時10毫秒觸點消抖JB P3.6,START;如果是干擾就返回JNB P3.6,$;等待按鍵松開;讀撥碼開關的狀態,獲得倒計時時間SET:MOV A,#0;首先對A清零JB P2.0,A1;判斷撥碼開關的第2位是否接通,接通就對A加5(此處數值可自行修改)ADD A,#5A1:JB P2.1,A2;判斷撥碼開關的第3位是否接通,接通就對A加15(此處數值可自行修改)ADD A,#15A2:JB P2.2,A3;判斷撥碼開關的第4位是否接通,接通就對A加30(此處數值可自行修改)ADD A,#30A3:MOV TEMP,A;這時TEMP中的值就是倒計時時間;數碼管顯示定時時間的程序display:CLR P2.4;使繼電器1釋放,開始定時(開機時繼電器處于吸合狀態)(既然你是比賽用倒計時提醒器就不需要繼電器,可以忽略)CLR P2.3;使繼電器2釋放,開始定時(開機時繼電器處于吸合狀態)MOV R2,#120AB:MOV R3,#250TIME1:mov a,temp ;將temp中的十六進制數轉換成10進制 mov b,#10 ;10進制/10=10進制div abmov b_bit,a ;十位在amov a_bit,b ;個位在bmov dptr,#numtab ;指定查表啟始地址mov r0,#4 dpl1: mov r1,#250 ;dplop: mov a,a_bit ;取個位數MOVC A,@A+DPTR ;查個位數的7段代碼mov p0,a ;送出個位的7段代碼clr p2.7 ;開個位顯示ACALL DELY1;顯示1毫秒setb p2.7;關閉個位顯示,防止鬼影mov a,b_bit ;取十位數MOVC A,@A+DPTR ;查十位數的7段代碼mov p0,a ;送出十位的7段代碼clr p2.6 ;開十位顯示ACALL DELY1;顯示1毫秒setb p2.6;關閉十位顯示,防止鬼影;插入一段判斷定時過程中是否有按鍵輸入的程序段C1:JB P3.6,B1ACALL DELAY10;延時10毫秒消抖JB P3.6,C1JNB P3.6,$;等待按鍵松開AJMP SETB1:JB P3.7,M33ACALL DELAY10;延時10毫秒消抖JB P3.7,B1JNB P3.7,$;等待按鍵松開AJMP OVERM33:djnz r3,TIME1 ;2毫秒循環執行250次,時間約0.5秒CPL P1.0;使LED每1秒閃爍一次djnz r2,AB ;循環執行120次,時間為1分鐘DEC TEMP;滿一分鐘對定時時間減1MOV A,TEMPJNZ DISPLAY;判斷TEMP的數值是否為0?不為0循環 ;結束定時OVER:CLR P1.0;LED指示燈常亮SETB P2.4;繼電器1吸合,定時結束,退回到開機時的狀態SETB P2.3;繼電器2吸合,定時結束,退回到開機時的狀態SETB P2.5;你要提醒器所以我給你在定時時間到時喇叭鳴叫,當然你還可以自定義一些提醒方式ACALL DELAY10;ACALL DELAY10;ACALL DELAY10;ACALL DELAY10;ACALL DELAY10;AJMP START;退到開機初始化狀態;1毫秒延時子程序DELY1:MOV R4,#2D1:MOV R5,#248DJNZ R5,$DJNZ R4,D1RET;10毫秒延時子程序DELAY10:MOV R4,#20D2:MOV R5,#248DJNZ R5,$DJNZ R4,D2RET;實驗板上的7段數碼管0~9數字的共陰顯示代碼numtab: DB 0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBHend。