//-------------------------------------头文件-------------------------------------- #include <reg52.h> #include <absacc.h> #include <intrins.h> //-------------------------------------头文件--------------------------------------
//-------------------------------------引脚定义------------------------------------ sbit D0 = P0^0; sbit D1 = P0^1; sbit P10 = P1^0; sbit D2 = P0^2; //按钮 sbit P33 = P3^3; //喂狗 sbit P23 = P2^3; // sbit P22 = P2^2; //data sbit P21 = P2^1; //clk sbit P20 = P2^0; //latch //-------------------------------------引脚定义------------------------------------
int WDogZdJs; //喂狗中断计数
void DLY50MS( ) //延时50ms { int i,j; for (i=0; i<100; i++) { for(j=0; j<10 ;j++) { ; } } }
void leddisplay() //数码管全亮 { int i; for (i=0;i<32;i++) { P21 = 0 ; P22 = 1; _nop_(); _nop_(); P21 = 1; } _nop_(); _nop_(); P20 = 1; //在时钟下降沿把数据送出 _nop_(); _nop_(); P20 = 0; }
void leddisplay2() //数码管全灭 { int i; for (i=0;i<32;i++) { P21 = 0 ; P22 = 0; _nop_(); _nop_(); P21 = 1; } _nop_(); _nop_(); P20 = 1; //在时钟下降沿把数据送出 _nop_(); _nop_(); P20 = 0; }
void timer0(void) interrupt 1 //喂狗中断程序 { TH0 = (65536-5000)/256; //重载计数初值 每 5 ms 中断一次 TL0 = (65536-5000)%256; WDogZdJs ++; if ( WDogZdJs >= 20 ) { P33 =! P33; //不停喂狗 WDogZdJs = 0; } }
//-------------------------------------主程序--------------------------------------- void main() { // int i; DLY50MS( ); P0 = 0xff; P1 = 0xff; P2 = 0xff; P3 = 0xff; P33 =! P33; P10 = 0; leddisplay(); while(1) { if(D1==0) { leddisplay2(); } /* P23 = 0; for (i=0; i<50; i++) { _nop_(); } D2 = 0; //D2 输出 0 ,希望 57462 输出0 for (i=0; i<50; i++) { _nop_(); } P23 = 1; */ } } //-------------------------------------主程序---------------------------------------
请教:当一个 按钮按下时 D1 为0
现在情况是: 因为首先数码管全亮的 当我把按纽按下,数码管就全灭了, 可是当我把手松开,数码管又全亮了, 应该松开后,也是全灭的啊
各位大哥,我的程序应该怎么改啊? 谢谢!
|