您好,欢迎来电子发烧友网! ,新用户?[免费注册]

您的位置:电子发烧友网>源码下载>C/C++语言编程>

霹雳灯、继电器、蜂鸣器等实验程序

大小:0.15 MB 人气: 2017-09-06 需要积分:0
霹雳灯、继电器、蜂鸣器等实验程序

1、霹雳灯实验程序

/* ch03-3-3.c - 霹雳灯实验程序  */
//==声明区============================================
#include    // 定义8051暂存器之标头档,P2-17~19 
#define LED P1   // 定义LED接至Port 1
void delay(int);  // 声明延迟函数 
//==主程序============================================
main()     // 主程序开始 
{ unsigned char i;   // 声明无号数字元变数i(占1Bytes)  
 LED=0xfe;   // 初值=1111 1110,只有最右1灯亮 
 while(1)   // 无穷循环,程序一直跑 
 { for(i=0;i<7;i++)// 左移7次 
  { delay(100); // 延迟100 5m=0.5s 
   LED=(LED<<1)|0x01; // 左移1位,并设定最低位元为1 
  }    // 左移结束,只有最左1灯亮 
  for(i=0;i<7;i++)// 右移7次 
  { delay(100); // 延迟100 5m=0.5s 
   LED=(LED>>1)|0x80; // 右移1位,并设定最高位元为1
  }    // 结束右移,只有最右1灯亮 
 }     // while循环结束 
}      // 主程序结束 
//==子程序=============================================
/* 延迟函数,延迟约x 5ms */
void delay(int x)  // 延迟函数开始 
{ int i,j;   // 声明整数变数i,j 
 for (i=0;i   for (j=0;j<600;j++);// 计数600次,延迟5ms 
}      // 延迟函数结束 
 

2、继电器实验程序

/* ch03-3-2.c - 继电器实验程序  */
//==声明区========================================
#include    // 定义8051暂存器之标头档, P2-17~19 
sbit buzzer = P3^7;  // 声明蜂鸣器的位置 
sbit relay = P3^6;  // 声明继电器的位置  
void delay(int);   // 声明延迟函数 
void pulse_BZ(int,int,int); // 声明蜂鸣器发声函数 
void pulse_RL(int,int,int); // 声明继电器控制函数 
//==主程序========================================
main()      // 主程序开始 
{ while(1)    // 无穷循环,程序一直跑 */
 { pulse_RL(10,2000,2000); 
  // 继电器使灯亮灭各10次,各2000 0.5m=1s
  pulse_BZ(100,1,1); 
  // 蜂鸣器第1声哔,约100*(0.5m+0.5m)=0.1s
  delay(200);   // 延迟200 0.5ms=0.1s 
  pulse_BZ(100,1,1); 
  // 蜂鸣器第2声哔,约100*(0.5m+0.5m)=0.1s
  delay(200);   // 延迟200 0.5ms=0.1s 
 }      // while循环结束 
}       // 主程序结束 
//==副程序=========================================
// 延迟函数开始,延迟约x*0.5ms/
void delay(int x)  // 延迟函数开始 
{ int i,j;   // 声明整数变量i,j
 for (i=0;i   for (j=0;j<60;j++); // 计数60次,延迟约0.5ms 
}     // 延迟函数结束 
/* 蜂鸣器发声函数,count=计数次数,TH=高态时间,TL=低态时间 */
void pulse_BZ(int count,int TH,int TL) // 蜂鸣器发声函数开始 
{ int i;   // 声明整数变量i/
 for(i=0;i  { buzzer=1; // 输出高态  
  delay(TH); // 延迟TH 0.5ms 
  buzzer=0; // 输出低态 
  delay(TL); // 延迟TL 0.5ms 
 }    // for循环结束 
}     // 蜂鸣器发声函数结束 
/* 继电器控制函数,count=计数次数,TH=激磁时间,TL=消磁时间 */
void pulse_RL(int count,int TH,int TL) // 继电器控制函数开始 
{ int i;   // 声明整数变量i 
 for(i=0;i  { relay=1;  // 输出高态,继电器激磁(灯亮)  
  delay(TH); // 延迟TH 0.5ms 
  relay=0; // 输出低态,继电器消磁(灯灭) 
  delay(TL); // 延迟TL 0.5ms 
 }    // for循环结束 
}     // 继电器控制函数结束 
 

3、蜂鸣器实验程序

/* ch03-3-1.c - 蜂鸣器实验程序  */
//==声明区====================================
#include  // 定义8051暂存器的标头档,P2-17~19
sbit buzzer = P3^7 ; // 声明蜂鸣器的位置为Port 3之bit 7
void delay(int);  // 声明延迟函数 
void pulse_BZ(int,int,int); // 声明蜂鸣器发声函数 
//==主程序====================================
main()     // 主程序开始 
{ while(1)   // 无穷循环,程序一直跑 
 { pulse_BZ(100,1,1); 
  // 蜂鸣器发声100 (0.5m+0.5m)=0.1s
  delay(1000); // 延迟1000 0.5m=0.5秒 
 }     // while循环结束 
}      // 主程序结束 
//==子程序=====================================
/* 延迟函数开始,延迟x 0.5ms */ 
void delay(int x)  // 延迟函数开始 
{ int i,j;   // 声明整数变量i,j
 for (i=0;i   for (j=0;j<60;j++); // 计数60次,延迟约0.5ms 
}     // 延迟函数结束 
/* 蜂鸣器发声函数,count=计数次数,TH=高态时间,TL=低态时间 */
void pulse_BZ(int count,int TH,int TL) // 蜂鸣器发声函数开始 
{ int i;   // 声明整数变数i
 for(i=0;i  { buzzer=1; // 输出高态
  delay(TH); // 延迟TH 0.5ms 
  buzzer=0; // 输出低态 
  delay(TL); // 延迟TL 0.5ms 
 }    // for循环结束 
}     // 蜂鸣器发声函数结束
 

4、秒表计C程序

//秒表程序
#define XMS 2000  /* 定时中断间隔 12MHz,1uS */ 
#include
#include
#define uchar unsigned char
sbit KEY1 =P3^3;  /* 启动键 */
sbit KEY2 =P3^4;  /* 停止键 */
sbit KEY3 =P3^5;  /* 清除键*/
bit stop;
char buf[4]={0,0,0,0};
char low[4]={0xfe,0xfd,0xfb,0xf7};
char disppoint;
uchar ms;
code char seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  /* 显示段表*/
void delayms(int t)
{
uchar i;
while(t--)
 {
 i=100;
 while(i--); 
 }
}
void put_num(char c)
{
P0=seg[c&0x0f];
}
void timer0( ) interrupt 1 using 1  /*定时器中断程序*/
{
EA=0;
//显示:
TH0=-(XMS/256); 
TL0=-(XMS%256);
disppoint&=3;
put_num(buf[disppoint]);
//if(disppoint==2)P0&=~0x20; /* 小数点*/
P1=low[disppoint];
disppoint++;
if(stop){EA=1;return;}
//----
ms--;
if(ms==0)
 {
 ms=100;
 buf[3]++;
 if(buf[3]>9)
  {buf[3]=0;
  buf[2]++;
  if(buf[2]>9)
   {buf[2]=0;
   buf[1]++;
   if(buf[1]>9)
    {buf[1]=0;
    buf[0]++;
    if(buf[0]>9)buf[0]=0;
    }
   }
  }
 }
EA=1;
}
main()
{
TMOD=0x01;
TH0=-(XMS/256); /* 5ms */
TL0=-(XMS%256);
TR0=1;
EA=1;
while(1)
 {
 EA=1;
 ET0=1;
 if(!KEY1 && stop!=0){stop=0;delayms(100);}
 if(!KEY2 && stop==0){stop=1;delayms(100);}
 if(!KEY3)
  {buf[0]=buf[1]=buf[2]=buf[3]=0;
  stop=1;
  delayms(100);}
 }
}
 

5、AT89S5x看门狗
#include
#include


sfr AUXR    = 0x8E;  //定义AT89S51扩展寄存器
sfr WDTRST  = 0xA6;

void clr_wdt();
main()
{
 AUXR = 0xff;  // 初始化看门狗相关寄存器
 while(1)   // 主循环
 {
  clr_wdt();  // 8191个机器周期内必须至少调用此程序一次
      // 否则看门狗会溢出
  
  // 其它子程序 
  //  
 }
}
void clr_wdt()
{
 WDTRST = 0x1E;  // 清除看门狗指令
 WDTRST = 0xE1;  // 
}
 

非常好我支持^.^

(0) 0%

不好我反对

(0) 0%

      发表评论

      用户评论
      评价:好评中评差评

      发表评论,获取积分! 请遵守相关规定!