网站添加提醒,网站网页的区别与联系,网站建设时如何建立客户信赖感,深圳网站建设服务类公司优缺点目录 一:动态数码管模块
1:介绍 2:共阴极和共阳极
A:共阴极
B:共阳极
C:转化表 3:74HC138译码器
4:74HC138译码器控制动态数码管
5:数码管显示完整代码
二:矩阵按键模块
1:介绍
2:原理图 3:矩阵按键代码 一:动态数码管模块
1:介绍 LED数码管#xff1a;数码管是一种…目录 一:动态数码管模块
1:介绍 2:共阴极和共阳极
A:共阴极
B:共阳极
C:转化表 3:74HC138译码器
4:74HC138译码器控制动态数码管
5:数码管显示完整代码
二:矩阵按键模块
1:介绍
2:原理图 3:矩阵按键代码 一:动态数码管模块
1:介绍 LED数码管数码管是一种简单、廉价的显示器是由多个发光二极管封装在一起组成“8”字型的器件; 我们的51单片机的1个数码管就相当于由8个发光二极管封装在一起, 所以我们只需要控制8个发光二极管封就可以实现数码管的显示,这款单片机是共阴极连接 数码管扫描输出扫描 原理显示第1位→显示第2位→显示第3位→……然后快速循环这个过程最终实现所有数码管同时显示的效果,节省I/O口 2:共阴极和共阳极
我们这款单片机是共阴极所以我们主要介绍共阳极连接
A:共阴极
1.LED共阴极是指LED灯中的二极管的阴极有一个共同的接点并且该接点连接在GND端即处于低电平状态。 我们只需要给它一个高电频(1)就可以点亮他 从高位到低位读取
eg:让第一个数码管显示0 数码管段码表对应的0,1,2,3,4,5,6,7,8,9
unsigned char NixieTable[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};B:共阳极 LED共阳极是指LED灯中的二极管的阳极有一个共同的接点并且该接点连接在VCC端即处于高电平状态。 我们只需要给它一个低电频(0)就可以点亮他 数码管段码表对应的0,1,2,3,4,5,6,7,8,9
unsigned char LED7Code[] {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82,0xf8, 0x80, 0x90};C:转化表 3:74HC138译码器 概述 D74HC138D 是一种三通道输入、八通道输出译码器,主要应用于消费类电子产品 3个io口控制8位,因为单片机上面的资源有限 通过A0~A2数据的输入来控制Y0~Y7数据的输出;实现 3个io口控制8位,
4:74HC138译码器控制动态数码管 eg:点亮LED8 EDL1对应的是Y7的输出端口,所以只需要控制A,B,C输出Y7即可 从高位到低位读和写; (只需要将二进制转化位10进制的7即可)
P2_41;P2_31;P2_21;//二进制111转化十机制为:7,输出Y7;当用户选择1时点亮LED8
5:数码管显示完整代码 #include REGX52.H
unsigned char NixieTable[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//延时函数的声明
void Delay(unsigned int xms);
/*** brief 数码管的选择和读取* param Location:选择那一个数码管; Number:选择显示那个数字(0~9)* retval 无*/
void Nixie(unsigned char Location,Number)
{switch (Location) {case 1:P2_41;P2_31;P2_21;break;//二进制111转化十机制为:7,当用户选择1时点亮LED8case 2:P2_41;P2_31;P2_20;break;//二进制110转化十机制为:6,当用户选择2时点亮LED7case 3:P2_41;P2_30;P2_21;break;//二进制101转化十机制为:5,当用户选择3时点亮LED6case 4:P2_41;P2_30;P2_20;break;//二进制100转化十机制为:4,当用户选择4时点亮LED5case 5:P2_40;P2_31;P2_21;break;//二进制11(高位补零)转化十机制为:3,当用户选择5时点亮LED4case 6:P2_40;P2_31;P2_20;break;//二进制10(高位补零)转化十机制为:2,当用户选择6时点亮LED3case 7:P2_40;P2_30;P2_21;break;//二进制1(高位补零)转化十机制为:1,当用户选择7时点亮LED2case 8:P2_40;P2_30;P2_20;break;//二进制0(高位补零)转化十机制为:0,当用户选择3时点亮LED1 } P0NixieTable[Number]; //段码输出Delay(1); //显示一段时间P00x00; //段码清0消影
}void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i 2;j 239;do{while (--j);} while (--i);}
}
void main()
{while(1){Nixie(1,1); //在数码管的第1位置显示1Delay(20);Nixie(2,2); //在数码管的第2位置显示2Delay(20);Nixie(3,3); //在数码管的第3位置显示3Delay(20);}
}
二:矩阵按键模块
1:介绍 矩阵键盘扫描输入扫描 原理读取第1行(列)→读取第2行(列) →读取第3行(列) → ……然后快速循环这个过程最终实现所有按键同时检测的效果,节省I/O口
2:原理图 按下为0;我们使用列扫描,
eg:按下1,5,9,13
1:使他P1端口全部为1
2:1,5,9,13为一列,他们的共同端口为P1^3,显示共同端口为P1^3为0;
3:依次使P1_7, P1_6, P1_5, P1_4为0, 3:矩阵按键代码
#include REGX52.H//声明
void Delay(unsigned int xms)
/*** brief 矩阵键盘读取按键键码* param 无* retval KeyNumber 按下按键的键码值如果按键按下不放程序会停留在此函数松手的一瞬间返回按键键码没有按键按下时返回0*/
unsigned char MatrixKey()
{unsigned char KeyNumber0;P10xFF;P1_30;if(P1_70){Delay(20);while(P1_70);Delay(20);KeyNumber1;}if(P1_60){Delay(20);while(P1_60);Delay(20);KeyNumber5;}if(P1_50){Delay(20);while(P1_50);Delay(20);KeyNumber9;}if(P1_40){Delay(20);while(P1_40);Delay(20);KeyNumber13;}P10xFF;P1_20;if(P1_70){Delay(20);while(P1_70);Delay(20);KeyNumber2;}if(P1_60){Delay(20);while(P1_60);Delay(20);KeyNumber6;}if(P1_50){Delay(20);while(P1_50);Delay(20);KeyNumber10;}if(P1_40){Delay(20);while(P1_40);Delay(20);KeyNumber14;}P10xFF;P1_10;if(P1_70){Delay(20);while(P1_70);Delay(20);KeyNumber3;}if(P1_60){Delay(20);while(P1_60);Delay(20);KeyNumber7;}if(P1_50){Delay(20);while(P1_50);Delay(20);KeyNumber11;}if(P1_40){Delay(20);while(P1_40);Delay(20);KeyNumber15;}P10xFF;P1_00;if(P1_70){Delay(20);while(P1_70);Delay(20);KeyNumber4;}if(P1_60){Delay(20);while(P1_60);Delay(20);KeyNumber8;}if(P1_50){Delay(20);while(P1_50);Delay(20);KeyNumber12;}if(P1_40){Delay(20);while(P1_40);Delay(20);KeyNumber16;}return KeyNumber;
}
void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i 2;j 239;do{while (--j);} while (--i);}
}