按键与数码管C语言例程

发布者:不染尘埃最新更新时间:2012-11-10 来源: 21ic 关键字:按键  数码管  C语言 手机看文章 扫描二维码
随时随地手机看文章

/*
程序效果:按键按下,蜂鸣器响,数码管有相应键值显示按下E键继电器开,
按下C键继电器关注:本空间所有程序仅供参考,所有程序都经实验过,符合题意。
(若全选程序并复制到编译器中进行编译,定会出错,原因不明)
注意:如果无法在keil里编译,请删除每一行的所有前导空白,
*/
#include//头文件
#define uchar unsigned char//宏定义
#define uint  unsigned int
uchar code table[]={0x3f,0x06,0x5b,//数码管显示的数值
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
sbit fmq=P3^4;  //位声明,驱动蜂鸣器的那个管脚
sbit jdq=P3^5;  //位声明,驱动继电器的那个管脚
void delay(uint x) //延时子函数
{
uint i,j;
for(i=x;i>0;i--)for(j=100;j>0;j--);
}
void readkey() //读键盘值子函数
{
uchar key;  //定义一个变量,用于存放按键值
P0=0xfe; //将第一列拉低,扫描是否有按键按下
key=P0;  //读?按键值
if(key!=0xfe)  //判断是否有按键按下
{
 delay(5);  //延时,消抖
 if(key!=0xfe)//真的有按键按下
 {
      if(key==0x7e)  //第一个按键按下
  P2=table[0];//用数码管显示按键值为0
      if(key==0xbe)
  P2=table[4];
      if(key==0xde)
  P2=table[8];
      if(key==0xee)
      {
  P2=table[12]; 
  jdq=1;  //关闭继电器
      }
      fmq=0;   //只要有按键按下蜂鸣器就响
 }
     }
if(P0==0xfe)//检查是否有按键松手
{
 delay(5); //延时消抖
 if(P0==0xfe) // 按键松手
 {
      fmq=1; //关闭蜂鸣器
 }
}
     P0=0xfd;  //以下,同上
     key=P0;
     if(key!=0xfd)
{
 delay(5);
 if(key!=0xfd)
 {
      if(key==0x7d)
  P2=table[1];
      if(key==0xbd)
  P2=table[5];
      if(key==0xdd)
  P2=table[9];
      if(key==0xed)
  P2=table[13];
      fmq=0; 
 }
}
if(P0==0xfd)
{
 delay(5);
 if(P0==0xfd)
 {
      fmq=1;
 }

P0=0xfb;
key=P0;
if(key!=0xfb)
{
  delay(5);
  if(key!=0xfb)
  {
   if(key==0x7b)
     P2=table[2];
   if(key==0xbb)
      P2=table[6];
   if(key==0xdb)
      P2=table[10];
   if(key==0xeb)
      {
      P2=table[14];
      jdq=0; //打开继电器
      }
fmq=0;
   }
}
if(P0==0xfb)
{
  delay(5);
  if(P0==0xfb)
  {
  fmq=1;
  }
}
P0=0xf7;
key=P0;
if(key!=0xf7)
{
 delay(5);
 if(key!=0xf7)
 {
      if(key==0x77)
  P2=table[3];
      if(key==0xb7)
  P2=table[7];
      if(key==0xd7)
  P2=table[11];
      if(key==0xe7)
  P2=table[15];
      fmq=0;
 }
}
if(P0==0xf7)
{
  delay(5);
  if(P0==0xf7)
   {
    fmq=1;
   }
}
}
void main()
{
P1=0xf8; //点亮第一个数码管

P2=table[0];
while(1)
{
readkey(); //调用读键盘子函数
}
}
注意:如果无法在keil里编译,请删除每一行的所有前导空白,

关键字:按键  数码管  C语言 引用地址:按键与数码管C语言例程

上一篇:用单片机C语言精确延时(定时)的方法
下一篇:按键实现加减运算及连续按键检测

推荐阅读最新更新时间:2024-03-16 13:12

KST-STM32学习之数码管扫描中的一个寄存器操作疑问
猝不及防的寄存器操作 读到这里,竟然卡住了,吓得我赶紧回去查查书,在第一章的19页。当然它还是摘自《STM32中文参考手册》的P115页。 再结合一下当初的51,也就不难理解此处的含义,就是清0当前低8位的值,也就是数码管对应的段选,然后接下来要进行读取缓冲区的值,写入到该寄存器中,最下面的if else,当然就是进行位选了,较51只是段选,位选的顺序反了而已。 当然,查阅资料的过程中,还发现一个有意思的函数,《STM32固件库使用手册》 阅读函数实现后发现其实本质也是ODR寄存器的操作,不信看图。。。
[单片机]
KST-STM32学习之<font color='red'>数码管</font>扫描中的一个寄存器操作疑问
小白自学c51笔记之独立按键
先上个单片机开发板上独立按键的图(我的有四个): 上述按键中23之间,14之间(即引脚之间距离长的)本来就是连通的,按下按键后1和2,3和4连通,如果想让按键连接两支路则可把两支路分别连到1,2或分别连到3,4(我觉得连到任两引脚都可)。 开发板原理图上独立按键模块: GND为接地即低电压,如果按键k1按下则接通相当于一条导线,那么对应的P3^1也为低电压。 抖动现象:一般持续时间为5ms~10ms 按下按键后 在程序中判断P3^1或其他三个口电压是否为低电压,即0时由于存在抖动,可能造成错误,所以要消除抖动。 为了消除抖动现象,有两种方法,一是硬件消抖,二是软件消抖。本质都是延时(这个本质是我自己方便理
[单片机]
小白自学c51笔记之独立<font color='red'>按键</font>
按键说拜 汽车中控的过去式将来时
汽车外部的美大多时候是供旁人欣赏,而内部按键、仪表等才是专为驾驶者打造的环境,其氛围好坏直接影响了心情。只就视觉感受来说,如果非要在外观与内饰中取舍,就要看当事人更倾向于“恶心自己”还是“恶心别人”;但想来更多人会选择外观,无论是出于面子考虑亦或惯性使然。总之,车迷和消费者聚焦于外观、动力以及品牌的时间会远大于内饰,好像百年来汽车中控一直只是那么个样儿,没有革命也没有太多科技含量,但事实真是这样吗? 中控布局?当汽车还只是纯粹的交通工具 无论地域文化差异如何,一个人的座驾往往能反映出社会地位或金钱实力,但汽车发展初期,车对于人的意义除了代步再无其他,它们结构简单且缺乏个性。以福特T型车为例,其引导了生产方式工业革命,但
[汽车电子]
跟<font color='red'>按键</font>说拜 汽车中控的过去式将来时
C51单片机对共阳极数码管的控制设计
这是共阳极数码管的电路图,其中JP3接到P0口,JP3的8-1对应数码管的a-dp引脚。 共阳极数码管的编码表如下,注意a---最低位,dp---最高位: 【0---3】0xco,0xf9,0xa4,0xb0, 【4---7】0x99,0x92,0x82,0xf8, 【8---B】0x80,0x90,0x88,0x83, 【C---F】0xc6,0xa1,0x86,0x8e。 C51程序显示数字0-9: #include #define uchar unsigned char void delay(); uchar smg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
[单片机]
C51单片机对共阳极<font color='red'>数码管</font>的控制设计
汇编写51单片机之按键检测
二话不说,先上代码: ORG 00H LOOP: JB P3.4,LOOP LCALL DELAY JB P3.4,LOOP LOOP1:JB P3.4,LOOP JB P1.0,TC1 SETB P1.0 JMP LOOP TC1: CLR P1.0 JMP LOOP DELAY: MOV R7,#50 D1: MOV R6,#50 D2: DJNZ R6,D2 DJNZ R7,D1 RET END 我就不说什么数码管的静态显示,动态显示了,会点LED了,数码管就是比较复杂的点LED。所以现在来说检测io口的状态。我的按键是P3.4,平常位高电平,按下即为低电平。实现:按键按一下灯的状态就变为相反状态 ORG 00H L
[单片机]
AVR128的程序——独立按键控制数码管0~99递增
#include iom128v.h #define uchar unsigned char #define uint unsigned int void Delayus(uint US); void Delayms(uint MS); void display(uchar FirstBit,uchar Num); uchar TempData ; uchar WeiMa = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar led_discode ={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,
[单片机]
MSP430 按键程序 (含电路图及源代码)
#i nclude msp430x14x.h void Init_Port(void) { //将P1口所有的管脚在初始化的时候设置为输入方式 P1DIR = 0; //将P1口所有的管脚设置为一般I/O口 P1SEL = 0; // 将P1.4 P1.5 P1.6 P1.7设置为输出方向 P1DIR |= BIT4; P1DIR |= BIT5; P1DIR |= BIT6; P1DIR |= BIT7; //先输出低电平 P1OUT = 0x00; // 将中断寄存器清零 P1IE = 0; P1IES = 0; P1IFG = 0; //打开管脚的中断功能 //对应的管脚由高到低电平跳变使相应的标志置位 P
[单片机]
MSP430 <font color='red'>按键</font>程序 (含电路图及源代码)
郭 靖:[原创]光控、单按键开关壁座电路
在白天时,由于室内亮度较高,按下按键开关负载(继电器)不工作。 在夜晚或室内亮度较暗时,按下按键开关,负载才能启动工作,这也就是说,按下按键后负载是否启动,需视乎于室内的亮度,而一旦负载启动后,无论室内的亮度如何,再按动按键开关也能将负载关闭。 PR是亮度起控调节电阻,也可以根据需要增大或减少该电阻值。 光敏电阻要注意安装在按动按键时不被遮挡的位置上(如可能的话,尽量安装在无法人为遮挡的地方),否则,在室内亮度较高时,按下按键后负载会误启动。
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved