功能:数码管显示4X4键盘矩阵按键 PROTEUS 和51单片机教程
程序源代码如下:
/*
数码管显示4X4键盘矩阵按键
*/
#include typedef unsigned char uint8;
typedef unsigned int uint16;
#define BUZZER() P3 ^= 0x01
code uint8 LED_CODE[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay(uint16 x)
{
uint16 i,j;
for(i = x; i > 0; i --)
for(j = 114; j > 0; j --);
}
uint8 Pre_KeyNO = 16,KeyNO = 16;
void Keys_Scan()
{
uint8 Tmp;
P1 = 0x0f;
delay(1);
Tmp = P1 ^ 0x0f;//高4位输出,低4位输入
switch(Tmp)
{
case 1: KeyNO = 0; break;
case 2: KeyNO = 1; break;
case 4: KeyNO = 2; break;
case 8: KeyNO = 3; break;
default: KeyNO = 16;
}
P1 = 0xf0;
delay(1);
Tmp = P1 >> 4 ^ 0x0f;//高4位输入,低4位输出
switch(Tmp)
{
case 1: KeyNO += 0; break;
case 2: KeyNO += 4; break;
case 4: KeyNO += 8; break;
case 8: KeyNO += 12;
}
}
void Beep()
{
uint8 i;
for(i=0;i<100;i++)
{
delay(1);BUZZER();
}
}
void main()
{
P0 = 0x00;
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0)
Keys_Scan();
if(Pre_KeyNO != KeyNO)
{
P0 = LED_CODE[KeyNO];
Beep();
Pre_KeyNO = KeyNO;
}
delay(10);
}
}
关键字:数码管显示 4X4键盘 矩阵按键
引用地址:
数码管显示4X4键盘矩阵按键
推荐阅读最新更新时间:2024-10-28 11:41
基于AVR单片机的DS1302数码管时间显示C语言程序设计
#include iom16v.h #include macros.h #define uchar unsigned char #define uint unsigned int #include DS1302_drive.h uchar K1_FLAG=0; //定义按键标志位,当按下K1键时,该位置1,K1键未按下时,该位为0。 uchar const bit_tab ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选表,用来选择哪一只数码管进行显示 uchar const seg_data ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0
[单片机]
MSP430F149流水灯闪烁以及数码管的显示
今天下午写了一个流水灯闪烁的实验,总的来说,不难,因为这块板子集合的电路图没有上一块那么复杂,所以总的来说,还是比较顺手,开始的时候,出现流水灯没有流转的现象,原来是没有加入延时函数,后来经过调整,结果很快就出来了 电路示意图: 示例代码: #include msp430x14x.h #define CPU_F ((double)8000000) #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(do
[单片机]
我也玩单片机:8只数码管滚动显示单个数字
滚动显示0~7 源代码 1 #include reg52.h 2 #define uchar unsigned char 3 #define uint unsigned int 4 uchar code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xff};//数字0~F的编码表。本程序只用了0~7 5 uchar code tab ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//从左到右位置的地址变。1~8对应管脚高电平有效。本程序用位左移操作更佳。 6 void delay(uint z) 7 { 8
[单片机]
数码管显示数字之C语言模拟
#define N 10 //最多可以输入10个数字 #i nclude stdio.h int check(char array ,int n) { //检查输入是否全为数字 int i; for(i=0;i n;i++) if(array '0'||array '9') return -1; return 1; } main() { char alpha ={{'*','*','*','*'},{'*',' ',' ','*'},{'*&
[单片机]
单片机系统中八段LED数码管显示器设计基础
在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 引言:还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。 八段LED数码管显示器 单片机静态显示接口 八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极
[单片机]
stc15f104e单片机+max7219+ds18B02数码管温度显示
成品 电路图 PCB 图 CAD 外壳 热转印制PCB板 显微镜改台钻打洞 元件电路板 运行程序 15f104e是1T运行速度,晶体速度11.0529M 使用12T芯片延时降低10倍 #include reg52.h #include intrins.h #define uchar unsigned char bit flag1s = 0; //1s 定时标志 unsigned char T0RH = 0; //T0 重载值的高字节 unsigned char T0RL = 0; //T0 重载值的低字节 void ConfigTimer0(unsigned int ms); unsigned c
[单片机]
51实验6:最后一个数码管显示0-9的任意一个数(不要求会变
#include reg52.h typedef unsigned int u16; typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; void delay(u16 i) { while(i--); } u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79, 0x71}; void DigDisplay() { //位置 switch(0)
[单片机]
(五).单片机输出电路的实践——数码管显示电路的设计
一.数码管显示电路设计 数码管分为共阴和共阳两种,一种是将LED内部所有的阳极连到一起,并通过com端引出。共阴则反之。 当锁存使能端为高时,这些器件的锁存对于数据是透明的(也就是说输出同步)。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。 数码管显示有静态显示和动态显示两种,静态显示即为对数码 管的每一段进行编码控制达到显示指定数字的目的。动态显示即通过锁存的方法利用人的视觉暂留,通过有限的单片机IO口显示更多的数码管。 如图,利用两个锁存器分别控制数码管的段选和位选,即利用了有限的IO口资源实现了控制多个数码管动态扫描显示的功能。 注:74HC573的D0-D7口分别接在单片机的IO口上。
[单片机]