题目
代码
这次的题目就是有一个细节,下降沿刷新事件比较的有意思,稍微不注意可能就会写错,其他也是中规中矩的考,和之前出现的都差不多
timer.c
#include <timer.h>
/**
* @Function Timer0Init
* @author STC_isp
* @date 2020/7/7
* @Description: 定时器0的初始化
* @param void
* @return void
* @History 无
*/
void Timer0Init(void) //1毫秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
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[24]={
0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90
,0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10
,0XC1,0X8C,0XC8,0XFF};
//U:20 P:21 N:22 灭:23
unsigned char dspbuf[8];
/**
* @Function smg_display
* @author Barry
* @date 2020/7/7
* @Description: 数码管的显示函数
* @param void
* @return void
* @History 无
*/
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;
}
smg.h
#ifndef _SMG_H_
#define _SMG_H_
#include <STC15F2K60S2.H>
extern unsigned char dspbuf[8];
void smg_display(void);
#endif
keybord.c
#include <keybord.h>
unsigned char i=0,key_value,key_sum=0,key_press;
/**
* @Function keybord_read
* @author Barry
* @date 2020/7/7
* @Description: 矩阵键盘行列扫描
* @param void
* @return void
* @History 无
*/
void keybord_read(void)
{
P3=0XF0;
P42=P44=1;
if(P44==0||P42==0||P35==0||P34==0)
{
for(i=0;i<4;i++)
{
P3=0XFF;
P42=P44=1;
P3&=~(1<<i);
if(P44==0) key_value=4*i;
else if(P42==0) key_value=4*i+1;
else if(P35==0) key_value&#