STC15单片机按键控制详解

目录

数码管工作原理

共阳极数码管段码表 

共阴极数码管段码表

矩阵键盘&数码管综合应用 


单片机型号说明:IAP15F2K61S2

新建工程时单片机型号选择STC15F2K60S2


本开发板支持的显示器件:

LED灯、数码管、点阵屏、LCD1602、LCD12864


数码管工作原理

蓝桥杯单片机开发板所用的数码管是共阳极的,给0就亮

假设想用一位数码管显示一个0,那个就g和dp给1,使其灭

其他都给0,从dp到g到f到e…..0.到a这样数1和0,

就是1100 0000 = 0xC0

其他的可以自己推导

51单片机中数码管码表推导文章链接:

【51单片机】数码管显示http://t.csdn.cn/ObiwY不懂得可以查看上面这篇文章


共阳极数码管段码表 

将数码管段码表推导一下,存放在数组里,用的时候非常方便 

/*共阳极码表 ABCDEF都是大写*/
unsigned char tab[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x80, 0xC6, 0xC0, 0x86, 0x8E, 0xBF, 0xFF};
					   //0     1     2     3     4     5     6     7     8     9     A     B     C     D     E     F     -    灭

共阴极数码管段码表

//共阴极数码管段码表
char NixieTable[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};
	       //number    0    1    2    3    4    5    6    7    8    9    A    B    C   D    E    F // 空 0x00

//共阴极数码管段码或上一个0x80,就带小数点了( |0x80 )
//带小数点  共阴数码管段码
unsigned char code Pnumber[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xf7,0xfc,0xb9,0xde,0xf9,0xf1}; 

程序部分:0、1、2、3间隔0.5s循环显示

#include <STC15F2K60S2.H>

void Delay_ms(int xms)	//15单片机延时函数
{
	int i;
	long a;
	for (i = xms; i > 0; i --)
		for(a = 810; a > 0; a --);
}

void main()
{
	P2 = 0xA0; P0 = 0x00; P2 = 0xC0; P0 = 0xFF;	P2 = 0xFF;	//初始化,P0控制数码管
	while(1)
	{
		P0 = 0xC0;
		Delay_ms(500);
		P0 = 0xF9;
		Delay_ms(500);
		P0 = 0xA4;
		Delay_ms(500);
		P0 = 0xB0;
		Delay_ms(500);
	}
}

 效果是啥玩意啊,八个数码管全亮了,而且延时时间也不是0.5s,感觉不太专业的样子


矩阵键盘&数码管综合应用 

现在将矩阵键盘数码管静态显示结合起来,实现按键,显示对应的数值

数码管部分  在上面

矩阵按键部分   上一篇文章有源码   有需要的童靴直接粘贴了

15单片机-矩阵键盘http://t.csdn.cn/2GYyc

主控部分   将按键数值依次对应1234567890ABCDEF

#include <STC15F2K60S2.H>
#include "juzhen.h"
#include "smg.h"

#define uchar unsigned char

uchar keynum;

void main()
{
	P2 = 0xA0; P0 = 0x00; P2 = 0xC0; P0 = 0xFF;	P2 = 0xFF;	//初始化,P0控制数码管
	
	while(1)
	{
		keynum = KeyJZ_16();
		
		if     (keynum == 7)	P0 = tab[1];
		else if (keynum == 11)	P0 = tab[2];
		else if (keynum == 15)	P0 = tab[3];
		else if (keynum == 19)	P0 = tab[4];
		else if (keynum == 6)	P0 = tab[5];
		else if (keynum == 10)	P0 = tab[6];
		else if (keynum == 14)	P0 = tab[7];
		else if (keynum == 18)	P0 = tab[8];
		else if (keynum == 5)	P0 = tab[9];
		else if (keynum == 9)	P0 = tab[0];
		else if (keynum == 13)	P0 = tab[10];
		else if (keynum == 17)	P0 = tab[11];
		else if (keynum == 4)	P0 = tab[12];
		else if (keynum == 8)	P0 = tab[13];
		else if (keynum == 12)	P0 = tab[14];
		else if (keynum == 16)	P0 = tab[15];	
	}
}

物联沃分享整理
物联沃-IOTWORD物联网 » STC15单片机按键控制详解

发表评论