课程设计Word文件下载.docx
- 文档编号:22031265
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:20
- 大小:227.90KB
课程设计Word文件下载.docx
《课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《课程设计Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
级联输出端。
SI:
串行数据输入端。
74595的控制端说明:
/SCLR(10脚):
低点平时将移位寄存器的数据清零。
SCK(11脚):
上升沿时数据寄存器的数据移位。
QA-->
QB-->
QC-->
...-->
QH;
下降沿移位寄存器数据不变。
(脉冲宽度:
5V时,大于几十纳秒就行了)
RCK(12脚):
上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
(5V时,大于几十纳秒就行了),更新显示数据。
/G(13脚):
高电平时禁止输出(高阻态)。
如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。
比通过数据端移位控制要省时省力。
五、软件设计:
程序主流程图
中断服务程序流程图
整体电路:
程序清单:
LISTP=16F877
INCLUDE"
P16F877.INC"
;
---------------------现计时秒表-------------------------------
时钟显示范围:
0.01秒;
所用的寄存器如下
S0EQU0X20;
0.01秒计时器
S1EQUS0+1;
0.1秒计时器
S2EQUS0+2;
1秒计时器
S3EQUS0+3;
10秒计时器
SREGEQUS0+4;
中断次数计数器
LEDFEQUS0+5;
显示的LED的位置指示寄存器
XW_TEMPEQUS0+6;
用于中断中保护W的值
XHOSTSEQUS0+7;
用于中断中保护STATUS的值
DEYHEQUS0+8
DEYLEQUS0+9;
以上两个寄存器用于软件延时
HOSTFEQUS0+0X0A;
用于中断中保护FSR0L的值
JIANREQUS0+0X0B;
保存键值
TEMPEQUS0+0X0C
ZDYEQUS0+0x0D
ORG0X00
NOP
GOTOMAIN
ORG0X04
GOTOCLKINT;
转向中断服务程序
ORG0X10
--------------------------------------------------------------------------
CONVERT;
不带小数点的共阳极码表
ADDWFPCL,1
RETLW0XC0;
RETLW0XF9;
1
RETLW0XA4;
2
RETLW0XB0;
3
RETLW0X99;
4
RETLW0X92;
5
RETLW0X82;
6
RETLW0XD8;
7
RETLW0X80;
8
RETLW0X90;
9
RETLW0XBF;
"
-"
RETLW0XFF;
灭灯
retlw0x89
retlw0x86
retlw0xc7
retlw0x8c
RETURN
CONVERT2;
带小数点的共阳极码表
ADDWFPCL,1
RETLW0X40;
0.
RETLW0X79;
1.
RETLW0X24;
2.
RETLW0X30;
3.
RETLW0X19;
4.
RETLW0X12;
5.
RETLW0X02;
6.
RETLW0X78;
7.
RETLW0X00;
8.
RETLW0X10;
9.
RETLW0xA0
RETURN
-----------------------SPI发送显示子模块--------------------------------
TRANSMIT
CLRFPORTA;
LACK送低电平,为锁存做准备
MOVWFSSPBUF;
启动发送
WAIT
BANKSELPIR1
BTFSSPIR1,SSPIF
GOTOWAIT;
等待发送结束
BCFPIR1,SSPIF;
清除中断标志
RETURN
--------------------------显示子程序模块---------------------------------
DISPLAYMOVLW0X01
MOVWFLEDF
XIANDBTFSCS2,0
GOTOZXC
MOVLW0X0B
GOTOVBN
ZXCMOVLW0X0A
VBNCALLCONVERT
INCFLEDF
MOVFLEDF,W
SUBLW0X05
BTFSSSTATUS,Z
GOTOXIAND;
显示动画
MOVLW0X01
MOVLW0XA0
MOVWFFSR
AGAINXIAN
MOVFLEDF,W
SUBLW0X02
GOTOXIANB
MOVFINDF,W
CALLCONVERT2;
若是第二位,则查带小数点的码表
GOTOTRAN
XIANB
movfLEDF,w
sublw0x08
BTFSCSTATUS,Z
gotoxian8
sublw0x07
gotoxian7
sublw0x06
gotoxian6
sublw0x05
gotoxian5
xian5MOVFLEDF,W
gotoaaa
MOVLW0x0f
CALLCONVERT
xian6MOVFLEDF,W
SUBLW0X06
MOVLW0x0e
xian7MOVFLEDF,W
SUBLW0X07
MOVLW0x0d
xian8MOVFLEDF,W
SUBLW0X08
MOVLW0x0c
CALLCONVERT
GOTOTRAN
aaaMOVFINDF,W
CALLCONVERT
TRANCALLTRANSMIT;
发送一个显示数据
INCFFSR
SUBLW0X09
GOTOAGAINXIAN
BSFPORTA,5;
最后给一个锁存信号,代表一次显示任务完成
-----------S0计数溢出处理子程序------------
CS0CLRFS0
INCFS1
-----------S1计数溢出处理子程序---------------
CS1CLRFS1
INCFS2
-----------S2计数溢出处理子程序---------------
CS2CLRFS2
INCFS3
-----------S3计数溢出处理子程序---------------
CS3CLRFS3
-----------时钟中断服务程序-------------------
CLKINTMOVWFXW_TEMP;
保存W的值
SWAPFSTATUS,W
MOVWFXHOSTS;
暂存STATUS的值
MOVFFSR,W
MOVWFHOSTF;
保存FSR的值。
以上程序为中断现场保护--6
MOVLW0X07
MOVWFTMR0;
对TMR0写入初值
BCFINTCON,T0IF;
INCFSREG
MOVFSREG,W
SUBLW0X05;
TMR0每2ms中断一次
BTFSSSTATUS,Z;
其中断5次后才执行对S0,S1,S2,S3的操作
GOTOTIFAN
CLRFSREG
INCFS0
MOVFS0,W
SUBLW0X0A
CALLCS0
MOVFS1,W
CALLCS1
MOVFS2,W
CALLCS2
MOVFS3,W
CALLCS3
TIFANMOVFHOSTF,W;
以下为中断现场恢复
MOVWFFSR;
恢复间接寻址指针FSR的值
SWAPFXHOSTS,W
MOVWFSTATUS;
恢复STATUS的值
SWAPFXW_TEMP,1
SWAPFXW_TEMP,W;
恢复W的值
RETFIE
-----------------------TMR0初始化子程序-----------------------------------
CLKINSUB
BANKSELOPTION_REG
BCFOPTION_REG,T0CS;
TMR0工作于定时器方式
BCFOPTION_REG,PSA;
TMR0用分频
BCFOPTION_REG,PS2
BSFOPTION_REG,PS1
BCFOPTION_REG,PS0;
TMR08分频比
BANKSELINTCON
BCFINTCON,T0IF;
清除TMR0的中断标志
BCFINTCON,GIE;
总中断禁止
BSFINTCON,T0IE;
TMR0中断允许------10
---------------------------系统初始化子程序------------------------
MAINSUB
BANKSELTRISA
BCFTRISA,5;
置RA5为输出方式,以输出锁存信号
BCFTRISB,1
BCFTRISB,2
BSFTRISB,4
BSFTRISB,5;
设置与键盘有关的各口的输入输出方式
BCFTRISC,5
BCFTRISC,3;
设置SCK与SDO为输出方式
BCFINTCON,GIE;
关闭所有中断
MOVLW0XC0
MOVWFSSPSTAT;
设置SSPSTAT寄存器
BANKSELSSPCON
MOVLW0X30
MOVWFSSPCON;
设置SPI的控制方式,允许SSP方式,
;
并且时钟下降沿发送,与“74HC595,当
其SCLK从低到高电平跳变时,串行输入数据
(DI)移入寄存器”的特点相对应---15
BCFSTATUS,IRP;
间接寻址选中BANK0、BANK1
MOVFTEMP
MOVLW0X00
MOVFJIANR
RETURN;
返回
-------------------------------键扫描子程序-----------------------------
KEYSCANCLRFPORTB;
B1和B2两条线上送0
NOP
NOP;
经过一段时间的延时,避开引脚电平的过渡过程
MOVFPORTB,W
ANDLW0X30;
只检查B4和B5两位,屏蔽其它各位
SUBLW0X30
RETURN
--------------------------------------------------------------------------
KEYDELAY;
键盘去抖子程序(约8ms的软件延时)
MOVLW0X80
MOVWFDEYH
AGAIN2MOVLW0XFF
MOVWFDEYL
AGAIN1DECFSZDEYL,1
GOTOAGAIN1
DECFSZDEYH,1
GOTOAGAIN2
KEYSERVEMOVLW0X00
MOVWFJIANR
MOVLW0XFD;
键盘服务子程序
MOVWFPORTB
BTFSSPORTB,4
GOTOS10
BTFSSPORTB,5
GOTOS9
MOVLW0XFB
MOVWFPORTB
GOTOS12
GOTOS11
GOTOTUICHU
S10MOVLW0X02
MOVWFJIANR
GOTOTUICHU
S9MOVLW0X01
GOTOTUICHU
S12MOVLW0X04
S11MOVLW0X03
MOVWFJIANR;
把键值送给JIANR
TUICHURETURN
--------------------------------显示缓冲区处理子程序----------------------
XIANHUANMOVLW0XA0
MOVWFINDF
------------------------------------------------------------------------
MAINNOP
CALLMAINSUB;
系统初始化
CALLCLKINSUB;
调用时钟初始化子程序
DENJIAN
BANKSELS0
CLRFS0
CLRFS1
CLRFS2
CLRFS3
CLRFSREG;
复位显示数据即:
CLRFLEDF;
使S0=S1=S2=S3=0
CALLXIANHUAN;
把S3、S2、S1、S0的值装入显示缓冲区
CALLDISPLAY;
显示
DENANBCFINTCON,GIE;
关中断
CALLKEYSCAN;
进行键扫描
GOTOXIAODOU1;
如起始键按下,则消抖动
GOTODENAN;
如起始键没按下,则继续等待
XIAODOU1CALLKEYDELAY;
延时消抖动
再次进行键扫描
若为干扰,则再次等待键按下
CALLKEYSERVE;
不为干扰则查键值
MOVFJIANR,W
SUBLW0X01;
键S9按下
GOTODENAN
设置新一次计时的初始条件
WAITSCALLKEYSCAN
GOTOWAITS;
等键松开后再进行下面的操作
ABCMOVLW0X06
MOVWFTMR0
BSFINTCON,GIE;
开总中断
HERECALLXIANHUAN;
显示缓冲区处理
即时更新显示内容
CALLKEYSCAN
GOTOXIAODOU;
若停止计时键按下,则消抖
GOTOHERE;
若停止计时键没按下,则继续等待中断计时
XIAODOUCALLDISPLAY;
利用消抖动时间调用显示程序
CALLDISPLAY
CALLDISPLAY
CALLKEYSCAN
若为干扰,则继续等待停止键按下
SUBLW0X03;
键S11按下
GOTOHERE
BCFINTCON,GIE;
若S11键按下,则禁止中断
若不为干扰,则禁止中断,更新显示内容
WAITRCALLKEYSCAN
GOTOWAITR;
等键松开后再进行下面的操作
DENDAICALLKEYSCAN
GOTODENDAI;
循环进行键扫描,等待继续键按下
CALLKEYDELAY
延时消抖
键S11按下继续
BTFS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计