单片机4*4按键数码管显示0-9

#include<reg51.h>
#define KEY    P1  //键盘
#define SEG    P0  //数码管
sbit COM=P2^0; // 数码管com
sbit OC = P2^1;//573锁存器 

char code TAB[]={//0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x84,0x84,0xbf,0x7f};//共阳极
                0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7D,0x07,0x7f,0x6F};  //共阴极

unsigned char scan[4]={0xef,0xdf,0xbf,0x7f}; //扫描码 低电平动作扫描

void delay1ms(int x);

void main(void)
{
    unsigned char col,row;           //定义列行
    unsigned char rowkey,kcode;      //定义按键,按键码
     COM=0; //点亮数码管
     OC=0; // 低电平使能
    while(1)
    {
        for(col=0;col<4;col++)      //4列按键
       {
        KEY =scan[col];
        rowkey = ~KEY&0X0F;          //例如 读入低4位 反相清除高4位,求出行键值
        while(rowkey!=0)          //如果按下键
        {
              if(rowkey==0x01)   row = 0;     //如果第0行被按下
            if(rowkey ==0x02)  row = 1;     //如果第1行被按下
            if(rowkey == 0x04) row = 2;     //如果第2行被按下
            if(rowkey == 0x08) row = 3;     //如果第3行被按下
            kcode = 4*col+row;      //算出按键号码
            SEG = TAB[kcode];      //显示
            while(rowkey!=0)      //如果未放开
            rowkey = ~ KEY&0x0f;  //再次读入

         }

             delay1ms(1);    //消除抖动1ms
       }
   }
} 

    void delay1ms(int x) //延迟消抖
{
     int i,j;
     for(i=0;i<x;i++)
     for(j=0;j<120;j++);  // 120 * 8 = 960us = 1ms
}

时间: 2024-12-23 16:34:25

单片机4*4按键数码管显示0-9的相关文章

51单片机第三弹---数码管显示

先把定义拉过来: LED数码管是由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极.LED数码管常用的段数一般为7段,有的另加一个小数点 .LED数码管根据LED的接法不同,分为共阴和共阳两类 . 贴原理图 其实就两点 :由于板子上有8个数码管,而每个数码管有8段,称选择显示哪一个数码管的东西为位选,称单个数码管显示数字几的东西为段选,位选由P2.2  p2.3 p2.4 控制 数码管IO口为P0 对于每一个数码管,显示数字几只要控制

单片机编程:让led数码管显示数字0到9

led数码管在单片机系统中应用非常普遍,是由发光二极管构成的.数码管由7个发光二极管组成的一个"日"字形,如果需要显示小数点,那么就再加上一个点,就是8段数码管. 数码管显示亮度高,相应速度快,分共阴极和共阳极两种形式,常用的有单个的和4联的,还有两联的和专门用来显示时间的. /*************************************************** *程序功能:点亮一个led数码管,让它显示数字从0到9 * *日期:2015.5.11 * *******

单片机与控制实验(1)——数码管显示

一.实验目的和要求 初步学习和掌握MCS-51的体系结构和汇编语言,了解Keil编程环境和程序下载工具的使用方法.了解数码管输出的原理及编程方式. 二.实验设备 单片机测控实验系统 STC-ISP程序下载工具 Keil开发环境 三.实验内容 使用MCS-51汇编语言编写程序,完成如下功能: 1. 使用三个数码管显示十进制数值(001~999,可任意设置): 2. 每隔1秒,该数值自动减一,直到归零; 3. 归零后的下一秒,显示一个新的十进制数值(001~999,可任意设置): 4. 每隔1秒,新

一天:51单片机从入门到一个动态数码管显示数字控制

最近进的公司是一个做路由器的..很多嵌入式工程师.有个项目( 智能空调控制)是跟嵌入式工程师对接,我做APP+PHP..他做服务器.我们用MQTT(由于emqtt是用erlang写的,所以我也学了点erlang,后期有时间分享一下,这个语言很好,很强大.特别抽象).这个项目激发了我对嵌入式的兴趣,于是乎.开始从51单片机搞起了..所以就有了这篇文章...今天搞得东西挺多.我最近都是笔记形式,不想以前写的那么详细...因为学的东西太多,白天在公司搞项目,没时间写太具体... 今天学了什么呢? >k

51单片机:独立按键与矩阵按键控制数码管

一,独立按键注意一下几点 >按下的时候,电压被拉低,所以IO口要传低电平( 0x0 ) >按下的时候要消除抖动 ( 延时10ms ),在判断,是否还是低电平,再做业务处理 下面这段程序,就是通过一个独立按键连接到p1口,控制静态数码管的 一段 进行亮和灭的切换. #include <reg52.h> sbit key_control = P1^0; sbit led = P0^0; typedef unsigned char u8; typedef unsigned int u16

【单片机】时钟及温度的显示

回头看我所写的文章,基本都是软件方面的,是个典型的"欺软怕硬"的人.然而,在最开始的时候,我学习的是硬件.在前面文章<我的2013–一起从心开始>一文中写道,我在大一暑假的时候开始了单片机的学习,在大二.大三期间做过些小东西.刚进入程序员的领域的时候,显然是单片机带我入了门.下面我将写写用单片机做过的一些东西,权当纪念. 本文介绍我大一暑假学完单片机后,在大二上学期为参加学校星火杯而完成的作品(最终没有参加比赛).这个电子制作是关于用单片机显示时间的作品,其功能就用单片机控

第3讲 数码管显示

一. 数码管显示原理 我们最经常使用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其它的基本同样.所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形.数码管又分为共阴极和共阳极两种类型,事实上共阴极就是将八个LED的阴极连在一起,让其接地,这样给不论什么一个LED的还有一端高电平,它便能点亮.而共阳极就是将八个LED的阳极连在一起.其原理图例如以下. 当中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电

单片机练习 - DS18B20温度转换与显示

DS18B20 数字温度传感器(参考:智能温度传感器DS18B20的原理与应用)是DALLAS 公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点.因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计.DS18B20 产品的特点: (1).只要求一个I/O 口即可实现通信.(2).在DS18B20 中的每个器件上都有独一无二的序列号.(3).实际应用中不需要外部任何元器件即可实现测温.(4).测量温度范围在-55 到+125℃之间; 在-10 ~ +8

7段数码管显示驱动代码

数码管显示进行简单的介绍,数码管显示原理在数电中已经给出了比较详细的介绍,我就不赘述了,因为我们用的是至芯的开发板,其上的数码管显示模块采用的是共阳极的数码管,为低电平有效,0-F的显示码依次为:    数码管的输入有3个位选和8个段选给出,位选信号sel来控制哪个数码管先亮,段选信号seg来控制数码管显示什么,位选本来应该是有6个的但是为了节约资源,采用了3-8译码器将6根线减少到3根,节约了FPGA的引脚资源. 因为人眼有一个视觉载留,所以60HZ来扫描的时候,数码管会让人眼觉得是同时点亮,