蓝桥杯——单片机——第三天

时间:

2023年9月21日

学习目标:

数码管程序and矩阵键盘程序

学习内容:

数码管原理图:俩个74hc573芯片,俩个四位数码管,电阻

数码管动态显示原理:首先u7芯片控制的是数码管段选部分,该部分控制数码管的显示内容;8芯片控制数码管的位选部分,该部分具体控制点亮哪一位数码管;在u7芯片输出段码是,其实所有数码管都接收到了,只是某些的位选没有打开,我们可以让每一位都显示1-2ms,就可以全部点亮。

矩阵键盘原理图:一个j5控制是独立按键还是矩阵键盘,行线是P34,P35,P42,P44,其余为列线。

矩阵键盘的常用实现原理:行扫描法,逐行输出0,检查列线电平有没有被拉低,有的话,则该行有按键按下,根据输出0的行线和读到0的列线就能判断位置。

代码部分示例:

数码管的转化和显示函数

void seg_tran(unsigned char *pucseg_buf,unsigned char *pucseg_code)
{
	unsigned char i,j=0,temp;
	for(i=0;i<8;j++,i++)
	{
		switch(pucseg_buf[j])
		{
		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;
	P2&=0X1F;
	P0=1<<ucseg_pos;
	P2=P2&0x1F|0Xc0;
	P2&=0X1F;	
	P0=pucseg_code[ucseg_pos];
	P2=P2&0x1F|0XE0;
	P2&=0X1F;

读取按键函数

unsigned char key_rade()
{
	unsigned int key_pos;
	unsigned char key_val;
	P44=0;P42=1;P35=1;P34=1;
	key_pos=P3;
	P44=1;P42=0;P35=1;P34=1;
	key_pos=(key_pos<<4)|(P3&0x0f);	
	P44=1;P42=1;P35=0;P34=1;
	key_pos=(key_pos<<4)|(P3&0x0f);
	P44=1;P42=1;P35=1;P34=0;
	key_pos=(key_pos<<4)|(P3&0x0f);
  switch(~key_pos)
	{
		case 0x8000:key_val=4;break;
		case 0x4000:key_val=5;break;
		case 0x2000:key_val=6;break;
		case 0x1000:key_val=7;break;
		case 0x0800:key_val=8;break;
		case 0x0400:key_val=9;break;
		case 0x0200:key_val=10;break;
		case 0x0100:key_val=11;break;
		case 0x0080:key_val=12;break;
		case 0x0040:key_val=13;break;
		case 0x0020:key_val=14;break;
		case 0x0010:key_val=15;break;
		case 0x0008:key_val=16;break;
		case 0x0004:key_val=17;break;
		case 0x0002:key_val=18;break;
		case 0x0001:key_val=19;break;
		default:key_val=0;
	}
	return key_val;
}

总结:

今天又学了数码管和矩阵按键俩个模块的原理,也跟着范例敲了一遍,虽然没有自己敲,我的想法是先了解完全部模块的原理,大致的敲一下,最后在自己敲,总结出自己的模板!每天学的的模块虽然不多,但是官方代码还是有点不好理解,对我来说,相信会越来越好!

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值