大学单片机课程设计(999999显示与出租车计费器_包含汇编与c语言)(编辑修改稿)内容摘要:

04H。 位选 5 (Y5) ,十位数码管打开 MOV P0,A。 送十位数据 ACALL DELAY MOV A,B MOVC A,@A+DPTR MOV P2,05H。 位选 6(Y6) ,个位数码管打开 MOV P0,A。 送个位数据 ACALL DELAY RET DELAY: MOV R5,01H。 延时 1ms ,晶振 6MHz LOOP1: MOV R6,248 DJNZ R6,$ DJNZ R5,LOOP1 RET SEGTAB: DB 3FH,06H,5BH,4FH,66H。 0,1,2,3,4 ;共阴极 LED 数码管的段码表 DB 6DH,7DH,07H,7FH,6FH。 5,6,7,8,9 END ( C 语言),用共阴极数码管 include include define uint unsigned int define uchar unsigned char uchar bai,shi,ge,shiwan,qian,wan。 uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}。 //段码表 void delay(uint z)。 unsigned long temp。 //定义要显示的数为无符号长整形(范围: 0 到 2 的 32 次方减 1) void main() { TMOD=0x06。 //0000 0110 T0 计数模式,工作方式 2( 8 位,自动重装初值) TH0=255。 TL0=255。 //赋初值 255,来一个脉冲直接溢出 TR0=1。 //开定时计数器 T1(用的是查询方式,总中断不用开 ) P0=0x00。 temp=0。 //数码管初值 while(1) //一直在 while 里面循环 { if(TF0==1) { temp=temp+1。 //加计数 if(temp999999) temp=0。 TF0=0。 //溢出标志位 TF0 清 0 } shiwan=temp/100000。 wan=temp%100000/10000。 qian=temp%10000%10000/1000。 bai=temp%10000%10000%1000/100。 shi=temp%10000%10000%1000%100/10。 ge=temp%10。 P2=0xf0。 //位选 (十万位) P0=table[shiwan]。 //段选 delay(1)。 //延时 1MS P0=0x00。 //段选全关 ,消影,防止乱码 P2=0xf1。 P0=table[wan]。 delay(1)。 P0=0x00。 P2=0xf2。 P0=table[qian]。 delay(1)。 P0=0x00。 P2=0xf3。 P0=table[bai]。 delay(1)。 P0=0x00。 P2=0xf4。 P0=table[shi]。 delay(1)。 P0=0x00。 P2=0xf5。 P0=table[ge]。 delay(1)。 P0=0x00。 } } void delay(uint z) //延时 zMS { uint x,y。 for(x=z。 x0。 x) for(y=110。 y0。 y)。 } (汇编) ORG 0000H LJMP MAIN ORG 000BH LJMP L1 ORG 0030H MAIN: MOV 70H,0。 给段码显示缓冲区清 0 MOV 71H,0 MOV 72H,0 MOV 73H,0 MOV 74H,0 MOV 75H,0 MOV TMOD,06H。 计数模式,工作方式 2(自动重装初值) MOV TH0,255。 赋初值 255,每来一个脉冲就会溢出,即 TF1=1,数码管显示(计数)加 1 MOV TL0,255。 TF1 清 0 后,又自动赋初值 255 SETB TR0。 开 T1 定时 /计数器 L1:。 采用查询方式中断, TF1 软件清 0,总中断不能开 JNB TF1,L3。 判断计数溢出标志位 TF1,若 TF1=0(无溢出),则转到 L3 CLR TF1。 若 TF1=1(溢出),则清 0 LCALL COUNT。 调 用 COUNT L3: LCALL DISPLAY SJMP L1 COUNT:。 计数加 1 程序 MOV R1,70H。 R170H L2: INC @R1。 (R1)中的内容加 1 CJNE @R1,10,BTOM。 判断 ,若 ((R1))不等于 10,转到 BOTM MOV @R1,0。 若 ((R1))=10,即产生进位,则清 0 INC R1。 进位保存在下一个单元中 CJNE R1,76H,L2。 判断是否计满 999999,最高位(十万位) 75H 是否产生进位,若( R1)不等于 76H,转回 L2 MOV R1,70H。 若最高位(十万位) 75H 是否产生进位,即( R1) =76H,则重新 R170H BTOM: RET DISPLAY: MOV R0,70H。 显示缓冲区首地址送 R0 MOV R3,0。 位选码首地址清 0 MOV DPTR,SEG。 DPTR 指向字型码表的首地址 L4: MOV A,@R0。 取出要显示的数 MOVC A,@A+DPTR。 取出 显示码 MOV P2,R3。 位选输出到 P2 MOV P0,A。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。