蓝桥杯单片机学习记录(2)(基本模块)

LED模块

void Led(uchar dat)
{
	Select_74H138(4);//打开Y4C
	P0 = dat;//点亮LED灯
}

数码管模块

uchar code Nixie_Dat[]={0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90};

//0-9

uchar code Nixie_Dot[]={0X40, 0X79, 0X24, 0X30, 0X19, 0X12, 0X02, 0X78, 0X00, 0X10};

//0.-9.
 

uchar w[8];

void DisplayAlone(uchar pos,value)
{
	Select_74H138(7);
	P0 = 0XFF;//消影
	Select_74H138(6);
	P0 = _crol_(0X01,pos);//位选
	Select_74H138(7);
	P0 = Nixie_Dat[value];//段选
	Select_74H138(0);
}

void DisplaySMG(ulong num)
{
	uchar pos,len;//pos在哪一位显示,len要显示数的位数
	ulong temp = 1;
	for(len = 0; len < 8; len++)
	{
		w[len] = num / temp % 10;
		temp = temp * 10;;
		if(num < temp) break;
	}
	len++;
	for(pos = 0; pos < len; pos++)
		DisplayAlone(pos,w[len-1-pos]);
}

矩阵按键模块(KBD)

sbit k1 = P4^4;
sbit k2 = P4^2;
sbit k3 = P3^5;
sbit k4 = P3^4;

void KeyScan()
{
	uchar hang;
	for(hang = 0; hang < 4; hang++)//P3^0~P3^4轮流给低电平
	{
		P3 = _cror_(0XF7,hang) & 0XFF;//保证P3^5~P3^7高四位不变
		if(k1 == 0)
		{
			Delay(5);//按键消抖
			while(k1 == 0)//检测按键是否松开
			{
				DisplaySMG(KeyValue);
			}
			KeyValue = hang + 4 * 0;
		}
		if(k2 == 0)
		{
			Delay(5);
			while(k2 == 0)
			{
				DisplaySMG(KeyValue);
			}
			KeyValue = hang + 4 * 1;
		}
		if(k3 == 0)
		{
			Delay(5);
			while(k3 == 0)
			{
				DisplaySMG(KeyValue);
			}
			KeyValue = hang + 4 * 2;
		}
		if(k4 == 0)
		{
			Delay(5);
			while(k4 == 0)
			{
				DisplaySMG(KeyValue);
			}
			KeyValue = hang + 4 * 3;
		}
	}
}

矩阵按键只需要用4个按键情况(例如:s4  s5  s8  s9)

sbit R1 = P3^3;
sbit R2 = P3^2;
sbit C1 = P4^4;
sbit C2 = P4^2;

void KeyScan()
{
	C1 = 0;
	C2 = R1 = R2 = 1;
	if(R1 == 0)//s4
	{
		Delay(5);
		while(R1 == 0);
		....
	}
	if(R2 == 0)//s5
	{
		Delay(5);
		while(R2 == 0);
		....
	}
	
	C2 = 0;
	C1 = R1 = R2 = 1;
	if(R1 == 0)//s8
	{
		Delay(5);
		while(R1 == 0)
		....
	}
		
	if(R2 == 0)
	{
		Delay(5);
		while(R2 == 0)
		....
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wu小燕呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值