图8-2数码管外形 图8-1 数码管 |
图8-3 MCU与4连排8段数码管的连接 |
图8-4 数码管LED显示流程图(及其中断子程序) |
数码管LED显示的主程序部分代码 |
…… MainInit:: //复位后程序从此开始执行 //系统初始化 SEI //关中断 //1.堆栈初始化为RAM最高端 LDHX #RAMEndAddr //HX=#RAMEndAddr TXS //HX-1->SP //2.系统初始化 JSR MCUInit //初学时跳过此处 //3.串行口初始化 JSR SCIInit //4.定时器1初始化 JSR Timer1Init //调定时器1初始化子程序 BSET #5,SCC2 //设置接收中断允许 CLI //开中断 //LED口初始化 LDA #0xff STA LEDdata_D //数据口为输出到LED STA LEDcs_D //位选口为输出到LED //给Time[0-2]"时分秒"赋初值0、0、0 (?多一个0-1即可) LDA #$0 STA Time STA Time+1 STA Time+2 //程序总循环入口 MainLoop: //LEDbuf[0-3]中放入要显示的数字 //分 LDA Time+1 CLRH LDX #10 DIV STA LEDbuf PSHH PULA STA LEDbuf+1 //秒 LDA Time+2 CLRH LDX #10 DIV STA LEDbuf+2 PSHH PULA STA LEDbuf+3 //在4位共阴极LED上显示LEDbuf中的4个数据(只允许0-9) MOV #%11111110,I1 //初始位选信号(共阴极情况) //MOV #4,I2 //显示个数 AIS #-1 LDA #4 STA 1,SP LDHX #LEDbuf LEDShow: PSHH //保护数据地址 PSHX LDX ,X //数据 LDA I1 //位选信号 JSR LEDShow1 //显示一个数据 LDA I1 //变动位选信号 SEC ROLA STA I1 //延时 LDHX #10 JSR Delay_ms PULX //恢复数据地址 PULH AIX #1 //指向下一个数据 DBNZ 1,SP,LEDShow AIS #1 JMP MainLoop …… |
数码管LED显示的中断子程序部分代码 |
…… //Timer1Int:定时器1溢出中断子程序----------------------* //功能:给内存单元Time[0-2](时分秒)赋值 * //入口:无 * //出口:无 * //--------------------------------------------------------------------* Timer1Int:: SEI //关总中断 PSHH //保护H INC Time+2 //秒数加1 LDA Time+2 CMP #60 BNE Timer1Int_1 //秒数未增加到60,转 LDA #0 //秒数增加到60,清0 STA Time+2 INC Time+1 //分钟数加1 LDA Time+1 CMP #60 BNE Timer1Int_1 //分钟数未增加到60,转 LDA #0 //分钟数增加到60,清0 STA Time+1 INC Time //小时数加1 LDA Time CMP #24 BNE Timer1Int_1 //小时数未增加到24,转 LDA #0 //小时数增加到24,清0 STA Time Timer1Int_1: LDA T1SC BCLR #TOFBit,T1SC //清除定时器溢出标志位 PULH //恢复H CLI //开总中断 喋血黑谷体外诊断 RTI //SCIRecINT:SCI接收中断子程序---------------------------* //功能:接收3字节基准时分秒放入内存单元Time[0-2] * //入口:无 * //出口:Time[0-2] * //---------------------------------------------------------------------* SCIRecINT:: SEI //关总中断 PSHH //保护H LDA #$03 LDHX #Time JSR SCIReN //接收3字节数据 PULH //恢复H CLI //开总中断 RTI //中断返回 …… |
数码管LED显示的主程序部分代码 |
…… //主函数 void main() { INT8U i,j; DisMCUInt(); //禁止总中断 MCUInit(); //芯片初始化 SCIInit(); //串行口初始化 Timer1Init(); //定时器初始化 EnSCIReInt(); //开放SCI接收中断 EnT1OverflowInt(); //开放Timer1溢出中断 T1SC &= ~(1<<TSTOPBit); //允许定时器1计数 EnMCUInt(); //开放总中断 职高数学 LEDdata_D = 0xff; //数据口为输出 LEDcs_D = 0xff; //位选口为输出 //给时分秒赋值初始化 time[0] = 0; //时 time[1] = 0; //分 time[2] = 0; //秒 雷锋精神伴我成长 while(1) { //LED显示分和秒 winkie LEDShowNum(0,time[1] / 10); for(j=0;j<250;j++); //延时 LEDShowNum(1,time[1] % 10); 听诊器古今谈 for(j=0;j<250;j++); //延时 LEDShowNum(2,time[2] / 10); for(j=0;j<250;j++); //延时 LEDShowNum(3,time[2] % 10); for(j=0;j<250;j++); //延时 } } |
本文发布于:2024-09-23 10:15:11,感谢您对本站的认可!
本文链接:https://www.17tex.com/xueshu/173622.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |