📄 8253.c
字号:
#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
//P0----D0 RXD---A0---P30 TXD---A1---P31 WR---WR---P36 RD---RD---P37
// P33---GATE0 P32---GATE1 P34---GATE2 P35---TEST---OUT1
//6PIN 1---VCC 2---RST---P10 3---LOAD---P11 4---DIN---P12 5---CLK---P13 6---GND
//4PIN 1---VCC 2---sda---P16 3---sck---P17 4---GND
//P2----keyboard
//*************************************************
#define A0 P3_0
#define A1 P3_1
#define wr P3_6
#define rd P3_7
#define gat0 P3_3
#define gat1 P3_2
#define gat2 P3_4
#define out P3_5
//*************************************************
#define rst P1_0 //ps7219
#define lod P1_1
#define din P1_2
#define clk P1_3
//*************************************************
sbit a0=ACC^0; sbit a1=ACC^1; sbit a2=ACC^2; sbit a3=ACC^3;
sbit a4=ACC^4; sbit a5=ACC^5; sbit a6=ACC^6; sbit a7=ACC^7;
//*************************************************
void delay (uchar t) //延时子程序
{ uchar s;
while (t--)
{for (s=0xff;s>0;s--)
{;}
}
}
//*************************************************
uchar jianma(uchar a) //按键特征码转换成16进制码
{ switch (a)
{case 0x11:{a=0x00;}break;
case 0x12:{a=0x04;}break;
case 0x14:{a=0x08;}break;
case 0x18:{a=0x0c;}break;
case 0x21:{a=0x01;}break;
case 0x22:{a=0x05;}break;
case 0x24:{a=0x09;}break;
case 0x28:{a=0x0d;}break;
case 0x41:{a=0x02;}break;
case 0x42:{a=0x06;}break;
case 0x44:{a=0x0a;}break;
case 0x48:{a=0x0e;}break;
case 0x81:{a=0x03;}break;
case 0x82:{a=0x07;}break;
case 0x84:{a=0x0b;}break;
case 0x88:{a=0x0f;}break;
default:{a=0xff;}
}
return (a);
}
//*************************************************
uchar kbscan(void) //键盘扫描子程序
{ uchar sccode,recode,e;
P2=0x0f;
if ((P2&0x0f)!=0x0f) //you jian an xia
{for (e=240;e>0;e--);
if ((P2&0x0f)!=0x0f) //yun you jian an xia
{sccode=0x7f; //zhu hang sao miao chu zhi
while ((sccode&0x08)!=0) //xun huan sao miao
{P2=sccode;
if ((P2&0x0f)!=0x0f) //ben hang you jian an xia
{recode=(P2&0x0f)|0xf0;
return ((~sccode)+(~recode)); //fan hui jian ma
}
else
sccode=(sccode>>1)|0x80; //zuo yi yi wei
}
}
}
return (0);
}
//*************************************************
void trt(hi,lo)
uchar hi,lo;
{ACC=hi; lod=0;
clk=1; din=a7; clk=0; delay(0x01);ACC=hi;
clk=1; din=a6; clk=0; delay(0x01);ACC=hi;
clk=1; din=a5; clk=0; delay(0x01);ACC=hi;
clk=1; din=a4; clk=0; delay(0x01);ACC=hi;
clk=1; din=a3; clk=0; delay(0x01);ACC=hi;
clk=1; din=a2; clk=0; delay(0x01);ACC=hi;
clk=1; din=a1; clk=0; delay(0x01);ACC=hi;
clk=1; din=a0; clk=0; delay(0x01);ACC=hi;
//*************************************************
ACC=lo;
clk=1; din=a7; clk=0; delay(0x01); lod=1;ACC=lo;
clk=1; din=a6; clk=0; delay(0x01);ACC=lo;
clk=1; din=a5; clk=0; delay(0x01);ACC=lo;
clk=1; din=a4; clk=0; delay(0x01);ACC=lo;
clk=1; din=a3; clk=0; delay(0x01);ACC=lo;
clk=1; din=a2; clk=0; delay(0x01);ACC=lo;
clk=1; din=a1; clk=0; delay(0x01);ACC=lo;
clk=1; din=a0; clk=0; delay(0x01); clk=1;ACC=lo;
delay(0x01);
}
//*************************************************
void psfirst(void)
{rst=1; delay(0x01); rst=0;
EA=0;
lod=0;
delay(0x90);
//*************************************************
trt(0x0a,0x0f); //liang du
trt(0x0b,0x07); //sao miao jie xian
trt(0x09,0xff); //BCD yi ma fang shi
trt(0x0c,0x01); //zheng chang gong zuo fang shi
// trt(0x0f,0x01); //jin ru ce shi mo shi
// trt(0x0f,0x00); //tui chu ce shi mo shi
// trt(0x0d,0xff); //8 wei LED shan shuo
}
//*************************************************
void ps8()
{trt(0x01,0x00); //xian shi de shu zhi
trt(0x02,0x01);
trt(0x03,0x02);
trt(0x04,0x03);
trt(0x05,0x04);
trt(0x06,0x05);
trt(0x07,0x06);
trt(0x08,0x07);
}
void s8253(void)
{gat0=0; gat1=0; gat2=0;
A0=1; A1=1; wr=1; P1=0x33; wr=0; delay(0x01); wr=1;
//contral reg; first low,the secend high; not BCD; way 3
A0=0; A1=0; wr=1; P1=0xff; wr=0; delay(0x01); wr=1;
P1=0xfa; wr=0; delay(0x01); wr=1; gat0=1;
//counter0; first low,the secend high;
A0=1; A1=1; wr=1; P1=0x73; wr=0; delay(0x01); wr=1;
A0=0; A1=1; wr=1; P1=0x00; wr=0; delay(0x01); wr=1;
P1=0x00; wr=0; delay(0x01); wr=1; gat1=1;
//counter1; first low,the secend high;
A0=1; A1=1; wr=1; P1=0xb3; wr=0; delay(0x01); wr=1;
A0=1; A1=0; wr=1; P1=0x00; wr=0; delay(0x01); wr=1;
P1=0x00; wr=0; delay(0x01); wr=1; gat2=1;
//counter2; first low,the secend high;
}
//#################################################
main ()
{uchar key; uchar jian;
while (1)
{key=kbscan();
if (key!=0)
{while ((P2&0x0f)!=0x0f); //you jian an xia,deng dai
jian=jianma(key);
}
switch (jian)
{case 0x0b : {jian=0x00;}break;
case 0x0c : {jian=0x00;}break;
default : {jian=0x00;}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -