2022年单片机计时秒表程序方案设计书.docx

上传人:Che****ry 文档编号:12869088 上传时间:2022-04-26 格式:DOCX 页数:15 大小:45.73KB
返回 下载 相关 举报
2022年单片机计时秒表程序方案设计书.docx_第1页
第1页 / 共15页
2022年单片机计时秒表程序方案设计书.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《2022年单片机计时秒表程序方案设计书.docx》由会员分享,可在线阅读,更多相关《2022年单片机计时秒表程序方案设计书.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品学习资源pic 单片机计时秒表程序设计时钟显示范畴 00.00 99.99 秒,辨论度为0.01 秒作者:来源:本站原创点击数:1676更新时间: 2021 年 07 月 12 日/ 此程序实现计时秒表功能,时钟显示范畴00.00 99.99 秒,辨论度 :0.01 秒#include p18f458.hunsigned char s4 ; /定义 0.01 秒、 0.1 秒、 1 秒、 10 秒计时器unsigned char k, data, sreg;unsigned int i ;const table11=0xc0 , 0xf9 , 0xa4, 0xb0 , 0x99 , 0x9

2、2, 0x82, 0XD8 , 0x80 ,0x90 ;/不带小数点的显示段码表const table010=0X40 , 0X79 , 0X24 , 0X30 , 0X19 , 0X12 , 0X02 ,0X78 , 0X00 , 0X10 ;/带小数点的显示段码表void clkintvoid;/TMR0 初始化子程序void tmintT0CON=0XCF ; / 设定 TMR0L 工作于 8 位定时器方式/内部时钟, TMR0 不用分频INTCON=0X20 ; /总中断禁止, TMR0 中断答应,清除 TMR0 的中断标志INTCON2bits.TMR0IP=1; /TMR0 中断高

3、优先级RCONbits.IPEN=1 ; /使能中断优先级/系统其它部分初始化子程序void initialTRISA=0x00 ; /A 口设置为输出TRISB=0XF0 ; /RB1 输出, RB4 输入TRISC=0x00 ; /SDO 引脚为输出, SCK 引脚为输出欢迎下载精品学习资源TRISE=0x00 ; /E 口设置为输出SSPCON1=0x30 ; /SSPEN=1 ;CKP=1 , FOSC/4SSPSTAT=0xC0 ; / 时钟下降沿发送数据PIR1=0 ; /清除 SSPIF 标志 data=0X00 ; /待显示的寄存器赋初值PORTBbits.RB1=0 ;POR

4、TAbits.RA3=0 ;PORTE=0; / 将 K1 ,K2 ,K3 , K4 四条列线置 0/SPI 传输数据子程序void SPILEDchar dataSSPBUF=data; /启动发送do;whilePIR1bits.SSPIF=0;PIR1bits.SSPIF=0 ;/显示子程序,显示4 位数void dispalyPORTAbits.RA5=0 ; / 预备锁存fork=0 ;k4 ;k+data=sk ;ifk=2 data=table0data ; / 个位需要显示小数点else data=tabledata ;SPILEDdata ; /发送显示段码fork=0 ;k

5、4 ;k+data=0xFF;SPILEDdata ; /连续发送 4 个 DARK ,使显示好看一些欢迎下载精品学习资源PORTAbits.RA5=1 ; / 最终给锁存信号,代表显示任务完成/软件延时子程序void DELAYfori = 3553 ; -i ; continue;/键扫描子程序void KEYSCANwhile1dispaly ; / 调用一次显示子程序whilePORTBbits.RB4=0DELAY ; /如有键按下,就软件延时break;if PORTBbits.RB4=0 break; /如仍有键按下,就终止循环扫描,返回/等键松开子程序void keyrelax

6、while1dispaly ; / 调用一次显示子程序if PORTBbits.RB4=1 break; /为防止按键过于灵敏,每次等键松开才返回/* 高优先级中断向量*/欢迎下载精品学习资源#pragma code InterruptVectorHigh=0x08 void InterruptVectorHigh void_asmgoto clkint / 跳到中断程序_endasm/中断服务程序#pragma code #pragma interrupt clkint void clkintTMR0=0X13 ; / 对 TMR0 写入一个调整值;由于写入TMR0 后接着的/两个周期不能增

7、量,中断需要3 个周期的响应时间,/以及 C 语言自动进行现场爱护要消耗周期INTCONbits.T0IF=0; /清除中断标志sreg=sreg+1; / 中断计数器加 1ifsreg=40 / 中断次数为 40 后,才对 S0, S1, S2, S3 操作sreg=0;s0=s0+1 ;ifs0=10s0=0 ;s1=s1+1 ;ifs1=10s1=0 ;s2=s2+1 ;ifs2=10s2=0 ;s3=s3+1 ;ifs3=10 s3=0;欢迎下载精品学习资源/主程序/供应此单片机程序有问题请联系maintmint ; /TMR0 初始化initial ; /spi 显示初始化及系统其它

8、部分初始化INTCONbits.GIE=0; /总中断禁止while1fork=0 ;k4 ;k+sk=0 ;sreg=0; /赋显示初值dispaly ; / 调用一次显示子程序KEYSCAN ; / 键扫描,直到开头键按下keyrelax ; / 等键松开INTCONbits.GIE=1; /总中断答应KEYSCAN ; / 键扫描直到停止键按下,在键扫描时有显示keyrelax ; / 等键松开INTCONbits.GIE=0; /总中断禁止KEYSCAN ; / 键扫描到清 0 键按下,在键扫描时有显示keyrelax ; / 等键松开-汇编语言版本的pic 单片机计时秒表程序设计-;

9、此程序实现计时秒表功能;时钟显示范畴: 00.00 秒-99.99 秒,辨论度: 0.01 秒;通过按键来启动计时、停止计时及清0;即第一次按下任意键开头计时,其次次按下任意键停止计时;第三次按下任意键使LED欢迎下载精品学习资源清 0,等待下一次计时开头LIST P=18F458 INCLUDE P18F458.INCS0 EQU 0X20 ;0.01 秒计时器S1 EQU S0+1 ;0.1 秒计时器S2 EQU S0+2 ;1 秒计时器S3 EQU S0+3 ;10 秒计时器SREG EQU S0+4 ;软计数器LEDF EQU S0+5;显示的 LED 的位置指示寄存器XW_TEMP

10、EQU S0+6;用于中断中爱护W 的值XHOSTS EQU S0+7 ;用于中断中爱护STATUS 的值DEYH EQU S0+8DEYL EQU S0+9;以上两个寄存器用于软件延时HOSTF EQU S0+0A;用于中断中爱护FSR0L 的值TEMP EQU S0+0B;用于存放暂时值ORG 0X00 GOTO MAIN ORG 0X08GOTO CLKINT;转向中断服务程序ORG 0X30;数字到段码的转换子程序最好放在程序开头,防止超过2K 的空间发生跨页读表 ;*不带小数点的共阳极码表* CONVERT ADDWF PCL, 1RETLW 0XC0; 0,显示段码与详细的硬件连接

11、有关RETLW 0XF9;1 RETLW 0XA4;2 RETLW 0XB0; 3 RETLW 0X99 ;4 RETLW 0X92 ;5 RETLW 0X82 ;6 RETLW 0XD8;7 RETLW 0X80 ;8欢迎下载精品学习资源RETLW 0X90 ;9 RETLW 0X88 ;A RETLW 0X83 ;B RETLW 0XC6; C RETLW 0XA1;D RETLW 0X86 ;E RETLW 0X8E; F RETLW 0X7F;. RETLW 0XBF;- RETLW 0X89 ;H RETLW 0XFF; DARK RETURN;*带小数点的共阳极码表* CONVER

12、T2 ADDWF PCL,1RETLW 0X40;0RETLW 0X79;1RETLW 0X24;2RETLW 0X30;3RETLW 0X19;4RETLW 0X12;5RETLW 0X02;6RETLW 0X78;7RETLW 0X00;8RETLW 0X10RETURN;9;*SPI发送显示子模块 * TRANSMITCLRF PORTA ;LACK送低电平,为锁存做预备MOVWF SSPBUF;启动发送WAIT NOPBTFSS PIR1 , SSPIFGOTO WAIT;等待发送终止BCF PIR1 ,SSPIF ;清除中断标志欢迎下载精品学习资源RETURN;*显示子程序模块 *

13、DISPLAYMOVLW 0X01MOVWF LEDF MOVLW 0XA0 MOVWF FSR0L AGAINXIAN MOVF LEDF , W SUBLW 0X03BTFSS STATUS , Z GOTO XIANB MOVF INDF0 , WCALL CONVERT2;如是个位,就查带小数点的码表GOTO TRANXIANB MOVF INDF0, W CALL CONVERTTRAN CALL TRANSMIT;发送一个显示数据INCF FSR0L INCF LEDFMOVF LEDF , WSUBLW 0X05 BTFSS STATUS , Z GOTO AGAINXIAN M

14、OVLW 0X01 MOVWF LEDF XIANDARKMOVLW 0X27 CALL CONVERT CALL TRANSMIT INCF LEDFMOVF LEDF , W SUBLW 0X05 BTFSS STATUS , ZGOTO XIANDARK;显示 4 个DARKBSF PORTA , 5 ;最终给一个锁存信号,代表一次显示任务完成欢迎下载精品学习资源RETURN;* S0计数溢出处理子程序*CS0CLRF S0INCF S1RETURN;* S1计数溢出处理子程序*CS1CLRF S1INCF S2RETURN;* S2计数溢出处理子程序*CS2CLRF S2INCF S3

15、RETURN;* S3计数溢出处理子程序*CS3CLRF S3RETURN;*时钟中断服务程序* CLKINTMOVWF XW_TEMP;储存 W 的值SWAPF STATUS , WMOVWF XHOSTS;暂存 STATUS 的值MOVF FSR0L , WMOVWF HOSTF;储存 FSR0L 的值;以上程序为中断现场爱护MOVLW 0X13MOVWF TMR0L;对 TMR0L 写入一个调整值,由于写入;TMR0L 后接着的两个周期不能增量BCF INTCON , T0IF ;清除中断标志INCF SREG MOVF SREG , WSUBLW 0X28;TMR0L 每 250us

16、中断一次BTFSS STATUS , Z ;其中断 40 次后才执行对 S0 S1 S2 S3 的操作GOTO TIFAN欢迎下载精品学习资源CLRF SREG INCF S0 MOVF S0 ,W SUBLW 0X0ABTFSC STATUS , Z CALL CS0MOVF S1 ,W SUBLW 0X0A BTFSC STATUS , Z CALL CS1MOVF S2 ,W SUBLW 0X0A BTFSC STATUS , Z CALL CS2MOVF S3 ,W SUBLW 0X0A BTFSC STATUS , Z CALL CS3TIFANMOVF HOSTF , W ;以下为

17、中断现场复原MOVWF FSR0L;复原间接寻址指针FSR0L 的值SWAPF XHOSTS ,WMOVWF STATUS;复原 STATUS 的值SWAPF XW_TEMP , 1SWAPF XW_TEMP , W ;复原 W 的值RETFIE;* TMR0初始化子程序 * CLKINSUBMOVLW 0XCFMOVWF T0CON;设定 TMR0L 工作于 8 位定时器方式;内部时钟, TMR0 不用分频BCF INTCON , TMR0IF ;清除 TMR0 的中断标志BCF INTCON , GIE ;总中断禁止BSF INTCON , TMR0IE;TMR0 中断答应BSF INTC

18、ON2 , 2 ;TMR0 中断高优先级欢迎下载精品学习资源BSF RCON , 7 ;使能中断优先级RETURN;*系统初始化子程序 * MAINSUBBCF TRISA ,5 ;置 RA5 为输出方式,以输出锁存信号BCF TRISB ,1 BCF TRISA ,3 BCF TRISE , 0 BCF TRISE , 1BSF TRISB , 4 ;设置与键盘有关的各口的输入输出方式BCF TRISC ,5BCF TRISC ,3 ;设置 SCK 与 SDO 为输出方式BCF INTCON , GIE ;关闭全部中断MOVLW 0XC0MOVWF SSPSTAT ;设置 SSPSTAT寄存

19、器MOVLW 0X30MOVWF SSPCON1;设置 SPI 的掌握方式,答应 SSP 方式,;并且时钟下降沿发送,与74HC595 当;其 SCLK 从低到高平跳变时,串行输入数据;DI 移入寄存器 的特点相对应RETURN ;返回;*键扫描子程序 *KEYSCANBCF PORTB , 1BCF PORTA , 3BCF PORTE , 0BCF PORTE , 1 ;送低电平至K1 , K2 , K3 , K4 RETURN;*键盘去抖子程序 8ms 的延时 * KEYDELAYMOVLW 0X0AMOVWF DEYH AGAIN2 MOVLW 0XFF MOVWF DEYLAGAIN

20、1 DECFSZ DEYL, 1欢迎下载精品学习资源GOTO AGAIN1 DECFSZ DEYH , 1GOTO AGAIN2;详细程序语句参考3. 2 节RETURN;*显示缓冲区处理子程序* XIANHUANMOVLW 0XA0MOVWF FSR0L RLNCF S0 , 0 MOVWF TEMP INCF TEMP , 0 MOVWF INDF0 INCF FSR0L RLNCF S1 , 0 MOVWF TEMP INCF TEMP , 0 MOVWF INDF0 INCF FSR0L RLNCF S2 , 0 MOVWF TEMP INCF TEMP , 0 MOVWF INDF0

21、 INCF FSR0L RLNCF S3 , 0 MOVWF TEMP INCF TEMP , 0 MOVWF INDF0 RETURN;*主程序 *MAIN NOPCALL MAINSUB;系统初始化CALL CLKINSUB;调用时钟初始化子程序DENJIAN BCF INTCON, GIE CLRF S0CLRF S1 CLRF S2欢迎下载精品学习资源CLRF S3 CLRF SREGCLRF LEDF;S0=S1=S2=S3=0CALL XIANHUAN;把 S3、S2、S1、S0 的值装入显示缓冲区CALL DISPLAY;显示DENAN BCF INTCON, GIE ;关中断C

22、ALL KEYSCAN;进行键扫描BTFSS PORTB , 4GOTO XIAODOU1 ;如起始键按下,就消抖动GOTO DENAN ;如起始键没按下,就连续等待XIAODOU1CALL KEYDELAY;延时消抖动CALL KEYSCAN;再次进行键扫描BTFSC PORTB ,4GOTO DENAN;如为干扰,就再次等待键按下CLRF S0 CLRF S1 CLRF S2 CLRF S3CLRF SREG ;设置新一次计时的初始条件WAITS CALL KEYSCAN BTFSS PORTB , 4GOTO WAITS;为了防止按键过于灵敏,等键松开后再进行;下面的操作BSF INTC

23、ON , GIE ;开总中断HERE CALL XIANHUAN;显示缓冲区处理CALL DISPLAY;即时更新显示内容CALL KEYSCAN BTFSS PORTB , 4GOTO XIAODOU;如停止计时键按下,就消抖GOTO HERE ;如停止计时键没按下,就连续等待中断计时XIAODOUCALL DISPLAY;利用消抖动时间调用显示程序CALL DISPLAY CALL DISPLAY欢迎下载精品学习资源CALL DISPLAY CALL DISPLAY CALL DISPLAY CALL DISPLAY CALL DISPLAY CALL DISPLAY CALL KEYSC

24、AN BTFSC PORTB ,4GOTO HERE ;如为干扰,就连续等待停止键按下BCF INTCON , GIE ;如停止键按下,就禁止中断CALL DISPLAY;如不为干扰,就禁止中断,更新显示内容WAITR CALL KEYSCAN BTFSS PORTB , 4GOTO WAITR;为了防止按键过于灵敏,等键松开后再进行;下面的操作DENDAI CALL KEYSCAN BTFSC PORTB ,4GOTO DENDAI;循环进行键扫描,等待清0 键按下CALL KEYDELAY;延时消抖CALL KEYSCAN BTFSC PORTB ,4 GOTO DENDAIWAIT19 CALL KEYSCANBTFSS PORTB , 4GOTO WAIT19;等键松开 GOTO DENJIAN;新一次计时开头END欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁