




已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
秒表-八位數(shù)碼管顯示1 ;* 2 ; 標(biāo)題: 秒表-八位數(shù)碼管顯示(匯編) 3 ; 作者: wentao 4 ; 5 ; 日期: 2007.3.3 6 ; 軟件: Keil A51 V8.00 7 ; 芯片: AT89X51 8 ; 說明: 實(shí)驗(yàn)板實(shí)測通過,數(shù)碼管為8位共陽 9 ; 聲明: 自用存檔!另僅供需要的朋友參考,請勿用做不道德轉(zhuǎn)載及商業(yè)用途! 10 ;* 11 12 dot_l equ 30h ;30單元存儲百分之一秒值 13 dot_h equ 31h ;31單元存儲十分之一秒值 14 sec_l equ 32h ;32單元存儲秒個(gè)位值 15 sec_h equ 33h ;33單元存儲秒十位值 16 min_l equ 34h ;34單元存儲分個(gè)位值 17 min_h equ 35h ;35單元存儲分十位值 18 hou_l equ 36h ;36單元存儲時(shí)個(gè)位值 19 hou_h equ 37h ;37單元存儲時(shí)十位值 20 21 dot equ 38h ;38單元為百分之一秒計(jì)數(shù)器(0.00s-0.99s) 22 sec equ 39h ;39單元為秒計(jì)數(shù)器(00s-59s) 23 min equ 40h ;40單元為分計(jì)數(shù)器(00m-59m) 24 hou equ 41h ;41單元為時(shí)計(jì)數(shù)器(00h-00h) 25 26 dis_b equ 42h ;dis_b(42單元)作為位碼選通數(shù)碼管 27 dis_r equ 43h ;dis_r(43單元)為取段碼時(shí)的偏移量 28 29 key_t equ 44h ;44單元為鍵按下的次數(shù)標(biāo)記 30 31 K bit p1.4 ;K鍵與P1.4相連 32 33 org 0000h 34 ajmp start 35 org 000bh ;定時(shí)器0的中斷入口地址 36 ajmp time0 ;跳到定時(shí)器0的中斷服務(wù)程序處 37 org 001bh ;定時(shí)器1的中斷入口地址 38 ajmp time1 ;跳到定時(shí)器1的中斷服務(wù)程序處 39 org 0030h 40 start: 41 mov p2,#0xff ;關(guān)所有數(shù)碼管 42 mov p1,#0xff ;p1為準(zhǔn)雙向口,作輸入時(shí)先寫1 43 44 mov dis_b,#0x7f ;初始選通P2.7口數(shù)碼管 45 mov dis_r,#0 ;初始化偏移量為0 46 mov dot,#0 ;百分之一秒計(jì)數(shù)器清零 47 mov sec,#0 ;秒計(jì)數(shù)清零 48 mov min,#0 ;分計(jì)數(shù)清零 49 mov hou,#0 ;時(shí)計(jì)數(shù)清零 50 mov key_t,#0 ;鍵按下次數(shù)清零 51 52 mov tmod,#00010001b ;定時(shí)/計(jì)數(shù)器0、1工作于方式1 53 mov th0,#0xd8 ;預(yù)置定時(shí)常數(shù)55536(d8f0),產(chǎn)生10ms時(shí)基信號 54 mov tl0,#0xf0 55 mov th1,#0xfc ;預(yù)置定時(shí)常數(shù)64536(fc18),產(chǎn)生1ms間隔用于動(dòng)態(tài)顯示 56 mov tl1,#0x18 57 58 setb ea ;開總中斷 59 setb et0 ;定時(shí)/計(jì)數(shù)器0允許中斷 60 setb et1 ;定時(shí)/計(jì)數(shù)器1允許中斷 61 clr tr0 ;關(guān)定時(shí)/計(jì)數(shù)器0 62 setb tr1 ;開定時(shí)/計(jì)數(shù)器1 63 64 lop: 65 jb K,lop ;鍵(P1.4)未按下則返回 66 lcall d_10ms ;延時(shí)10ms消抖 67 jb K,lop ;是抖動(dòng)則返回重新掃描 68 jnb K,$ ;等待鍵松開 69 lcall key_to ;調(diào)用鍵處理部分 70 ajmp lop ;循環(huán)顯示 71 72 key_to: ;鍵處理子程序 73 inc key_t ;鍵按下次數(shù)加1 74 mov a,key_t ;按下次數(shù)送入a 75 cjne a,#1,key_2 ;不是1次繼續(xù)檢測是否是第2次 76 setb tr0 ;第1次按下啟動(dòng)定時(shí)器0 77 ret 78 key_2: cjne a,#2,key_3 ;也不是2次繼續(xù)檢測是否是第3次 79 clr tr0 ;第2次按下關(guān)閉定時(shí)器0 80 ret 81 key_3: cjne a,#3,back ;也不為3則結(jié)束 82 mov dot,#0 ;第3次按下將四個(gè)計(jì)數(shù)器清零 83 mov sec,#0 84 mov min,#0 85 mov hou,#0 86 mov key_t,#0 ;按鍵次數(shù)清零 87 back: ret 88 ;- 89 time0: ;定時(shí)器0中斷服務(wù)程序 90 push psw ;保護(hù)現(xiàn)場 91 push acc 92 93 inc dot ;百分之一秒計(jì)數(shù)器加1 94 mov a,dot ;計(jì)數(shù)器值送入a 95 cjne a,#100,over ;未計(jì)到100則返回繼續(xù)計(jì)數(shù) 96 mov dot,#0 ;計(jì)到100后清零 97 inc sec ;秒計(jì)數(shù)器加1(進(jìn)位10ms*100=1s) 98 mov a,sec ;秒計(jì)數(shù)值送入a 99 cjne a,#60,over ;未計(jì)到60則返回繼續(xù)計(jì)數(shù) 100 mov sec,#0 ;計(jì)到60后秒計(jì)數(shù)器清零 101 inc min ;分計(jì)數(shù)器加1(進(jìn)位60s=1m) 102 mov a,min ;分計(jì)數(shù)值送入a 103 cjne a,#60,over ;未計(jì)到60則返回繼續(xù)計(jì)數(shù) 104 mov min,#0 ;計(jì)到60后分計(jì)數(shù)器清零,重新計(jì)時(shí) 105 inc hou ;時(shí)計(jì)數(shù)器加1(進(jìn)位60m=1h) 106 mov a,hou ;時(shí)計(jì)數(shù)器送入a 107 cjne a,#100,over ;未計(jì)到100則返回繼續(xù)計(jì)數(shù) 108 mov hou,#0 ;計(jì)到100后清零 109 110 over: mov th0,#0xd8 ;重置定時(shí)常數(shù) 111 mov tl0,#0xf0 112 pop acc ;恢復(fù)現(xiàn)場 113 pop psw 114 reti ;中斷返回 115 ;- 116 time1: ;定時(shí)器1中斷服務(wù)程序 117 push psw ;保護(hù)現(xiàn)場 118 push acc 119 push b 120 ;以下是百分之一秒計(jì)數(shù)器值個(gè)位十位分開 121 mov a,dot ;百分之一秒計(jì)數(shù)器值送入a(被除數(shù)) 122 mov b,#10 ;除數(shù)10送入b 123 div ab ;a除以b 124 mov dot_l,b ;余數(shù)b(百分之一秒值)送入百分之一秒存儲單元 125 mov dot_h,a ;商a(十分之一秒值)送入十分之一秒存儲單元 126 ;以下是秒計(jì)數(shù)器值個(gè)位十位分開 127 mov a,sec ;秒計(jì)數(shù)器值送入a(被除數(shù)) 128 mov b,#10 ;除數(shù)10送入b 129 div ab 130 mov sec_l,b ;余數(shù)b(秒個(gè)位值)送入秒個(gè)位存儲單元 131 mov sec_h,a ;商a(秒十位值)送入秒十位存儲單元 132 ;以下是分計(jì)數(shù)器值個(gè)位十位分開 133 mov a,min ;分計(jì)數(shù)器值送入a(被除數(shù)) 134 mov b,#10 ;除數(shù)10送入b 135 div ab 136 mov min_l,b ;余數(shù)b(分個(gè)位值)送入分個(gè)位存儲單元 137 mov min_h,a ;商a(分十位值)送入分十位存儲單元 138 ;以下是時(shí)計(jì)數(shù)器值個(gè)位十位分開 139 mov a,hou ;時(shí)計(jì)數(shù)器值送入a(被除數(shù)) 140 mov b,#10 ;除數(shù)10送入b 141 div ab 142 mov hou_l,b ;余數(shù)b(小時(shí)個(gè)位值)送入時(shí)個(gè)位存儲單元 143 mov hou_h,a ;商a(小時(shí)十位值)送入時(shí)十位存儲單元 144 145 mov dptr,#table ;數(shù)碼管段碼表首址送入dptr 146 147 mov a,#dot_l ;取百分之一秒值的地址 148 add a,dis_r ;基址+偏移量 149 mov r0,a ;R0為欲顯示值的地址 150 mov a,r0 ;取欲顯示值送入a 151 ; dis_r : 0 1 2 3 4 5 6 7 152 ;對應(yīng)單元: dot_l dot_h sec_l sec_h min_l min_h hou_l hou_h 153 movc a,a+dptr ;取對應(yīng)值的段碼 154 mov p2,dis_b ;位碼送入P2口 155 156 mov r0,dis_b ;取位碼判斷是否為需加小數(shù)點(diǎn)的位liuwentao 157 cjne r0,#0xdf,b3 ;不是P2.5再判斷是否為P2.3 158 ajmp add_dot ;是P2.5則段碼加上小數(shù)點(diǎn)顯示 159 b3: cjne r0,#0xf7,b1 ;也不是P2.3再判斷是否為P2.1 160 ajmp add_dot ;是P2.3則段碼加上小數(shù)點(diǎn)顯示 161 b1: cjne r0,#0xfd,com ;也不是P2.1則正常送段碼 162 163 add_dot: anl a,#0x7f ;是P2.5,P2.3,P2.1則段碼和7f做與操作使對應(yīng)位顯示小數(shù)點(diǎn) 164 com: mov p0,a ;段碼送入P0口 165 166 inc dis_r ;偏移量加1,下次中斷時(shí)顯示下個(gè)數(shù) 167 anl dis_r,#0x07 ;dis_r增到8時(shí)自動(dòng)清0(使之在0到7間循環(huán)) 168 169 mov a,dis_b ;位碼循環(huán)右移,下次中斷時(shí)選通下個(gè)數(shù)碼管 170 rr a 171 mov dis_b,a 172 173 mov th1,#0xfc ;重置定時(shí)常數(shù) 174 mov tl1,#0x18 175 176 pop b 177 pop acc ;恢復(fù)現(xiàn)場 178 pop psw 179 reti 180 181 d_10ms: mov r5,#20 ;1+(1+2*255)*20+2*20=10.261ms12M 182 temp1: mov r6,#255 ;1+2*255 183 djnz r6,$ 184 djnz r5,temp1 185 ret 186 187 table: db 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf ;段碼表 188 ; 0 1 2 3 4 5 6 7 8 9 - 對應(yīng)內(nèi)容 189 190 end 191 /* 192 * 標(biāo)題: 八位數(shù)碼管顯示(C51) 193 * 作者: wentao 194 195 * 日期: 2007.3.3 196 * 軟件: Keil C51 V8.02 197 * 芯片: AT89X51 198 * 說明: 實(shí)驗(yàn)板實(shí)測通過,數(shù)碼管為8位共陽 199 * 聲明: 自用存檔!另僅供需要的朋友參考,請勿用做不道德轉(zhuǎn)載及商業(yè)用途! 200 */ 201 202 #include 203 #include 204 #define uchar unsigned char 205 206 void delay_ms(uchar ms); / 延時(shí)毫秒12M,ms最大值255 207 void key_scan(); / 按鍵掃描 208 void key_to(); / 按鍵處理 209 210 uchar code dis_code11 = 0xc0,0xf9,0xa4,0xb0,0x99, /段碼表 211 / 0 1 2 3 4 對應(yīng)內(nèi)容 212 0x92,0x82,0xf8,0x80,0x90,0xbf; 213 / 5 6 7 8 9 - 214 215 uchar data dis8; / dis0為百分之一秒值,dis1為十分之一秒值 216 / dis2為秒個(gè)位值,dis3為秒十位值 217 / dis4為分個(gè)位值,dis5為分十位值 218 / dis5為時(shí)個(gè)位值,dis6為時(shí)十位值 219 220 uchar data dot = 0; / 百分之一秒計(jì)數(shù)器(0.00s-0.99s) 221 uchar data sec = 0; / 秒計(jì)數(shù)器(00s-59s) 222 uchar data min = 0; / 分計(jì)數(shù)器(00m-59m) 223 uchar data hou = 0; / 時(shí)計(jì)數(shù)器(00h-99h) 224 225 uchar data dis_b; / dis_b為位碼選通數(shù)碼管 226 uchar data dis_r; / dis_r為取段碼時(shí)的偏移量 227 228 uchar data key_t = 0; / 按鍵次數(shù),初始為0 229 230 sbit K = P14; / K鍵與P1.4相連 231 232 void main() 233 234 P2 = 0xff; / 關(guān)所有數(shù)碼管 235 P1 = 0xff; / p1為準(zhǔn)雙向口,作輸入時(shí)先寫1 236 dis2 = 10; / -在段碼表中偏移量為10 237 dis5 = 10; / -在段碼表中偏移量為10 238 dis_b = 0x7f; / 初始選通P2.7口數(shù)碼管 239 dis_r = 0; / 初始化偏移量為0 240 241 TMOD = 0x11; / 定時(shí)/計(jì)數(shù)器0,1工作于方式1 242 TH0 = 0xd8; / 預(yù)置定時(shí)常數(shù)55536(d8f0),產(chǎn)生10ms時(shí)基信號 243 TL0 = 0xf0; 244 TH1 = 0xfc; / 預(yù)置定時(shí)常數(shù)64536(fc18),產(chǎn)生1ms間隔用于動(dòng)態(tài)顯示 245 TH1 = 0x18; 246 EA = 1; / 開總中斷 247 ET0 = 1; / 定時(shí)/計(jì)數(shù)器0允許中斷 248 ET1 = 1; / 定時(shí)/計(jì)數(shù)器1允許中斷 249 TR0 = 0; / 關(guān)閉定時(shí)/計(jì)數(shù)器0 250 TR1 = 1; / 啟動(dòng)定時(shí)/計(jì)數(shù)器1 251 while(1) 252 253 if(K != 1) / 有鍵按下 254 255 delay_ms(10); / 延時(shí)10ms去抖 256 if(K != 1) / 確定是有鍵按下 257 258 while(K != 1); / 等待鍵松開 259 key_to(); / 按鍵處理 260 261 262 263 264 void key_to() / 按鍵處理子程序 265 266 key_t+; / 按鍵次數(shù)加1 267 if(key_t = 1) / 第一次按下 268 TR0 = 1; / 啟動(dòng)定時(shí)器0 269 else 270 271 if(key_t = 2) / 第二次按下 272 TR0 = 0; / 關(guān)閉定時(shí)器0 273 else 274 275 if(key_t = 3) / 第三次按下 276 277 dot = 0; / 四個(gè)計(jì)數(shù)器清零 278 sec = 0; 279 min = 0; 280 hou = 0; 281 key_t = 0; / 按鍵次數(shù)清零 282 283 284 285 286 287 void tiem0(void) interrupt 1 / T/C0中斷服務(wù)程序(產(chǎn)生10ms時(shí)基信號) 288 289 dot+; / 百分之一秒計(jì)數(shù)器加1 290 if(dot = 100) / 計(jì)數(shù)值到100 291 292 dot = 0; / 清零 293 sec+; / 秒計(jì)數(shù)器加1(進(jìn)位10ms*100=1s) 294 if(sec = 60) / 秒計(jì)數(shù)值到60 295 296 sec = 0; / 秒計(jì)數(shù)器清零 297 min+; / 分計(jì)數(shù)器加1(進(jìn)位60s=1m) 298 if(min = 60) / 分計(jì)數(shù)到60 299 300 min = 0; / 分計(jì)數(shù)器清零 301 hou+; / 時(shí)計(jì)數(shù)器加1(進(jìn)位60m=1h) 302 if(hou = 100) / 時(shí)計(jì)數(shù)器到100 303 hou = 0; / 時(shí)計(jì)數(shù)器清零 304 305 306 307 TH0 = 0xd8; / 重置定時(shí)常數(shù) 308 TL0 = 0xf0; 309 310 void time1(void) interrupt 3 / T/C1中斷服務(wù)程序(延時(shí)1ms數(shù)碼管動(dòng)態(tài)顯示) 311 312 uchar data t = 0; / 段碼臨時(shí)變量 313 314 dis0 = dot % 10; / 百分之一秒計(jì)數(shù)器個(gè)位分離出來賦紿dis0 315 dis1 = dot / 10; / 百分之一秒計(jì)數(shù)器十位分離出來賦紿dis1 316 dis2 = sec % 10; / 秒計(jì)數(shù)器個(gè)位賦紿
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025江蘇揚(yáng)州大數(shù)據(jù)集團(tuán)子公司管理人員招聘1人筆試備考題庫及完整答案詳解1套
- 2025江蘇揚(yáng)州寶應(yīng)縣“鄉(xiāng)村振興青年人才”招聘67人筆試模擬試題含答案詳解
- 2025江蘇宿遷市泗陽縣招聘鄉(xiāng)村醫(yī)生27人筆試備考試題含答案詳解
- 2025廣西來賓市招聘鄉(xiāng)村振興專員221人筆試備考題庫含答案詳解
- 2025年鄂爾多斯市公務(wù)員考試行測真題附答案詳解(完整版)
- 期末試卷(四)(含答案含聽力原文無聽力音頻)-2024-2025學(xué)年人教PEP版英語(新教材)三年級下冊
- 四川省2024-2025學(xué)年高二上學(xué)期12月學(xué)情檢查(聯(lián)考)物理試題(解析版)
- 四川省成都市2024-2025學(xué)年高三上學(xué)期開學(xué)摸底聯(lián)考物理試卷
- 炸雞店的未來發(fā)展趨勢與展望
- 房地產(chǎn)項(xiàng)目的運(yùn)營管理策略
- 畜牧業(yè)的生物安全與疫情防控
- 國開電大可編程控制器應(yīng)用實(shí)訓(xùn)形考任務(wù)5
- 關(guān)于皮膚科藥物知識講座
- 【小學(xué)心理健康教育分析國內(nèi)外文獻(xiàn)綜述4100字】
- 辦公室主任聘用合同
- 備戰(zhàn)中考生物專項(xiàng)練習(xí)題-心臟和血液循環(huán)(全國通用-含答案)-
- 焊接施工流程圖
- 阜陽混凝土框架結(jié)構(gòu)高層住宅項(xiàng)目實(shí)體檢驗(yàn)及材料送檢專項(xiàng)方案
- 心內(nèi)科用藥安全管理課件
- 2023年江蘇省無錫市梁溪區(qū)小升初語文試卷
- 2023年貴州省六盤水市鐘山區(qū)數(shù)學(xué)六下期末達(dá)標(biāo)檢測試題含解析
評論
0/150
提交評論