1、 课程名称: 单片机原理与接口技术课程设计 设计题目: 多位数码管循环显示 院 系: 机电工程学院 班 级: 2010 级电气工程及其自动化专业 出勤 实践 报告 总分 一:设计方案描述与论证 本次课程设计将会设计一个多位数码管显示的系统,在系统中用到的主要原件有 PIC16F877A 单片机一个,数码管四个。在单片机最小系统焊接完成以后,选择将数码管的 位选接在单片机的 RB1,RB2,RB3,RB4 口(由于 RB0 为 INT 外部触发中断的输入引脚, 故在此没有占用) ,将数码管的段选接在单片机 D 口。设置方向寄存器,B口的位 1,位 2, 位 3,位 4 设置为输出,D 口设置为全
2、输出。当 RB1,RB2,RB3,RB4 都输出 1 时,就可 以点亮四个数码管。在 D 口输出需要显示的数即可在数码管显示出数字。在显示延时后对 数进行自动加 1 即可完成对 09999 的循环显示。 二:硬件设计部分 硬件电路 工作原理 B 口的 1,2,3,4 位为为选位,D 口为段选,方向寄存器 TRISB 写 B00011110 ,TRISD 写 01H,即是 B 口 1,2,3,4 和 D 口都为输出。PROTB输出 1 时就可以把四个数码管点亮,需要 输出的数写入 D 口即可。 三;软件设计部分 程序流程框图 开始 设置方向寄存器 点亮数码管 变量清零 主程序 显示 个位加 1
3、个位是否为 10 调用十位进 1 程序 十位是否为 10 调用百位进 1 程序 百位是否为 10 调用千位进 1 程序 千位是否为 10 延时 延时 显示 延时 显示 延时 显示 十位进一 百位进一 千位进一 查表程序 延时程序 源程序: list p=16f877A ; list directive to define processor #include ; processor specific variable definitions _CONFIG _CP_OFF * V ARIABLE DEFINITIONS w_temp EQU 0x71 ; variable used for c
4、ontext saving status_temp EQU 0x72 ; variable used for context saving GE EQU 0x40 SHI EQU 0x41 BAI EQU 0x42 QIAN EQU 0X43 JIANGE EQU 0x44 个位清零 十位加一 返回 十位清零 百位加一 返回 百位清零 千位加一 返回 W 加 PCL 带 0 返回 带 9 返回 30H的数减1为零间跳 31H 的数减 1 为 0 间跳 返回 . ;* ORG 0x000 ; processor reset vector clrf PCLA TH ; ensure page bi
5、ts are cleared goto MAIN ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STA TUS,w ; move status register into W register movwf status_temp ; save off contents of STA TUS register ; isr code can go here or be located as a call subroutine elsewhere movf status_temp,w ; retrieve copy of STA TUS register movwf STA TUS ; restore pre-isr STA TUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt MAIN ; remainin