標題:
一個按鍵控制LED開關和延時進行模式切換 Proteus仿真程序
[打印本頁]
作者:
1805220100
時間:
2020-12-22 11:58
標題:
一個按鍵控制LED開關和延時進行模式切換 Proteus仿真程序
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.png
(19.73 KB, 下載次數: 41)
下載附件
2020-12-22 14:38 上傳
單片機源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P3^4;
sbit led=P3^3;//
/*****************按鍵掃描用的**********************/
#define short_key 5
#define short_small_key 4
#define long_key 100
bit button1_shortflag=0;
bit button1_longflag=0;
uchar flag=2;
void time_init()
{
TMOD=0x01;//方式1
TH0=-10000/256;
TL0=-10000%256;//10ms
ET0=1;//開定時器0中斷
TR0=1;//開定時器
EA=1;//開總中斷
}
/****************************************/
void getkey_number()
{
static uchar button1_time=0;
static uchar button1_time1=0;
if(s1==0)
{
button1_time>=short_key?(button1_time=short_key):button1_time++;//
button1_time1>=long_key?(button1_time1=long_key):button1_time1++;//
}
else
{
if(button1_time1==long_key)
{ button1_time1=0;
button1_time=0;
button1_longflag=1;
}
if(button1_time==short_key)
{
button1_time=0;
button1_time1=0;
button1_shortflag=1;
}
}
}
void main()
{
static uchar k;
time_init();//定時器開啟
while(1)
{
if(button1_shortflag==1)
{
button1_shortflag=0;
flag=2;
if(led==0) led=1;
else led=0;
}
if(button1_longflag==1)
{
button1_longflag=0;
if(++k>=2) k=0;
if(k==0) {flag=1;}
else {flag=0;}
}
}
}
/****************************************/
void time0() interrupt 1
{
static uchar time=0;
static uchar m;
TR0=0;
/*************用于按鍵掃描******************/
if(++time>=2)
{ time=0;
getkey_number();
}
if(flag!=2)
{
if(flag==0)
{
if(++m>=40)
{
m=0; led=!led;
}
}
if(flag==1)
{
led=0;
}
}
TH0=-10000/256;
TL0=-10000%256;
TR0=1;
}
復制代碼
仿真程序51hei提供下載:
一個按鍵控制LED開關和延時切換模式.rar
(96.23 KB, 下載次數: 13)
2020-12-22 11:56 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1