1.定时器头文件
"tim.h"代码:
#ifndef __TIM_H
#define __TIM_H
#include "STC15F2K60S2.H"
void Cls_Peripheral(void); //关闭外设
void Led_Disp(unsigned char ucLed); //LED显示
void Timer1Init(void); //定时器函数
#endif
"tim.c"代码:
#include "tim.h"
// 关闭外设
void Cls_Peripheral(void)
{ // IO 模式(J13-2 和 J13-3 相连)
P0 = 0xFF;
P2 = P2 & 0x1F | 0x80;// 定位 Y4C
P2 &= 0x1F;
P0 = 0;
P2 = P2 & 0x1F | 0xA0; // 定位 Y5C
P2 &= 0x1F; //
//XBYTE[0x8000] = 0xFF; // MM 模式(J13-2 和 J13-1 相连)
//XBYTE[0xA000] = 0;
}
void Led_Disp(unsigned char ucLed)
{ // IO 模式(J13-2 和 J13-3 相连)
P0 = ~ucLed;
P2 = P2 & 0x1F | 0x80; // 定位 Y4C
P2 &= 0x1F; //
//XBYTE[0x8000] = ~ucLed; // MM 模式(J13-2 和 J13-1 相连)
}
void Timer1Init(void) // 1 毫秒定时器@12.000MHz
{
AUXR &= 0xBF;
TMOD &= 0x0F;
TL1 = 0x18;
TH1 = 0xFC;
TF1 = 0;
TR1 = 1;
ET1 = 1;
EA = 1;
}
2.数码管显示头文件
“Seg.h"代码:
#ifndef __SEG_H
#define __SEG_H
#include "STC15F2K60S2.H"
void Seg_Tran(unsigned char *pucSeg_Buf, unsigned char *pucSeg_Code);
void Seg_Disp(unsigned char *pucSeg_Code, unsigned char ucSeg_Pos);
#endif
“Seg.c"代码:
#include "seg.h"
// 显示切换
void Seg_Tran(unsigned char *pucSeg_Buf, unsigned char *pucSeg_Code)
{
unsigned char i, j=0, temp;
for(i=0; i<8; i++, j++)
{
switch(pucSeg_Buf[j])
{ // 低电平点亮段,顺序为[dp g f e d c b a]
case '0': temp = 0xc0; break;
case '1': temp = 0xf9; break;
case '2': temp = 0xa4; break;
case '3': temp = 0xb0; break;
case '4': temp = 0x99; break;
case '5': temp = 0x92; break;
case '6': temp = 0x82; break;
case '7': temp = 0xf8; break;
case '8': temp = 0x80; break;
case '9': temp = 0x90; break;
case 'A': temp = 0x88; break;
case 'B': temp = 0x83; break;
case 'C': temp = 0xc6; break;
case 'D': temp = 0xA1; break;
case 'E': temp = 0x86; break;
case 'F': temp = 0x8E; break;
case 'H': temp = 0x89; break;
case 'L': temp = 0xC7; break;
case 'N': temp = 0xC8; break;
case 'P': temp = 0x8c; break;
case 'U': temp = 0xC1; break;
case '-': temp = 0xbf; break;
case ' ': temp = 0xff; break;
default: temp = 0xff;
}
if(pucSeg_Buf[j+1] == '.')
{
temp = temp&0x7f;
j++;
}
pucSeg_Code[i] = temp;
}
}
// 数码管显示
void Seg_Disp(unsigned char *pucSeg_Code, unsigned char ucSeg_Pos)
{
P0 = 0xff;
P2 = P2 & 0x1F | 0xE0; // 定位 Y7C
P2 &= 0x1F;
P0 = 1<<ucSeg_Pos; // 位选
P2 = P2 & 0x1F | 0xC0; // 定位 Y6C
P2 &= 0x1F; //
P0 = pucSeg_Code[ucSeg_Pos];
P2 = P2 & 0x1F | 0xE0; // 定位 Y7C
P2 &= 0x1F;
}
3.矩阵键盘头文件
“Key.h"代码:
#ifndef __KEY_H
#define __KEY_H
#include "STC15F2K60S2.H"
unsigned char Key_Read(void);
#endif
“Key.c"代码:
#include "key.h"
unsigned char Key_Read(void)
{
unsigned int Key_New;
unsigned char Key_Val;
P44 = 0; P42 = 1; P35 = 1; P34 = 1; // 第 1 行
Key_New = P3;
P44 = 1; P42 = 0 // 第 2 行
Key_New = (Key_New<<4) | (P3&0x0f);
P42 = 1; P35 = 0; // 第 3 行
Key_New = (Key_New<<4) | (P3&0x0f);
P35 = 1; P34 = 0; // 第 4 行
Key_New = (Key_New<<4) | (P3&0x0f);
switch(~Key_New)
{
case 0x8000: Key_Val = 4; break; // S4
case 0x4000: Key_Val = 5; break; // S5
case 0x2000: Key_Val = 6; break; // S6
case 0x1000: Key_Val = 7; break; // S7
case 0x0800: Key_Val = 8; break; // S8
case 0x0400: Key_Val = 9; break; // S9
case 0x0200: Key_Val = 10; break; // S10
case 0x0100: Key_Val = 11; break; // S11
case 0x0080: Key_Val = 12; break; // S12
case 0x0040: Key_Val = 13; break; // S13
case 0x0020: Key_Val = 14; break; // S14
case 0x0010: Key_Val = 15; break; // S15
case 0x0008: Key_Val = 16; break; // S16
case 0x0004: Key_Val = 17; break; // S17
case 0x0002: Key_Val = 18; break; // S18
case 0x0001: Key_Val = 19; break; // S19
default: Key_Val = 0;
}
return Key_Val;
}