標(biāo)題: 按下按鍵響30次 [打印本頁(yè)]
作者: liuyang 時(shí)間: 2012-5-29 18:41
標(biāo)題: 按下按鍵響30次
/*
必要操作:連接左上角3個(gè)跳線
*/
#include <AT89X52.H> //包含頭文件
#define led P0 //定義LED口
#define shuma P0 //定義數(shù)碼管數(shù)據(jù)口
sbit LED_0=P1^0; //定義4個(gè)控制腳
sbit LED_1=P1^1;
sbit LED_2=P1^2;
sbit LED_3=P1^3;
sbit buz=P3^4; //定義蜂鳴器所在口
unsigned char flag; //定義測(cè)試部分標(biāo)志
/*=====0-9=====A-G=====*/
unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//共陽(yáng)極數(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í)函數(shù)
{
while(i--);
}
void delayx(unsigned int x) //延時(shí)函數(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次,進(jìn)入第一測(cè)試
Delay(1000);
buz=0;
Delay(1000);
buz=1;
d=0X01; //d的初始值即燈的初試狀態(tài)
while(d!=0) //實(shí)現(xiàn)8次左移,如果d中唯一的位1移動(dòng)出范圍,則重新賦值開(kāi)始
{
led=~d; //反向輸出點(diǎn)亮
Delay(5000); //延時(shí)
d<<=1; //左移動(dòng)一位
Delay(5000); //延時(shí)
} //當(dāng)左移到頭則從for(;;)下面重新開(kāi)始,循環(huán)左移效果
flag++; //LED測(cè)試完畢,開(kāi)始測(cè)試數(shù)碼管
led=0;
}
if(flag==2)
{
//蜂鳴器響2次,進(jìn)入第二測(cè)試
Delay(1000);
buz=0;
Delay(1000);
buz=1;
Delay(1000);
buz=0;
Delay(1000);
buz=1;
d=0x01;
while(d!=0) //實(shí)現(xiàn)8次左移,如果d中唯一的位1移動(dòng)出范圍,則重新賦值開(kāi)始
{
LED_0=0;LED_1=1;LED_2=1;LED_3=1;
P0=P2;
P0=~d; //反向輸出點(diǎn)亮
Delay(1500); //延時(shí)
d<<=1; //左移動(dòng)一位
Delay(1500); //延時(shí)
}
d=0x01;
while(d!=0) //實(shí)現(xiàn)8次左移,如果d中唯一的位1移動(dòng)出范圍,則重新賦值開(kāi)始
{
P0=P2;
LED_0=1;LED_1=0;LED_2=1;LED_3=1;
P0=~d; //反向輸出點(diǎn)亮
Delay(1500); //延時(shí)
d<<=1; //左移動(dòng)一位
Delay(1500); //延時(shí)
}
d=0x01;
while(d!=0) //實(shí)現(xiàn)8次左移,如果d中唯一的位1移動(dòng)出范圍,則重新賦值開(kāi)始
{
P0=P2;
LED_0=1;LED_1=1;LED_2=0;LED_3=1;
P0=~d; //反向輸出點(diǎn)亮
Delay(1500); //延時(shí)
d<<=1; //左移動(dòng)一位
Delay(1500); //延時(shí)
}
d=0x01;
while(d!=0) //實(shí)現(xiàn)8次左移,如果d中唯一的位1移動(dòng)出范圍,則重新賦值開(kāi)始
{
P2=P3;
LED_0=1;LED_1=1;LED_2=1;LED_3=0;
P0=~d; //反向輸出點(diǎn)亮
Delay(1500); //延時(shí)
d<<=1; //左移動(dòng)一位
Delay(1500); //延時(shí)
}
flag++;
}
if(flag==3)
{
//蜂鳴器響3次,進(jìn)入第三測(cè)試
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ù)一段時(shí)間
{
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); //延時(shí)顯示
LED_0=1; //第一位關(guān)顯示
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://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |