您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页单片机检测按键上升沿下降沿

单片机检测按键上升沿下降沿

来源:飒榕旅游知识分享网
单片机检测按键上升沿下降沿

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit KEY=P1^4; //定义按键输入端口

sbit LED=P1^2; //定义led输出端口 sbit LED1=P1^1; sbit LED2=P1^0;

#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换

sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned 7f,0x6f};//

char unsigned

char

code code

dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xdofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管码unsigned char TempData[8]; //存储显示值的全局变量

void Delay(unsigned int t); //函数声明

void Display(unsigned char FirstBit,unsigned char Num); void DelayUs2x(unsigned char t);//函数声明 void DelayMs(unsigned char t); void main (void)

{ unsigned int num=9999; unsigned int j; unsigned int a; unsigned int m; bit n1; bit n2; bit n3;

KEY=1; //按键输入端口电平置高 n1=1;

n2=KEY; a=0;

while (1) //主循环 { j++; m=!KEY;

if(j==10) //检测当前数值显示了一小段时间后 {j=0; a++; n3=KEY; if(a==100) {a=0; n1=!n1; LED1=n1; }

if((n3^n2)) {n2=n3;

if(n3==0) //上升沿 LED=!LED; else //下降沿 LED2=!LED2; }

if(num>00)//用于显示0~9999 {num=num-m; } else num=9999; }

TempData[0]=dofly_DuanMa[num/1000]; TempData[1]=dofly_DuanMa[(num%1000)/100]; TempData[2]=dofly_DuanMa[((num%1000)%100)/10];

TempData[3]=dofly_DuanMa[((num%1000)%100)%10]; Display(2,4); } }

void DelayUs2x(unsigned char t) { while(--t); }

void DelayMs(unsigned char t) { while(t--) { DelayUs2x(245); DelayUs2x(245); } }

void Delay(unsigned int t) { while(--t); }

void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i;

for(i=0;i { DataPort=0; //清空数据,防止有交替重影 LATCH1=1; //段锁存 LATCH1=0;

DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0;

DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0;

Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影} }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务