题目
代码
这套模拟题最难的应该就是密码的输入了,用了笨方法,用swtich一个一个的写出来的
timer.c
#include <timer.h>
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=ET0=1;
}
timer.h
#ifndef _TIMER_H_
#define _TIMER_H_
#include <STC15F2K60S2.H>
void Timer0Init(void);
#endif
smg.c
#include <smg.h>
unsigned char code smgduan[16]={
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,
0XF8,0X80,0X90,0XBF,0XFF,0XC6,0X86,0XC8,0X8C};
//10:- 11:灭 12:C 13:E 14:N 15:P
unsigned char dspbuf[8];
void smg_display(void)
{
static unsigned char i=0;
P2=(P2&0X1F)|0XE0;
P0=0XFF;
P2&=0X1F;
P2=(P2&0X1F)|0XC0;
P0=1<<i;
P2&=0X1F;
P2=(P2&0X1F)|0XE0;
P0=smgduan[dspbuf[i]];
P2&=0X1F;
if(++i==8)
i=0;
}
keybord.c
#include <keybord.h>
unsigned char i,key_value,key_press,key_sum=0;
void key_read(void)
{
P3=0XF0;
P44=P42=1;
if(P44==0||P42==0||P35==0||P34==0)
{
for(i=0;i<4;i++)
{
P3=0XFF;
P44=P42=1;
P3&=~(0X01<<i);
if(P44==0) key_value=4*i;
else if(P42==0) key_value=4*i+1;
else if(P35==0) key_value=4*i+2;
else if(P34==0) key_value=4*i+3;
}
if(++key_sum==1)
key_press=1;
}
else
key_sum=0;
}
keybord.h
#ifndef _KEYBORD_H_
#define _KEYBORD_H_
#include <STC15F2K60S2.H>
extern unsigned char key_value,key_press;
void key_read(void);
#endif
iic.c
#include <iic.h>
#include "intrins.h"
#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
//总线引脚定义
sbit SDA = P2^1; /* 数据线 */
sbit SCL = P2^0; /* 时钟线 */
//总线启动条件
void IIC_Start(void)
{
SDA = 1;
SCL = 1;
somenop;
SDA = 0;
somenop;
SCL = 0;
}
//总线停止条件
void IIC_Stop(void)
{
SDA = 0;
SCL = 1;
somenop;
SDA = 1;
}
//等待应答
bit IIC_WaitAck(void)
{
SDA = 1;
somenop;
SCL = 1;
somenop;
if(SDA)
{
SCL = 0;
IIC_Stop();
return 0;
}
else
{
SCL = 0;
return 1;
}
}
//通过I2C总线发送数据
void IIC_SendByte(unsigned char byt)
{
unsigned char i;
for(i=0;i<8;i++)
{
if(byt&0x80)
{
SDA = 1