PIC单片机及FPGA实验系统设计 第22页
EndOfInt ;中断服务出口
;----------现场恢复----------
clrf STATUS
movf status_temp,w
movwf STATUS
swapf w_temp,f ;在不影响状态寄存器的情况下恢复W寄存器
swapf w_temp,w
;---------现场恢复结束-------
retfie
;---------中断返回,GIE自动为------
main
banksel SSPSTAT
clrf SSPSTAT ;smp=0,CKE=0,设定从模式,时钟沿选择
movlw 06H ;设定引脚功能
movwf ADCON1 ;设置ADCON1,关闭所有的模拟输入引脚
bsf TRISA,5 ;确保SS为输入
clrf TRISB ;PORTB为输入
movlw 0dfH ;SDO为输出,SDI为输入,SCK为输入
movwf TRISC ;设置C口输出方向
bsf PIE1,SSPIE ;允许SSP中断
clrf STATUS
clrf INTCON ;禁止其他中断
clrf PIR1 ;清除中断标志
clrf PORTB ;PORTB输出复位
movlw 24H ;CKP=0,SSPEN=1,SPI从模式带SS控制
movwf SSPCON ;设置SSP工作模式
movlw 0AAH
movwf SSPBUF ;送入SSPBUF,等待主机启动SPI通信
bsf INTCON,PEIE ;外围功能模块中断允许
bsf INTCON,GIE ;总中断允许
loop
nop ;程序主循环,等待中断
goto loop
;-------------程序结束-------------
end
附录(十三):密码锁程序:dianzisuo.C
//综合例子,利用4×4键盘和数码管实现密码锁
//8位数码管显示,初始化时显示P。。,接着输入最大6位数的密码。当密码输入完成后,
//按下确认键,进行密码比较,然后给出相应信息。在输入密码过程中,显示器只显示‘8。‘当数字输入超过6个时候
//发出报警信号。在密码输入过程中,若输入错误,可以利用“DEL”删除刚刚输入的错误的数字
#include<pic.h>
unsigned char ps[]={1,2,3,4,5}; //输入密码定义
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位选择定义
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x6f, //显示码
0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,
0x73,0xff};
unsigned char dispbuf[8]={18,16,16,16,16,16,16,16}; //显示位存储
unsigned char dispcount=0; //显示位变量
unsigned char flashcount=0; //次数
unsigned char key; //键值定义
unsigned char keycoun=0; //按下次数确定
unsigned char pslen=5; //ENTER按下时比较变量
unsigned char getps[6]; //输入密码存储
bit keyoverflag; //键溢出标志位
bit errorflag; //输入出错标志位
bit rightflag; //输入正确标志位
//子函数声明
void delay(unsigned char z); //可调延时子程序
void T0_initial(void); //T0初始化子程序
void keyscan(void); //键盘扫描子程序
void key_chuli(void); //按键处理子程序
void display(void); //显示子程序
void keyover(void); //键溢出处理程序
void error_right(void); //出错处理子程序
void alarm(void); //报警子程序
void main(void){ //主程序
unsigned char i,j;
T0_initial();
while(1){
keyskan();
keychuli;
}
}
void delay(unsigned char z){
unsigned char i,j;
for(i=0;i<20;i++){
for(j=0;j<50;j++){
}
}
}
void T0_Intial(void){ //中断产生16ms延时
OPTION=0x05; //设定分频比为1:64
T0IF=0;
T0IE=1;
GIE=1;
}
void keycan(void){
unsigned char temp,x,y,z;
TRISD=0xf0;
PORTD=0xf0;
temp=PORTD & 0xf0;
if (temp!=0xf0){
delay();
temp=PORTD & 0xf0;
if (temp!=0xf0){
keycount++;
x=temp;
TRISD=0x0f;
PORTD=0xf0;
temp=PORTD & 0x0f;
y=temp;
z=x|y;
switch(z){
case 0xe1:k=7;break;
case 0xe2:k=8;break;
case 0xe4:k=9;break;
case 0xe8:k=10;break;
case 0xd1:k=4;break;
case 0xd2:k=5;break;
case 0xd4:k=6;break;
case 0xd8:k=11;break;
case 0xb1:k=1;break;
case 0xb2:k=2;break;
case 0xb4:k=3;break;
case 0xb8:k=12;break;
<< 上一页 [21] [22] [23] [24] [25] [26] [27] [28] 下一页
PIC单片机及FPGA实验系统设计 第22页下载如图片无法显示或论文不完整,请联系qq752018766