一种是普通io口,一种是中d的形式,普通io口是按下按键触发按键子程序案件,指程序经过一段时间的,比如20~50毫秒的延时再次毒案件,如果按键值还是会按下,那么就延时等待按键抬起按键,抬起后执行按键程序,然后返回中d也是一样的,按下按键之后进入中段读按键状态,是否还是为按一下是按一下等待延时再读等待,然后等待案件采取后执行相应的代码,然后退出总代。
程序清单如下:
#include <reg51.h >// 51单片机头文件
#define uchar unsigned char // 宏定义,用uchar替代无符号字符型
#define uint unsigned int // 宏定义,用uint 替代无符号整数型
sbit Key = P2 ^ 7
uchar Count = 0
uchar code DataChar[10] = // 定义数码管的段码 '0'~'9'、'-'、' ' 'P'
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
}//延时N毫秒
void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的
{
uint x,y
for( x=Nx>0x-- )
for( y=110y>0y-- )
}
//数码管显示 // 显示方式为动态扫描,视觉暂留原理
void Display( uchar Num ) // *p指向Main函数中的数组ShowNum的首地址
{
P0 = DataChar[ Num ]// 向P0赋段码值
DelayNms(2)// 短暂的延时
P0 = 0x00// 让数码管熄灭,否则会造成数字重叠
}
void main( void )
{
while(1)
{
if( Key == 0 )
{
DelayNms(30)
if( Key == 0 )
{
Count += 1
Count = (Count>9)? 0 : Count
}
while( !Key )
}
Display( Count )
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)