霹雳灯、继电器、蜂鸣器等实验程序
大小:0.15 MB 人气: 2017-09-06 需要积分:0
1、霹雳灯实验程序
/* ch03-3-3.c - 霹雳灯实验程序 *///==声明区============================================
#include
#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
} // 延迟函数结束
2、继电器实验程序
/* ch03-3-2.c - 继电器实验程序 *///==声明区========================================
#include
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
} // 延迟函数结束
/* 蜂鸣器发声函数,count=计数次数,TH=高态时间,TL=低态时间 */
void pulse_BZ(int count,int TH,int TL) // 蜂鸣器发声函数开始
{ int i; // 声明整数变量i/
for(i=0;i
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
delay(TH); // 延迟TH 0.5ms
relay=0; // 输出低态,继电器消磁(灯灭)
delay(TL); // 延迟TL 0.5ms
} // for循环结束
} // 继电器控制函数结束
3、蜂鸣器实验程序
/* ch03-3-1.c - 蜂鸣器实验程序 *///==声明区====================================
#include
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
} // 延迟函数结束
/* 蜂鸣器发声函数,count=计数次数,TH=高态时间,TL=低态时间 */
void pulse_BZ(int count,int TH,int TL) // 蜂鸣器发声函数开始
{ int i; // 声明整数变数i
for(i=0;i
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
#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%