自己写的按键单片机程序

发布者:科技小巨人最新更新时间:2015-04-29 来源: 51hei关键字:按键  单片机程序 手机看文章 扫描二维码
随时随地手机看文章
用4个按键来控制数码管显示的内容
#include
#define duan   P0 //段选
#define wei P2 //位选
unsigned char code wei1[8] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位选控制   查表的方法控制
unsigned char code duan1[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的显示码
unsigned char ge,shi,bai,a,b;
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
void keys();  //按键  函数
void s(unsigned char xms); //延时函数
void DigDisplay(); //动态显示函数
void init(); //初始化函数
void main(void)
{
 init();
 while(1)
 {
  DigDisplay();
  keys(); 
 }    
}

void DigDisplay()
{
 unsigned char i;
 unsigned int j;

 bai=a/100;
 shi=a%100/10;
 ge=a%10;
 
 i=0;
 wei = wei1[i]; //发送位选
 duan = duan1[bai];     //发送段码
 j = 10;      //扫描间隔时间设定
 while(j--); 
 duan = 0x00;   //消隐
 i++;

 wei = wei1[i]; //发送位选
 duan = duan1[shi];     //发送段码
 j = 10;      //扫描间隔时间设定
 while(j--); 
 duan = 0x00;   //消隐
 i++;

 wei = wei1[i]; //发送位选
 duan = duan1[ge];     //发送段码
 j = 10;      //扫描间隔时间设定
 while(j--); 
 duan = 0x00;   //消隐
}

void init()
{
 key1=1;
 key2=1;
 key3=1;
 key4=1;
 TMOD=0X01;
 TH0=(65536-45872)/256;
 TL0=(65536-45872)%256;
 EA=1;
 ET0=1;
}

void s(unsigned char xms)
{
 unsigned char x,y;
 for(x=xms;x>0;x--)
  for(y=110;y>0;y--);
}
void times() interrupt 1
{
 TH0=(65536-45872)/256;
 TL0=(65536-45872)%256;
 b++;
 if(b==20)
 {
  b=0;
  a++;
  if(a==256)
  {
   a=0;
  }
 }
}
void keys()
{
 if(key1==0)
 {
  s(10);
  if(key1==0)
  {
   a++;
   TR0=0;
   if(a==256)
   a=0;
   while(!key1)
   DigDisplay();
  }
 }

 if(key2==0)
 {
  s(10);
  if(key2==0)
  {
   TR0=0;
   if(a==0)
   a=256;
   a--;
   while(!key2)
   DigDisplay();
  }
 }

 if(key3==0)
 {
  s(10);
  if(key3==0)
  {
   TR0=0;
   a=0;
   while(!key3)
   DigDisplay();
  }
 }

 if(key4==0)
 {
  s(10);
  if(key4==0)
  {
   while(!key4)
   DigDisplay();
   TR0=~TR0;
  }
 }

}
关键字:按键  单片机程序 引用地址:自己写的按键单片机程序

上一篇:按键控制数码管加1 c程序
下一篇:串口通信实验程序(数据接收)

推荐阅读最新更新时间:2024-03-16 14:00

单片机复位程序
今天在网上看到这么一个单片机复位的程序,这个程序据说是一个大三的学生写出来的,不错,写的很有一定的道理,其C编程也达到了一定程度了【小盒子我还是很佩服这个人的】。下面我们来看看这个代码: void main(void) { unsigned char code rst ={0xe4,0xc0,0xe0,0xc0,0xe0,0x32}; // 复位代码 (*((void (*)())(rst)))(); // 执行上一行代码,将rst数组当函数调用 } 第一句定义一个数组rst ,数组内数据就是完成复位功能的汇编机器码,具体对应关系为: clr a == 0xe4、push acc == 0xc0,0xe0、reti
[单片机]
ADC0832模数转换MSP430单片机程序+电路图
下面是电路图: ADC0832封装图 ADC0832与单片机连接图 ADC0832时序图 程序源码下载: http://www.51hei.com/f/0832430.rar #include msp430f2121.h #define DO (P1IN&BIT7) #define uchar unsigned char #define uint unsigned int /*********************************************** sbit cs=P2^0; sbit clk=P2^1; sbit DI=P2^2; sbit D
[单片机]
ADC0832模数转换MSP430<font color='red'>单片机</font><font color='red'>程序</font>+电路图
假的 罗永浩否认网传锤子T3按键渲染图
    此前罗永浩曾自曝锤子T系列是不会放弃实体键的,由于锤子T3将加入指纹识别功能,因此大家对于锤子T3的按键设计都充满了好奇。昨日晚间一组声称是锤子T3底部渲染图的照片在网络上流传,随后在微博网友向罗永浩求证时被否认。   在网络流传的渲染图中,我们能看到老罗坚持的三颗实体按键,中间那颗最大的应该会用于指纹识别,造型类似三星S7的Home键,但边角更加圆润,同时两边两颗细长的按键也采用了圆润的设计。   而随后有微博网友向罗永浩进行求证时,遭到了罗永浩的否认——“假的”,从罗永浩的辟谣来看锤子T3底部的实体按键并不会采用这样的设计,至此锤子T3的指纹识别实体按键设计仍是个谜。     以设计著称的锤子在
[手机便携]
51单片机超声波测距程序C调汇编
#include reg51.h #include absacc.h //绝对地址存取 #include math.h #pragma NOREGPARMS //固定单元参数传递,以减少C与汇编在寄存器Rn参数传 #define f DBYTE //cm #define g DBYTE //dm #define h DBYTE //m #define i DBYTE unsigned data a _at_ 0x32; // #define a DWORD(双字节) / DBYTE(1个字节),这两种做法都不行?定义错
[单片机]
AVR单片机TO的比较中断程序
#include avr/io.h #include avr/interrupt.h #define F_CPU 8000000UL int k; int main(void) { DDRA=0XFF;//PA口输出设定 PORTA=0X55;//PA口初值设定 TCNT0=0; //记说初值设定 OCR0=255;//比较值设定 TIMSK=0X02;//T0中断比较中断开 TCCR0=0X05;//1024分频 sei();//开总中断 while(1); } ISR(TIMER0_COMP_vect) { k++; if(k 200) { k=0; PORTA=~PORTA
[单片机]
STM32中关于检测按键的一些问题
1.对比用延时消抖的方式检测按键和用中断的方式检测按键:对于中断检测按键的方式,如果不在程序中做一些再次检测按键是否按下等处理的话,其精度是不如用延时消抖的方式加测按键来的可靠。 2.原因在于:我们在利用中断检测按键时,在中断程序中并没有延时,那么就会存在一个问题,当按下按键时,会可能有多次抖动,尽管我们设置的是下降沿触发中断,但这多次的抖动中也同样可能会有多次下降沿,故就有可能多次触发中断。 3.解决的办法还是只能通过延时,修正后的代码见下图3;而对于《STM32库开发实战指南》 P90 中的代码是会引起误触发的。 图1:传统方式的延时消抖检测按键程序 图2:粗略的延时函数 图3:修正后的利用中断方式检
[单片机]
STM32中关于检测<font color='red'>按键</font>的一些问题
51单片机数字频率计仿真(可按键切换量程)
之前课程设计做的 误差很小 分享给大家 里面有程序和仿真 也做过实物 可以按键切换量程10倍和1倍 单片机源程序如下: #include reg52.h #include intrins.h #define uint unsigned int #define uchar unsigned char sbit k1=P3^0; sbit k2=P2^0; sbit LED=P2^1; unsigned char code dispbit ={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管 unsigned char code dispcode ={0x3f,0x06,
[单片机]
51<font color='red'>单片机</font>数字频率计仿真(可<font color='red'>按键</font>切换量程)
在应用编程MAXQ微控制器中可分区擦除的程序和数
摘要:本应用笔记介绍了MAXQ微控制器中的程序和数据闪存,以及如何使用内置的应用ROM对闪存进行擦/写。本应用笔记适用于所有使用分区擦除闪存的MAXQ微控制器。 引言 本应用笔记介绍了如何管理MAXQ微控制器中、可分区擦除的内部数据和程序闪存。一般性地介绍了怎样构建一个引导装载应用,实现程序闪存的在应用编程。注意:本文不适于那些使用页擦除闪存的MAXQ微控制器,即那些只允许少量闪存被擦除的微控制器。各MAXQ数据手册都会说明其所采用的闪存类型。 闪存简介 存储器配置 本应用笔记给出了多种不同尺寸的闪存配置,并不完全和某一特定MAXQ器件相符。这些配置仅用于本文中的实例。各MAXQ器件的数据手册会列出该器件的存储器配置。 引
[模拟电子]
在应用编程MAXQ<font color='red'>微控制器</font>中可分区擦除的<font color='red'>程序</font>和数
热门资源推荐
热门放大器推荐
  •  pdf文件嵌入式C语言自我修养——从芯片、编译器到操作系统 带目录 文字版
  •  zip文件数据采集系统源代码
  •  zip文件detector_das_HW
  •  rar文件简易电流源主板程序
  • 系统发生错误

    系统发生错误

    您可以选择 [ 重试 ] [ 返回 ] 或者 [ 回到首页 ]

    [ 错误信息 ]

    页面错误!请稍后再试~

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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