欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 按下按鍵響30次 [打印本頁]

作者: liuyang    時間: 2012-5-29 18:41
標題: 按下按鍵響30次
/*
必要操作:連接左上角3個跳線
*/
#include <AT89X52.H>     //包含頭文件
#define led P0       //定義LED口
#define shuma P0      //定義數(shù)碼管數(shù)據(jù)口
sbit LED_0=P1^0;      //定義4個控制腳
sbit LED_1=P1^1;
sbit LED_2=P1^2;
sbit LED_3=P1^3;
sbit buz=P3^4;       //定義蜂鳴器所在口

unsigned char flag;      //定義測試部分標志
/*=====0-9=====A-G=====*/
unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
             0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
            //共陽極數(shù)碼管的段碼0 1 2 3 4 5 6 7 8 9 A B C D E F
void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);
void Delay(unsigned long i)    //延時函數(shù)
{
 while(i--);
}
void delayx(unsigned int x)     //延時函數(shù),有效效果為數(shù)碼管不閃爍
{
   unsigned int i;
   for(i=0;i<x;i++);
}
void main(void)
{
 unsigned char d;     //定義狀態(tài)變量d
 unsigned int i;
 flag=1;
 led=0xff;       //LED全滅
 buz=1;
 for(;;)
 {

  if(flag==1)
  {
   //蜂鳴器響1次,進入第一測試
   Delay(1000);
   buz=0;
   Delay(1000);
   buz=1;
   d=0X01;       //d的初始值即燈的初試狀態(tài)
   while(d!=0)      //實現(xiàn)8次左移,如果d中唯一的位1移動出范圍,則重新賦值開始
   {
    led=~d;      //反向輸出點亮
    Delay(5000);    //延時
    d<<=1;      //左移動一位
    Delay(5000);    //延時
   }        //當左移到頭則從for(;;)下面重新開始,循環(huán)左移效果
   flag++;       //LED測試完畢,開始測試數(shù)碼管
   led=0;
  }

  if(flag==2)
  {
   //蜂鳴器響2次,進入第二測試
   Delay(1000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(1000);
   buz=0;
   Delay(1000);
   buz=1;
   d=0x01;
   while(d!=0)      //實現(xiàn)8次左移,如果d中唯一的位1移動出范圍,則重新賦值開始
   {
    LED_0=0;LED_1=1;LED_2=1;LED_3=1;
    P0=P2;
    P0=~d;      //反向輸出點亮
    Delay(1500);    //延時
    d<<=1;      //左移動一位
    Delay(1500);    //延時
   }
   d=0x01;
   while(d!=0)      //實現(xiàn)8次左移,如果d中唯一的位1移動出范圍,則重新賦值開始
   {
    P0=P2;
    LED_0=1;LED_1=0;LED_2=1;LED_3=1;
    P0=~d;      //反向輸出點亮
    Delay(1500);    //延時
    d<<=1;      //左移動一位
    Delay(1500);    //延時
   }
   d=0x01;
   while(d!=0)      //實現(xiàn)8次左移,如果d中唯一的位1移動出范圍,則重新賦值開始
   {
    P0=P2;
    LED_0=1;LED_1=1;LED_2=0;LED_3=1;
    P0=~d;      //反向輸出點亮
    Delay(1500);    //延時
    d<<=1;      //左移動一位
    Delay(1500);    //延時
   }
   d=0x01;
   while(d!=0)      //實現(xiàn)8次左移,如果d中唯一的位1移動出范圍,則重新賦值開始
   {
    P2=P3;
    LED_0=1;LED_1=1;LED_2=1;LED_3=0;
    P0=~d;      //反向輸出點亮
    Delay(1500);    //延時
    d<<=1;      //左移動一位
    Delay(1500);    //延時
   }
   flag++;
  }

  if(flag==3)
  {
   //蜂鳴器響3次,進入第三測試
   Delay(1000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(1000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(1000);
   buz=0;
   Delay(1000);
   buz=1;
   for(i=0;i<300;i++)    //數(shù)碼管顯示1234持續(xù)一段時間
   {
    P2=P3;
    display(1,2,3,4);
   }
   flag++;
  }
  if(flag==4)       //蜂鳴器效果
  {
   buz=0;
   Delay(1000);
   buz=1;
   Delay(3000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(3000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(3000);
   buz=0;
   Delay(8000);
   buz=1;
   Delay(1000);
   buz=0;
   Delay(8000);
   buz=1;
   Delay(8000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(3000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(3000);
   buz=0;
   Delay(1000);
   buz=1;
   Delay(10000);
   flag=1;
  }
 }
}

void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4)
{
   shuma=a[d1]; //選中第一位,發(fā)送第一位段碼
   LED_0=0;  //第一位顯示
   delayx(100);  //延時顯示
   LED_0=1;  //第一位關顯示

   shuma=a[d2]; //選中第二位,發(fā)送第二位段碼,以下原理同上
   LED_1=0;
   delayx(100);
   LED_1=1;

   shuma=a[d3]; //選中第三位,發(fā)送第三位段碼,以下原理同上
   LED_2=0;
   delayx(100);
   LED_2=1;

   shuma=a[d4]; //選中第四位,發(fā)送第四位段碼,以下原理同上
   LED_3=0;
   delayx(100);
   LED_3=1;
}





歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1