51单片机脉冲产生程序设计

时间:2019-05-14 23:05:29下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《51单片机脉冲产生程序设计》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《51单片机脉冲产生程序设计》。

第一篇:51单片机脉冲产生程序设计

独立键盘控制输出脉冲信号

用51单片机用独立键盘控制输出4种频率:1Hz、2Hz、10Hz、50Hz,占空比为50%的脉冲信号。

#include

#define uint unsigned int #define uchar unsigned char sbit d0=P1^0;sbit d1=P3^2;uintnum=0,counter=0;void delay(uint x){ uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);} void main(){

d1=1;

d0=1;

d2=1;num=0;

IT0=1;

EX0=1;

TMOD=0x01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

EA=1;

ET0=1;

TR0=1;while(1)

{

} } void Int0()interrupt 0 { delay(10);if(d1==0){

d1=1;num++;if(num==4)num=0;counter=0;}

} void Timer0(void)interrupt 1 {

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;counter++;

if(num==0){ if(counter<=500)

d0=0;if(counter>500)

d0=1;if(counter==1000)counter=0;

} if(num==1){ if(counter<=250)

d0=0;if(counter>250)d0=1;if(counter==500)counter=0;}

if(num==2){ if(counter<=50)d0=0;if(counter>50)d0=1;if(counter==100)counter=0;} if(num==3){ if(counter<=10)

d0=0;if(counter>10)

d0=1;

} if(counter==20)counter=0;}

第二篇:单片机-分支程序设计教案

一、复习上次课内容

1、什么是标识符?

答:标识符是程序员选择的名字,用来标识常量、变量、过程、段名等。

2、什么是伪指令?

答:注释性的,没有对应的机器码,不令计算机做任何操作,不产生目

标程序,不影响程序的执行。

二、讲授新课

4.3分支程序设计

在很多实际问题中,都需要根据不同的情况进行不同的处理。这种

思想体现在程序设计中,就是根据不同条件而转到不同的程序段去执行,这就构成了分支程序。分支程序的结构有两种,如图4.2所示。

图4.2 分支程序结构

图4.2(a)结构使用条件转移指令来实现分支,当给出的条件成立时,执行程序段A,否则执行程序段B。

图4.2(b)结构使用散转指令JMP来实现多分支转移,它首先将分支程序按序号的值来实现分支转移。

分支程序的特点是改变程序的执行顺序,跳过一些指令,去执行另外一些指令。应注意:对每一个分支都要单独编写一段程序,每一分支的开始地址赋给一个标号。

在编写分支程序时,关键是如何判断分支的条件。在MCS-51系列单片机中可以直接用来判断分支条件的指令并不多,只有累加器为零(或不为零)、比较条件转移指令CJNE等,MCS-51单片机还提供了位条件转移指令,如JC,JB等。把这些指令结合在一起使用,就可以完成各种各样的条件判断。

【例4-5】设补码X放在内部RAM30H单元中,函数Y与X有如下的关系式:

试编写程序,根据X的值求出Y,并放回原单元。

解 取出X后先做取值范围的判断,用累加器A状态转移指令判断X是否为0,用位状态转移指令判断X是大于0还是小于0。程序流程图如图4.3所示。

程序如下:

MOV A,30H JZ ZER0 JNB ACC.7,PLUS

ADD A,#5 MOV 30H,A PLUS: SJMP $ ZERO: MOV 30H,#20H SJMP $ END 【例4-6】内部RAM40H和41H单元中各有一无符号数,比较其大小,将大数存放于内部RAM60H单元,小数存放于内部RAM61H单元,如两数相等,则分别送往这2个单元。

解 用比较不等转移指令CJNE比较力两个无符号书,先确定它们是否相等,若不相等时再根据借位标志确定这两个无符号书的大小。程序框图如图4.4所示。程序如下:

LOOP:

AGEQ:

SJMP END $

XCH MOV A,61H 60H,A

;A<(41H)有借位

;A与(61H)交换 MOV MOV CJNE AJMP JNC A,40H 61H,41H A,41H,LOOP AGEQ AGEQ

;A≥(41H)则无借位

【例4-8】将ASCII码制转换为十六进制数。如果不是十六进制数得ASCII码,用户标志位置1。解:由ASCII码表知,30H~39H为0~9的ASCII码,41H~46H为A~F的ASCII码。在这一范围的ASCII码减去37H就可以获得对应的十六进制。设ASCII码放在累加器A中,转换结果放回A中。程序流程图如图4.5所示

三、课堂巩固

四、课堂小结

五、作业

第三篇:基于51单片机倒计时秒表程序设计

基于51单片机倒计时秒表程序设计

typedef unsigned char UINT8;typedef unsigned int UINT16;code UINT8 SEGMENT[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};code UINT8 SELECT[8] ={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};#define S1 0x0e #define S2 0x0d #define S3 0x0b #define S4 0x07 sbit SPEAK=P3^5;sbit P3_3=P3^3;UINT8 Second;

void timer_10ms(void)//定时器T0定时10ms {

TMOD=0x01;TH0=0xdc;TL0=0x32;TR0=1;//启动T0 } void Delay(UINT16 t){

UINT16 i,j;

for(i=0;i

for(j=0;j<114;j++);}

void Display(void){ static UINT8 num=0;P2=0xff;switch(num){

case 0:

P0=0xff;

break;

case 1:

P0=0xff;

break;

case 2:

P0=0xff;

break;

case 3:

P0=0xff;

break;

case 4:

P0=0xff;

break;

case 5:

P0=0xff;

break;

case 6:

P0=SEGMENT[Second%100/10];

break;

case 7:

P0=SEGMENT[Second%10];

break;} P2=SELECT[num];num++;num%=8;//if(num==8)num=0;} UINT8 Scankey(void){ UINT8 key;if((P3&0x0f)==0x0f)

return(0xff);Delay(10);

if((P3&0x0f)==0x0f)

return(0xff);key=P3&0x0f;while((P3&0x0f)!=0x0f);return(key);}

void main(){

UINT8 i;

EA=1;

//打开总中断

EX1=0;//打开外部中断1 IT1=1;TH0=0xdc;TL0=0x32;TR0=1;//启动T0

ET0=1;

Second=60;while(1)

{

Display();

Delay(2);

i = Scankey();

if(i==S1)//启动

{

EA=1;

}

else if(i == S2)//暂停

{

EA=0;

}

}

} } void int_0()interrupt 1 {

unsigned char z,aa;

for(aa=59;aa>0;aa--){

for(z=0;z<50;z++)

{

P0=SEGMENT[aa/10];

P2=SELECT[3];

delay(5);

//10ms

P0=SEGMENT[aa%10];

P2=SELECT[4];

delay(5);

//10ms

} } } }

第四篇:51单片机程序设计实训100例

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例

第 01 篇 基础程序设计

01 闪烁的LED

/* 名称:闪烁的LED */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P1^0;//延时

void DelayMS(uint x){ uchar i;while(x--){ 说明:LED按设定的时间间隔闪烁

for(i=0;i<120;i++);} } //主程序 void main(){

} while(1){

} LED=~LED;DelayMS(150);

02 从左到右的流水灯

/* 名称:从左到右的流水灯

说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果 */ #include #include #define uchar unsigned char #define uint unsigned int 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

//延时

void DelayMS(uint x){

uchar i;while(x--){ for(i=0;i<120;i++);} } //主程序 void main(){ P0=0xfe;

}

03 8只LED左右来回点亮

/* 名称:8只LED左右来回点亮

说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果 */ #include #include #define uchar unsigned char #define uint unsigned int //延时

void DelayMS(uint x){ uchar i;

while(x--){ } for(i=0;i<120;i++);while(1){ P0=_crol_(P0,1);//P0的值向左循环移动

DelayMS(150);} } //主程序 void main(){

uchar i;P2=0x01;while(1){ 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

}

} for(i=0;i<7;i++){ P2=_crol_(P2,1);//P2的值向左循环移动 DelayMS(150);} for(i=0;i<7;i++){ P2=_cror_(P2,1);//P2的值向右循环移动

} DelayMS(150);04 花样流水灯

/* 名称:花样流水灯

说明:16只LED分两组按预设的多种花样变换显示 */ #include #define uchar unsigned char #define uint unsigned int uchar code Pattern_P0[]= {

0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff };uchar code Pattern_P2[]= { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff, 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f, 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff };//延时

void DelayMS(uint x){

uchar i;while(x--){ } for(i=0;i<120;i++);} //主程序 void main(){

uchar i;while(1){ //从数组中读取数据送至P0和P2口显示

} for(i=0;i<136;i++){

} P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}

05 LED模拟交通灯

/* 名称:LED模拟交通灯

说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。*/ #include #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0;

//东西向灯 sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3;

//南北向灯

sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1;//闪烁次数,操作类型变量 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

//延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);} //交通灯切换 void Traffic_Light(){ switch(Operation_Type){

case 1: //东西向绿灯与南北向红灯亮

RED_A=1;YELLOW_A=1;GREEN_A=0;

RED_B=0;YELLOW_B=1;GREEN_B=1;

DelayMS(2000);

Operation_Type=2;

break;

case 2: //东西向黄灯闪烁,绿灯关闭

DelayMS(300);

YELLOW_A=~YELLOW_A;GREEN_A=1;

if(++Flash_Count!=10)return;//闪烁5次

Flash_Count=0;

Operation_Type=3;

break;

case 3: //东西向红灯,南北向绿灯亮

RED_A=0;YELLOW_A=1;GREEN_A=1;

RED_B=1;YELLOW_B=1;GREEN_B=0;

DelayMS(2000);

Operation_Type=4;

break;

case 4: //南北向黄灯闪烁5次

DelayMS(300);

YELLOW_B=~YELLOW_B;GREEN_B=1;

if(++Flash_Count!=10)return;

Flash_Count=0;

Operation_Type=1;} } //主程序 void main(){ while(1)Traffic_Light();}

06 单只数码管循环显示0~9 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

/* 名称:单只数码管循环显示0~9 */ #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);} //主程序 void main(){

} uchar i=0;P0=0x00;while(1){

} P0=~DSY_CODE[i];i=(i+1)%10;DelayMS(300);说明:主程序中的循环语句反复将0~9的段码送至P0口,使数字0~9循环显示

07 8只数码管滚动显示单个数字

/* 名称:8只数码管滚动显示单个数字

说明:数码管从左到右依次滚动显示0~7,程序通过每次仅循环选通一只数码管 */ #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} //主程序 void main(){ uchar i,wei=0x80;while(1){

for(i=0;i<8;i++)

{

P2=0xff;

//关闭显示

wei=_crol_(wei,1);

P0=DSY_CODE[i];//发送数字段码

P2=wei;

//发送位码

DelayMS(300);

} } }

08 8只数码管动态显示多个不同字符

电路如上图

/* 名称:8只数码管动态显示多个不同字符

说明:数码管动态扫描显示0~7。*/ #include #include #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);} //主程序 void main(){ uchar i,wei=0x80;while(1){

for(i=0;i<8;i++)

{

P0=0xff;

P0=DSY_CODE[i];//发送段码 wei=_crol_(wei,1);上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

P2=wei;

//发送位码

DelayMS(2);

} } }

09 8只数码管闪烁显示数字串

电路如上图

/* 名称:8只数码管闪烁显示数字串

说明:数码管闪烁显示由0~7构成的一串数字

本例用动态刷新法显示一串数字,在停止刷新时所有数字显示消失。

*/ #include #define uchar unsigned char #define uint unsigned int //段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//位码表

uchar code DSY_IDX[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);} //主程序 void main(){ uchar i,j;while(1){

for(i=0;i<30;i++)

{

for(j=0;j<8;j++)

{

P0=0xff;

P0=DSY_CODE[j];//发送段码

P2=DSY_IDX[j];//发送位码

DelayMS(2);

}

}

P2=0x00;

//关闭所有数码管并延时

DelayMS(1000);} } 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例 8只数码管滚动显示数字串

电路如上图

/* 名称:8只数码管滚动显示数字串 说明:数码管向左滚动显示3个字符构成的数字串 */ #include #include #define uchar unsigned char #define uint unsigned int //段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//下面数组看作环形队列,显示从某个数开始的8个数(10表示黑屏)uchar Num[]={10,10,10,10,10,10,10,10,2,9,8};//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);} //主程序 void main(){ uchar i,j,k=0,m=0x80;while(1){ //刷新若干次,保持一段时间的稳定显示

for(i=0;i<15;i++)

{

for(j=0;j<8;j++)

{ //发送段码,采用环形取法,从第k个开始取第j个

P0=0xff;

P0=DSY_CODE[Num[(k+j)%11]];

m=_crol_(m,1);

P2=m;//发送位码

DelayMS(2);

}

}

k=(k+1)%11;//环形队列首支针k递增,Num下标范围0~10,故对11取余

} } K1-K4 控制LED移位

/* 名称:K1-K4 控制LED移位 说明:按下K1时,P0口LED上移一位;

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

*/

按下K2时,P0口LED下移一位;

按下K3时,P2口LED上移一位;

按下K4时,P2口LED下移一位;

#include #include #define uchar unsigned char #define uint unsigned int //延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);}

//根据P1口的按键移动LED void Move_LED(){

if

((P1&0x10)==0)P0=_cror_(P0,1);//K1 else if((P1&0x20)==0)P0=_crol_(P0,1);//K2 else if((P1&0x40)==0)P2=_cror_(P2,1);//K3

//K4 else if((P1&0x80)==0)P2=_crol_(P2,1);} //主程序

void main(){ uchar Recent_Key;//最近按键

} P0=0xfe;P2=0xfe;P1=0xff;Recent_Key=0xff;while(1){

} if(Recent_Key!=P1){

} Recent_Key=P1;

//保存最近按键 Move_LED();DelayMS(10);K1-K4 按键状态显示 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

/* 名称:K1-K4 按键状态显示

说明:K1、K2按下时LED点亮,松开时熄灭,*/ #include #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0;sbit LED2=P0^1;sbit LED3=P0^2;sbit LED4=P0^3;sbit K1=P1^0;sbit K2=P1^1;sbit K3=P1^2;sbit K4=P1^3;//延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);

K3、K4按下并释放时LED点亮,再次按下并释放时熄灭;

} //主程序 void main(){

} K1-K4 分组控制LED 上海师范大学信息与机电工程学院—倪继锋 P0=0xff;P1=0xff;while(1){

} LED1=K1;LED2=K2;if(K3==0){ while(K3==0);} LED3=~LED3;if(K4==0){

} while(K4==0);LED4=~LED4;DelayMS(10);《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

/* 名称:K1-K4 分组控制LED 说明:每次按下K1时递增点亮一只LED,全亮时再次按下则再次循环开始,K2按下后点亮上面4只LED,K3按下后点亮下面4只LED,K4按下后关闭所有LED */ #include #define uchar unsigned char #define uint unsigned int //延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);} //主程序 void main(){

uchar k,t,Key_State;P0=0xff;P1=0xff;while(1){

t=P1;if(t!=0xff){

DelayMS(10);if(t!=P1)continue;//取得4位按键值,由模式XXXX1111(X中有一位为0,其他均为1)//变为模式0000XXXX(X中有一位为1,其他均为0)Key_State=~t>>4;k=0;//检查1所在位置,累加获取按键号k while(Key_State!=0){ k++;Key_State>>=1;} //根据按键号k进行4种处理 switch(k){

case 1:

if(P0==0x00)P0=0xff;P0<<=1;DelayMS(200);break;P0=0xf0;break;case 2:

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

}

}

}

} case 3: case 4: P0=0x0f;break;P0=0xff;14 K1-K4 控制数码管移位显示

/* 名称:K1-K4 控制数码管移位显示

说明:按下K1时加1计数并增加显示位,按下K2时减1计数并减少显示位,按下K3时清零。

*/ #include #define uchar unsigned char #define uint unsigned int //段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//位码

uchar code DSY_Index[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//待显示到各数码管的数字缓冲(开始仅在0位显示0,其他黑屏)uchar Display_Buffer[]={0,10,10,10,10,10,10,10};//延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);}

void Show_Count_ON_DSY(){ uchar i;for(i=0;i<8;i++)

{ P0=0xff;P0=DSY_CODE[Display_Buffer[i]];

} P2=DSY_Index[i];DelayMS(2);} //主程序 void main(){ uchar i,Key_NO,Key_Counts=0;上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

P0=0xff;P1=0xff;P2=0x00;while(1){

} Show_Count_ON_DSY();P1=0xff;Key_NO=P1;//P1口按键状态分别为K1-0xfe,K2-0xfd,K3-0xfb switch(Key_NO){

case 0xfe:

Key_Counts++;if(Key_Counts>8)Key_Counts=8;Display_Buffer[Key_Counts-1]=Key_Counts;break;if(Key_Counts>0)Display_Buffer[--Key_Counts]=10;break;Display_Buffer[0]=0;for(i=1;i<8;i++)Display_Buffer[i]=10;Key_Counts=0;case 0xfd:

case 0xfb:

} //若键未释放则仅刷新显示,不进行键扫描 while(P1!=0xff)Show_Count_ON_DSY();} K1-K4 控制数码管加减演示

/* 名称:K1-K4 控制数码管加减演示

说明:按下K1后加1计数,按下K2后减1计数,按下K3后清零。*/ #include #include #define uchar unsigned char #define uint unsigned int //段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//待显示的3位缓冲 uchar Num_Buffer[]={0,0,0};//按键代码,按键计数 uchar Key_Code,Key_Counts=0;//延时

void DelayMS(uint x){ 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

uchar i;while(x--)for(i=0;i<120;i++);}

//显示函数

void Show_Counts_ON_DSY(){ uchar i,j=0x01;Num_Buffer[2]=Key_Counts/100;Num_Buffer[1]=Key_Counts/10%10;Num_Buffer[0]=Key_Counts%10;for(i=0;i<3;i++){

j=_cror_(j,1);

P0=0xff;

P0=DSY_CODE[Num_Buffer[i]];

P2=j;DelayMS(1);} } //主程序 void main(){ uchar i;P0=0xff;P1=0xff;P2=0x00;Key_Code=0xff;while(1){

Show_Counts_ON_DSY();

P1=0xff;

Key_Code=P1;

//有键按下时,数码管刷新显示30次,该行代码同时起到延时作用

if(Key_Code!=0xff)

for(i=0;i<30;i++)Show_Counts_ON_DSY();

switch(Key_Code)

{

case 0xfe: if(Key_Counts<255)Key_Counts++;

break;

case 0xfd: if(Key_Counts>0)Key_Counts--;

break;

case 0xfb: Key_Counts=0;

}

Key_Code=0xff;} 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} 4X4矩阵键盘控制条形LED显示

/* 名称:4X4矩阵键盘控制条形LED显示

说明:运行本例时,按下的按键值越大点亮的LED越多。*/ #include #include #define uchar unsigned char #define uint unsigned int //矩阵键盘按键特征码表

uchar code KeyCodeTable[]={0x11,0x12,0x14,0x18,0x21, 0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88};//延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);}

//键盘扫描

uchar Keys_Scan(){ uchar sCode,kCode,i,k;//低4位置0,放入4行

P1=0xf0;//若高4位出现0,则有键按下 if((P1&0xf0)!=0xf0){

DelayMS(2);if((P1&0xf0)!=0xf0){

sCode=0xfe;{

//行扫描码初值

for(k=0;k<4;k++)//对4行分别进行扫描

P1=sCode;if((P1&0xf0)!=0xf0){

kCode=~P1;for(i=0;i<16;i++)//查表得到按键序号并返回 if(kCode==KeyCodeTable[i])上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

}

}

return(i);else sCode=_crol_(sCode,1);} }

return(-1);} //主程序

void main(){ uchar i,P2_LED,P3_LED;uchar KeyNo=-1;//按键序号,-1表示无按键

} while(1){ KeyNo=Keys_Scan();//扫描键盘获取按键序号KeyNo

if(KeyNo!=-1){

}

} P2_LED=0xff;P3_LED=0xff;for(i=0;i<=KeyNo;i++)//键值越大,点亮的LED越多 { if(i<8)P3_LED>>=1;else P2_LED>>=1;} P3=P3_LED;//点亮条形LED P2=P2_LED;数码管显示4X4矩阵键盘按键号

/* 名称:数码管显示4X4矩阵键盘按键号

说明:按下任意键时,数码管都会显示其键的序号,扫描程序首先判断按键发生在哪一列,然后根据所发生的行附加不同的值,从而得到按键的序号。*/ 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

#include #define uchar unsigned char #define uint unsigned int //段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};sbit BEEP=P3^7;//上次按键和当前按键的序号,该矩阵中序号范围0~15,16表示无按键 uchar Pre_KeyNo=16,KeyNo=16;//延时

void DelayMS(uint x){ uchar i;while(x--)for(i=0;i<120;i++);}

//矩阵键盘扫描 void Keys_Scan(){

uchar Tmp;P1=0x0f;//高4位置0,放入4行

DelayMS(1);Tmp=P1^0x0f;//按键后0f变成0000XXXX,X中一个为0,3个仍为1,通过异或把3个1变为0,唯一的0变为1 switch(Tmp)//判断按键发生于0~3列的哪一列

{

case 1: KeyNo=0;break;case 2: KeyNo=1;break;case 4: KeyNo=2;break;case 8: KeyNo=3;break;default:KeyNo=16;//无键按下

} P1=0xf0;

//低4位置0,放入4列

DelayMS(1);Tmp=P1>>4^0x0f;//按键后f0变成XXXX0000,X中有1个为0,三个仍为1;高4位转移到低4位并异或得到改变的值

switch(Tmp)//对0~3行分别附加起始值0,4,8,12 {

} case 1: case 2: case 4: case 8: KeyNo+=0;break;KeyNo+=4;break;KeyNo+=8;break;KeyNo+=12;} //蜂鸣器 void Beep()上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

{

uchar i;for(i=0;i<100;i++){

} DelayMS(1);BEEP=~BEEP;BEEP=0;} //主程序 void main(){ P0=0x00;

} BEEP=0;while(1){

} P1=0xf0;if(P1!=0xf0)Keys_Scan();//获取键序号 if(Pre_KeyNo!=KeyNo){

} P0=~DSY_CODE[KeyNo];Beep();Pre_KeyNo=KeyNo;DelayMS(100);18 开关控制LED

/* 名称:开关控制LED 说明:开关S1和S2分别控制LED1和LED2。*/ #include sbit S1=P1^0;sbit S2=P1^1;sbit LED1=P0^0;sbit LED2=P0^1;//主程序 void main(){

while(1){ LED1=S1;上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} } LED2=S2;19 继电器控制照明设备

/* 名称:继电器控制照明设备

说明:按下K1灯点亮,再次按下时灯熄灭 */ #include #define uchar unsigned char #define uint unsigned int sbit K1=P1^0;sbit RELAY=P2^4;//延时

void DelayMS(uint ms){ uchar t;while(ms--)for(t=0;t<120;t++);} //主程序 void main(){

} 数码管显示拨码开关编码

/* 名称:数码管显示拨码开关编码

*/ #include #include #define uchar unsigned char 上海师范大学信息与机电工程学院—倪继锋 P1=0xff;RELAY=1;while(1){

} if(K1==0){

} while(K1==0);RELAY=~RELAY;DelayMS(20);说明:系统显示拨码开关所设置的编码000~255 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

#define uint unsigned int //各数字的数码管段码(共阴)

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示缓冲

uchar DSY_Buffer[3]={0,0,0};//延时

void DelayMS(uint ms){ uchar t;while(ms--)for(t=0;t<120;t++);} //主程序 void main(){

} uchar i,m,Num;P0=0xff;P2=0xff;while(1){

} m=0xfe;Num=P1;//读取拨码开关的值 DSY_Buffer[0]=Num/100;DSY_Buffer[1]=Num/10%10;DSY_Buffer[2]=Num%10;for(i=0;i<3;i++)//刷新显示在数码管上 {

} m=_crol_(m,1);P2=m;P0=DSY_CODE[DSY_Buffer[i]];DelayMS(10);开关控制报警器

/* 名称:开关控制报警器 说明:用K1开关控制报警器,程序控制P1.0输出两种不同频率的声音,模拟很逼真的报警效果 */ #include #define uchar unsigned char #define uint unsigned int sbit SPK=P1^0;sbit K1=P1^7;//发声函数 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

void Alarm(uchar t){

} void main(){

} 按键发音

/* 名称:按键发音

说明:按下不同的按键会是SOUNDER发出不同频率的声音。本例使用延时函数实现不同频率的声音输出,以后也可使用定时器 */ #include #define uchar unsigned char #define uint unsigned int sbit BEEP=P3^7;sbit K1=P1^4;sbit K2=P1^5;sbit K3=P1^6;sbit K4=P1^7;//延时

void DelayMS(uint x){ uchar t;SPK=0;while(1){

} if(K1==1){

} Alarm(90);Alarm(120);uchar i,j;for(i=0;i<200;i++){

} SPK=~SPK;for(j=0;j

while(x--)for(t=0;t<120;t++);} //按周期t发音 void Play(uchar t){ 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

uchar i;for(i=0;i<100;i++){ BEEP=~BEEP;

DelayMS(t);} BEEP=0;} void main(){ P1=0xff;BEEP=0;while(1){

if(K1==0)Play(1);

if(K2==0)Play(2);

if(K3==0)Play(3);

if(K4==0)Play(4);} } 播放音乐

/* 名称:播放音乐

说明:程序运行时播放生日快乐歌,未使用定时器中断,所有频率完全用延时实现

*/ #include #define uchar unsigned char #define uint unsigned int sbit BEEP=P3^7;//生日快乐歌的音符频率表,不同频率由不同的延时来决定

uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};//生日快乐歌节拍表,节拍决定每个音符的演奏长短 uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);} //播放函数 void PlayMusic(){ 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} uint i=0,j,k;while(SONG_LONG[i]!=0||SONG_TONE[i]!=0){ //播放各个音符,SONG_LONG为拍子长度

} for(j=0;j

} DelayMS(10);i++;BEEP=~BEEP;//SONG_TONE延时表决定了每个音符的频率 for(k=0;k

} BEEP=0;while(1){

} PlayMusic();//播放生日快乐 DelayMS(500);//播放完后暂停一段时间 INT0中断计数

/* 名称:INT0中断计数

说明:每次按下计数键时触发INT0中断,中断程序累加计数,计数值显示在3只数码管上,按下清零键时数码管清零 */ #include #define uchar unsigned char #define uint unsigned int //0~9的段码

uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//计数值分解后各个待显示的数位 uchar DSY_Buffer[]={0,0,0};uchar Count=0;sbit Clear_Key=P3^6;//数码管上显示计数值

void Show_Count_ON_DSY(){ DSY_Buffer[2]=Count/100;//获取3个数 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

DSY_Buffer[1]=Count%100/10;DSY_Buffer[0]=Count%10;if(DSY_Buffer[2]==0)

//高位为0时不显示 {

} P0=DSY_CODE[DSY_Buffer[0]];P1=DSY_CODE[DSY_Buffer[1]];DSY_Buffer[2]=0x0a;if(DSY_Buffer[1]==0)

//高位为0,若第二位为0同样不显示 DSY_Buffer[1]=0x0a;P2=DSY_CODE[DSY_Buffer[2]];} //主程序 void main(){

P0=0x00;P1=0x00;P2=0x00;IE=0x81;//允许INT0中断 IT0=1;//下降沿触发

while(1){ if(Clear_Key==0)Count=0;//清0 Show_Count_ON_DSY();} } //INT0中断函数

void EX_INT0()interrupt 0 { Count++;//计数值递增

} 外部INT0中断控制LED

/* 名称:外部INT0中断控制LED 说明:每次按键都会触发INT0中断,中断发生时将LED状态取反,产生LED状态由按键控制的效果 */ #include #define uchar unsigned char #define uint unsigned int sbit LED=P0^0;//主程序 void main()上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

{

LED=1;EA=1;EX0=1;IT0=1;while(1);} //INT0中断函数

void EX_INT0()interrupt 0 { } INT0及INT1中断计数

/* 名称:INT0及INT1中断计数

说明:每次按下第1个计数键时,第1组计数值累加并显示在右边3只数码管上,每次按下第2个计数键时,第2组计数值累加并显示在左边3只数码管上,后两个按键分别清零。*/ #include #define uchar unsigned char #define uint unsigned int sbit K3=P3^4;//2个清零键 sbit K4=P3^5;//数码管段码与位码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};uchar code DSY_Scan_Bits[]={0x20,0x10,0x08,0x04,0x02,0x01};//2组计数的显示缓冲,前3位一组,后3位一组 uchar data Buffer_Counts[]={0,0,0,0,0,0};uint Count_A,Count_B=0;//延时

void DelayMS(uint x){ uchar t;while(x--)for(t=0;t<120;t++);LED=~LED;//控制LED亮灭

} //数据显示 void Show_Counts(){

uchar i;Buffer_Counts[2]=Count_A/100;Buffer_Counts[1]=Count_A%100/10;Buffer_Counts[0]=Count_A%10;上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

if(Buffer_Counts[2]==0){

Buffer_Counts[2]=0x0a;if(Buffer_Counts[1]==0)

Buffer_Counts[1]=0x0a;} Buffer_Counts[5]=Count_B/100;Buffer_Counts[4]=Count_B%100/10;Buffer_Counts[3]=Count_B%10;if(Buffer_Counts[5]==0){

Buffer_Counts[5]=0x0a;

if(Buffer_Counts[4]==0)

Buffer_Counts[4]=0x0a;} for(i=0;i<6;i++){

P2=DSY_Scan_Bits[i];

P1=DSY_CODE[Buffer_Counts[i]];DelayMS(1);} } //主程序 void main(){ IE=0x85;PX0=1;//中断优先

IT0=1;IT1=1;while(1){

if(K3==0)Count_A=0;

if(K4==0)Count_B=0;

Show_Counts();} } //INT0中断函数

void EX_INT0()interrupt 0 { Count_A++;

} //INT1中断函数

void EX_INT1()interrupt 2 { Count_B++;

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} 定时器控制单只LED

/* 名称:定时器控制单只LED

说明:LED在定时器的中断例程控制下不断闪烁。*/ #include #define uchar unsigned char #define uint unsigned int sbit LED=P0^0;uchar T_Count=0;//主程序

void main(){ TMOD=0x00;

//定时器0工作方式0 TH0=(8192-5000)/32;//5ms定时

TL0=(8192-5000)%32;IE=0x82;//允许T0中断 TR0=1;while(1);} //T0中断函数

void LED_Flash()interrupt 1 {

} TH0=(8192-5000)/32;//恢复初值

TL0=(8192-5000)%32;if(++T_Count==100)//0.5s开关一次LED {

} LED=~LED;T_Count=0;TIMER0控制流水灯

/* 名称:TIMER0控制流水灯 说明:定时器控制P0、P2口的LED滚动显示,本例未使用中断函数。*/ #include #include #define uchar unsigned char #define uint unsigned int 上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

//主程序 void main(){

uchar T_Count=0;P0=0xfe;P2=0xfe;TMOD=0x01;

TH0=(65536-40000)/256;

//定时器0工作方式1 //40ms定时

TL0=(65536-40000)%256;TR0=1;

//启动定时器 while(1){ if(TF0==1)

{

} TF0=0;TH0=(65536-40000)/256;//恢复初值 TL0=(65536-40000)%256;if(++T_Count==5){

} P0=_crol_(P0,1);P2=_crol_(P2,1);T_Count=0;} } 定时器控制4个LED滚动闪烁

/* 名称:定时器控制4个LED滚动闪烁

说明:4只LED在定时器控制下滚动闪烁。*/ #include #define uchar unsigned char #define uint unsigned int sbit B1=P0^0;sbit G1=P0^1;sbit R1=P0^2;sbit Y1=P0^3;uint i,j,k;//主程序 void main(){ i=j=k=0;P0=0xff;上海师范大学信息与机电工程学院—倪继锋

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

TMOD=0x02;

TH0=256-200;TL0=256-200;IE=0x82;TR0=1;//定时器0工作方式2 //200us定时

//启动定时器

while(1);} //T0中断函数

void LED_Flash_and_Scroll()interrupt 1 {

if(++k<35)k=0;switch(i){

case 0: case 1: case 2: B1=~B1;break;G1=~G1;break;R1=~R1;break;return;

//定时中断若干次后执行闪烁

case 3: Y1=~Y1;break;default:i=0;} if(++j<300)return;//每次闪烁持续一段时间 j=0;P0=0xff;//关闭显示

i++;//切换到下一个LED } T0控制LED实现二进制计数

/* 名称:T0控制LED实现二进制计数

说明:本例对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在T0引脚的按键每次按下时,会使计数寄存器的值递增,其值通过LED以二进制形式显示 */ #include //主程序

void main(){ TMOD=0x05;//定时器0为计数器,工作方式1,最大计数值65535 TH0=0;//初值为0

TL0=0;TR0=1;while(1)上海师范大学信息与机电工程学院—倪继锋

//启动定时器 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

{

} P1=TH0;P2=TL0;}

TIMER0与TIMER1控制条形LED

/* 名称:TIMER0与TIMER1控制条形LED

说明:定时器T0定时控制上一组条形LED,滚动速度较快

定时器T1定时控制下一组条形LED,滚动速度较慢

*/ #include #include #define uchar unsigned char #define uint unsigned int uchar tc0=0,tc1=0;//主程序 void main(){ P0=0xfe;P2=0xfe;TMOD=0x11;//定时器0、定时器1均工作于方式1

TH0=(65536-15000)/256;

//定时器0:15ms //定时器1:50ms TL0=(65536-15000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;IE=0x8a;TR0=1;//启动定时器

TR1=1;while(1);} //T0中断函数 void Time0()interrupt 1 {

TH0=(65536-15000)/256;

//恢复定时器0初值

TL0=(65536-15000)%256;if(++tc0==10)

//150ms转换状态 { tc0=0;P0=_crol_(P0,1);} } //T1中断函数

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

void Time1()interrupt 3 { TH0=(65536-50000)/256;

}

10s的秒表

//恢复定时器1初值

TL0=(65536-50000)%256;if(++tc1==10)

//500ms转换状态 {

} tc1=0;P2=_crol_(P2,1);

/* 名称:10s的秒表

说明:首次按键计时开始,再次按键暂停,第三次按键清零。*/ #include #define uchar unsigned char #define uint unsigned int sbit K1=P3^7;uchar i,Second_Counts,Key_Flag_Idx;bit Key_State;uchar DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//延时

void DelayMS(uint ms){ uchar t;while(ms--)for(t=0;t<120;t++);} //处理按键事件

void Key_Event_Handle(){

if(Key_State==0){

Key_Flag_Idx=(Key_Flag_Idx+1)%3;switch(Key_Flag_Idx){

} case 1: case 2: case 0: EA=1;ET0=1;TR0=1;break;EA=0;ET0=0;TR0=0;break;P0=0x3f;P2=0x3f;i=0;Second_Counts=0;

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} } //主程序 void main(){ P0=0x3f;//显示00 P2=0x3f;i=0;Second_Counts=0;

Key_Flag_Idx=0;

//按键次数(取值0,1,2,3)

Key_State=1;

//按键状态

TMOD=0x01;//定时器0方式1 TH0=(65536-50000)/256;

//定时器0:15ms TL0=(65536-50000)%256;while(1){

if(Key_State!=K1)

{

DelayMS(10);

Key_State=K1;

Key_Event_Handle();} } } //T0中断函数

void DSY_Refresh()interrupt 1 { TH0=(65536-50000)/256;//恢复定时器0初值

TL0=(65536-50000)%256;if(++i==2)

//50ms*2=0.1s转换状态

{

i=0;

Second_Counts++;

P0=DSY_CODE[Second_Counts/10];

P2=DSY_CODE[Second_Counts%10];

if(Second_Counts==100)Second_Counts=0;

//满100(10s)后显示00 } }

用计数器中断实现100以内的按键计数

/* 名称:用计数器中断实现100以内的按键计数

说明:本例用T0计数器中断实现按键技术,由于计数寄存器初值为1,因此

P3.4引脚的每次负跳变都会触发T0中断,实现计数值累加。

计数器的清零用外部中断0控制。

上海师范大学信息与机电工程学院—倪继锋

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

*/ #include #define uchar unsigned char #define uint unsigned int //段码 uchar

code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};uchar Count=0;//主程序 void main(){ P0=0x00;

//计数器T0方式2 //计数值为1 //允许T0中断 //允许INT0中断 //允许CPU中断 P2=0x00;TMOD=0x06;TH0=TL0=256-1;ET0=1;

EX0=1;

EA=1;

IP=0x02;IT0=1;TR0=1;while(1){

//设置优先级,T0高于INT0 //INT0中断触发方式为下降沿触发

//启动T0 P0=DSY_CODE[Count/10];P2=DSY_CODE[Count%10];} } //T0计数器中断函数 void Key_Counter()interrupt 1 { Count=(Count+1)%100;//因为只有两位数码管,计数控制在100以内(00~99)} //INT0中断函数

void Clear_Counter()interrupt 0 { } Count=0;

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

100 000s以内的计时程序

/* 名称:100 000s以内的计时程序 说明:在6只数码管上完成0~99 999.9s。*/ #include #include #define uchar unsigned char #define uint unsigned int //段码 uchar

code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//6只数码管上显示的数字

uchar Digits_of_6DSY[]={0,0,0,0,0,0};uchar Count;sbit Dot=P0^7;//延时

void DelayMS(uint ms){ uchar t;while(ms--)for(t=0;t<120;t++);} //主程序 void main(){

uchar i,j;P0=0x00;P3=0xff;

Count=0;TMOD=0x01;

TH0=(65536-50000)/256;

//计数器T0方式1 //50ms定时

TL0=(65536-50000)%256;IE=0x82;TR0=1;

//启动T0 while(1){

j=0x7f;//显示Digits_of_6DSY[5]~Digits_of_6DSY[0]的内容 //前面高位,后面低位,循环中i!=-1亦可写成i!=0xff for(i=5;i!=-1;i--){ j=_crol_(j,1);

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

P3=j;P0=DSY_CODE[Digits_of_6DSY[i]];if(i==1)Dot=1;//加小数点 DelayMS(2);

} } } //T0中断函数

void Timer0()interrupt 1 {

uchar i;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(++Count!=2)return;Count=0;Digits_of_6DSY[0]++;//0.1s位累加 for(i=0;i<=5;i++)//进位处理 {

if(Digits_of_6DSY[i]==10){ Digits_of_6DSY[i]=0;if(i!=5)Digits_of_6DSY[i+1]++;

//如果0~4位则分别向高一位进位

//若某低位没有进位,怎循环提前结束

//恢复初值

} else break;} }

定时器控制数码管动态显示

/* 名称:定时器控制数码管动态显示

说明:8个数码管上分两组动态显示年月日与时分秒,本例的位显示延时用定时器实现。*/ #include #include #define uchar unsigned char #define uint unsigned int //段码,最后一位是“-”的段码

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};//待显示的数据:09-12-25与23-59-58(分两组显示)

uchar code Table_of_Digits[][8]={{0,9,10,1,2,10,2,5},{2,3,10,5,9,10,5,8}};uchar i,j=0;

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

uint t=0;//主程序

void main(){ P3=0x80;

//位码初值

TMOD=0x00;

//计数器T0方式0 TH0=(8192-4000)/32;//4ms定时

TL0=(8192-4000)%32;IE=0x82;TR0=1;

//启动T0 while(1);} //T0中断函数控制数码管刷新显示

void DSY_Show()interrupt 1 { TH0=(8192-4000)/32;//恢复初值

TL0=(8192-4000)%32;P0=0xff;

//输出位码和段码

P0=DSY_CODE[Table_of_Digits[i][j]];P3=_crol_(P3,1);

j=(j+1)%8;

//数组第i行的下一字节索引 if(++t!=350)return;//保持刷新一段时间 t=0;i=(i+1)%2;

//数组行i=0时显示年月日,i=1时显示时分秒

}

8X8LED点阵显示数字

/* 名称:8X8LED点阵显示数字

说明:8X8LED点阵屏循环显示数字0~9,刷新过程由定时器中断完成。*/ #include #include #define uchar unsigned char #define uint unsigned int uchar code Table_of_Digits[]= {

0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, 0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, 0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, 0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, 0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00,//0 //1 //2 //3 //4

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, 0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, 0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, 0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,//5 //6 //7 //8 //9 0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00 };uchar i=0,t=0,Num_Index;//主程序 void main(){

P3=0x80;

Num_Index=0;TMOD=0x00;

//从0开始显示 //T0方式0 //2ms定时 TH0=(8192-2000)/32;TL0=(8192-2000)%32;IE=0x82;TR0=1;

//启动T0 while(1);} //T0中断函数

void LED_Screen_Display()interrupt 1 { TH0=(8192-2000)/32;//恢复初值

}

按键控制8X8LED点阵屏显示图形

/* 名称:按键控制8X8LED点阵屏显示图形

说明:每次按下K1时,会使8X8LED点阵屏循环显示不同图形。

本例同时使用外部中断和定时中断。*/ #include

上海师范大学信息与机电工程学院—倪继锋 TL0=(8192-2000)%32;P0=0xff;

//输出位码和段码

P0=~Table_of_Digits[Num_Index*8+i];P3=_crol_(P3,1);

if(++i==8)i=0;

//每屏一个数字由8个字节构成 if(++t==250){

} //每个数字刷新显示一段时间

t=0;if(++Num_Index==10)Num_Index=0;//显示下一个数字 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

#include #define uchar unsigned char #define uint unsigned int //待显示图形编码

uchar code M[][8]= { {0x00,0x7e,0x7e,0x7e,0x7e,0x7e,0x7e,0x00}, //图1 {0x00,0x38,0x44,0x54,0x44,0x38,0x00,0x00}, //图2 {0x00,0x20,0x30,0x38,0x3c,0x3e,0x00,0x00}

//图3 };uchar i,j;//主程序 void main(){ P0=0xff;P1=0xff;

TMOD=0x01;

//T0方式1 TH0=(65536-2000)/256;//2ms定时

TL0=(65536-2000)%256;IT0=1;

//下降沿触发

IE=0x83;

//允许定时器0、外部0中断 i=0xff;//i的初值设为0xff,加1后将从0开始

while(1);} //T0中断控制点阵屏显示

void Show_Dot_Matrix()interrupt 1 { TH0=(65536-2000)/256;//恢复初值

TL0=(65536-2000)%256;P0=0xff;

//输出位码和段码

P0=~M[i][j];P1=_crol_(P1,1);

j=(j+1)%8;} //INT0中断(定时器由键盘中断启动)void Key_Down()interrupt 0 { P0=0xff;P1=0x80;j=0;i=(i+1)%3;

//i在0,1,2中取值,因为只要3个图形

TR0=1;}

用定时器设计的门铃

上海师范大学信息与机电工程学院—倪继锋

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

/* 名称:用定时器设计的门铃

*/ #include #define uchar unsigned char #define uint unsigned int sbit Key=P1^7;sbit DoorBell=P3^0;uint p=0;//主程序 void main(){

DoorBell=0;TMOD=0x00;//T0方式0 说明:按下按键时蜂鸣器发出叮咚的门铃声。

TH0=(8192-700)/32;//700us定时 TL0=(8192-700)%32;IE=0x82;while(1){

if(Key==0){ //按下按键启动定时器

TR0=1;while(Key==0);

} } } //T0中断控制点阵屏显示 void Timer0()interrupt 1 {

DoorBell=~DoorBell;p++;if(p<400)

//若需要拖长声音,可以调整400和800 {

} {

} else { TR0=0;

上海师范大学信息与机电工程学院—倪继锋 TH0=(8192-700)/32;//700us定时

TL0=(8192-700)%32;

else if(p<800)TH0=(8192-1000)/32;//1ms定时 TL0=(8192-1000)%32;《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} } p=0;39 演奏音阶

/* 名称:演奏音阶

说明:本例使用定时器演奏一段音阶,播放由K1控制。*/ #include #define uchar unsigned char #define uint unsigned int sbit K1=P1^0;sbit SPK=P3^4;uint i=0;

//音符索引

//14个音符放在方式2下的定时寄存器(TH0,TL0)

uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};//定时器0中断函数 void T0_INT()interrupt 1 { TL0=LO_LIST[i];TH0=HI_LIST[i];SPK=~SPK;} //延时

void DelayMS(uint ms){ uchar t;while(ms--)for(t=0;t<120;t++);} //主程序 void main(){

TMOD=0x00;IE=0x82;SPK=0;while(1){

//T0方式0 while(K1==1);while(K1==0);for(i=1;i<15;i++){

//未按键等待 //等待释放

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

}

}

} TR0=1;

DelayMS(500);TR0=0;DelayMS(50);

//播放一个音符 //播放延时

按键控制定时器选播多段音乐

/* 名称:按键控制定时器选播多段音乐

说明:本例内置3段音乐,K1可启动停止音乐播放,K2用于选择音乐段。*/ #include #include #define uchar unsigned char #define uint unsigned int sbit K1=P1^0;

sbit SPK=P3^7;//播放和停止键 //蜂鸣器

//当前音乐段索引,音符索引 uchar Song_Index=0,Tone_Index=0;//数码管段码表

uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//标准音符频率对应的延时表

uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};//三段音乐的音符 uchar code Song[][50]= { {1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1}, {3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1}, {3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1} };//三段音乐的节拍 uchar code Len[][50]= { {1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1}, {1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1}, {1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1} };//外部中断0 void EX0_INT()interrupt 0 { TR0=0;//播放结束或者播放中途切换歌曲时停止播放 Song_Index=(Song_Index+1)%3;//跳到下一首的开头

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

Tone_Index=0;P2=DSY_CODE[Song_Index];

//数码管显示当前音乐段号

} //定时器0中断函数

void T0_INT()interrupt 1 { TL0=LO_LIST[Song[Song_Index][Tone_Index]];TH0=HI_LIST[Song[Song_Index][Tone_Index]];SPK=~SPK;} //延时

void DelayMS(uint ms){ uchar t;while(ms--)for(t=0;t<120;t++);} //主程序 void main(){ P2=0xc0;SPK=0;TMOD=0x00;

//T0方式0 IE=0x83;IT0=1;IP=0x02;while(1){

while(K1==1);//未按键等待

while(K1==0);

//等待释放

TR0=1;

//开始播放

Tone_Index=0;//从第0个音符开始

//播放过程中按下K1可提前停止播放(K1=0)。

//若切换音乐段会触发外部中断,导致TR0=0,播放也会停止

while(Song[Song_Index][Tone_Index]!=-1&&K1==1&&TR0==1)

{

DelayMS(300*Len[Song_Index][Tone_Index]);//播放延时(节拍)

Tone_Index++;//当前音乐段的下一音符索引

}

TR0=0;

//停止播放

while(K1==0);//若提前停止播放,按键未释放时等待

} }

定时器控制交通指示灯

上海师范大学信息与机电工程学院—倪继锋

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

/* 名称:定时器控制交通指示灯

说明:东西向绿灯亮5s后,黄灯闪烁,闪烁5次亮红灯,红灯亮后,南北向由红灯变成绿灯,5s后南北向黄灯闪烁,闪烁5次后亮红灯,东西向绿灯亮,如此往复。

*/ #include #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0;//东西向指示灯 sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3;//南北向指示灯 sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;//延时倍数,闪烁次数,操作类型变量

uchar Time_Count=0,Flash_Count=0,Operation_Type=1;//定时器0中断函数 void T0_INT()interrupt 1 {

TL0=-50000/256;TH0=-50000%256;switch(Operation_Type){ case 1: //东西向绿灯与南北向红灯亮5s

RED_A=0;YELLOW_A=0;GREEN_A=1;RED_B=1;YELLOW_B=0;GREEN_B=0;if(++Time_Count!=100)return;//5s(100*50ms)切换 Time_Count=0;Operation_Type=2;break;//东西向黄灯开始闪烁,绿灯关闭 if(++Time_Count!=8)return;Time_Count=0;YELLOW_A=~YELLOW_A;GREEN_A=0;if(++Flash_Count!=10)return;//闪烁 Flash_Count=0;Operation_Type=3;break;

//东西向红灯与南北向绿灯亮5s RED_A=1;YELLOW_A=0;GREEN_A=0;RED_B=0;YELLOW_B=0;GREEN_B=1;if(++Time_Count!=100)return;//5s(100*50ms)切换 Time_Count=0;Operation_Type=4;

上海师范大学信息与机电工程学院—倪继锋

case 2:

case 3:

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

}

case 4:

break;//南北向黄灯开始闪烁,绿灯关闭 if(++Time_Count!=8)return;Time_Count=0;YELLOW_B=~YELLOW_B;GREEN_A=0;if(++Flash_Count!=10)return;//闪烁 Flash_Count=0;Operation_Type=1;break;

} //主程序 void main(){

}

报警与旋转灯

/* 名称:报警与旋转灯

说明:定时器控制报警灯旋转显示,并发出仿真警报声。*/ #include #include #define uchar unsigned char #define uint unsigned int sbit SPK=P3^7;uchar FRQ=0x00;//延时

void DelayMS(uint ms){

}

//INT0中断函数

void EX0_INT()interrupt 0 { TR0=~TR0;//开启或停止两定时器,分别控制报警器的声音和LED旋转

TR1=~TR1;if(P2==0x00)

上海师范大学信息与机电工程学院—倪继锋 TMOD=0x01;IE=0x82;TR0=1;while(1);

//T0方式1 uchar i;while(ms--)for(i=0;i<120;i++);《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

P2=0xe0;//开3个旋转灯

else P2=0x00;//关闭所有LED

} //定时器0中断 void T0_INT()interrupt 1 {

TH0=0xfe;TL0=FRQ;SPK=~SPK;} //定时器1中断 void T1_INT()interrupt 3 {

TH1=-45000/256;TL1=-45000%256;P2=_crol_(P2,1);} //主程序 void main(){

}

串行数据转换为并行数据

/* 名称:串行数据转换为并行数据

说明:串行数据由RXD发送给串并转换芯片74164,TXD则用于输出移位时钟脉冲,74164将串行输入的1字节转换为并行数据,并将转换的数据通过8只LED显示出来。本例串口工作模式0,即移位寄存器I/O模式。*/

上海师范大学信息与机电工程学院—倪继锋 P2=0x00;SPK=0x00;TMOD=0x11;TH0=0x00;TL0=0xff;IT0=1;IE=0x8b;IP=0x01;TR0=0;TR1=0;while(1){

} FRQ++;DelayMS(1);//T0、T1方式1

//开启0,1,3号中断 //INT0设为最高优先 //定时器启停由INT0控制,初始关闭 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

#include #include #define uchar unsigned char #define uint unsigned int sbit SPK=P3^7;uchar FRQ=0x00;//延时

void DelayMS(uint ms){ uchar i;while(ms--)for(i=0;i<120;i++);} //主程序 void main(){

} uchar c=0x80;SCON=0x00;TI=1;while(1){

} c=_crol_(c,1);SBUF=c;while(TI==0);TI=0;

DelayMS(400);//串口模式0,即移位寄存器输入/输出方式

//等待发送结束

//TI软件置位

并行数据转换为串行数据

/* 名称:并行数据转换为串行数据

说明:切换连接到并串转换芯片74LS165的拨码开关,该芯片将并行数据以串行方式发送到8051的RXD引脚,移位脉冲由TXD提供,显示在P0口。*/ #include #include #include #define uchar unsigned char #define uint unsigned int sbit SPL=P2^5;//shift/load //延时

void DelayMS(uint ms){

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

uchar i;while(ms--)for(i=0;i<120;i++);} //主程序

void main(){ SCON=0x10;

} while(1){

} SPL=0;//置数(load),读入并行输入口的8位数据 //串口模式0,允许串口接收

SPL=1;//移位(shift),并口输入被封锁,串行转换开始 while(RI==0);//未接收1字节时等待 RI=0;

//RI软件置位

//接收到的数据显示在P0口,显示拨码开关的值 P0=SBUF;DelayMS(20);

甲机通过串口控制乙机LED

/* 名称:甲机发送控制命令字符

说明:甲单片机负责向外发送控制命令字符“A”、“B”、“C”,或者停止发送,乙机根据所接收到的字符完成LED1闪烁、LED2闪烁、双闪烁、或停止闪烁。*/ #include #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0;

sbit LED2=P0^3;sbit K1=P1^0;//延时

void DelayMS(uint ms){ uchar i;while(ms--)for(i=0;i<120;i++);} //向串口发送字符

void Putc_to_SerialPort(uchar c){

SBUF=c;while(TI==0);TI=0;

上海师范大学信息与机电工程学院—倪继锋 《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

} //主程序 void main(){ uchar Operation_No=0;SCON=0x40;//串口模式1 TMOD=0x20;//T1工作模式2 PCON=0x00;//波特率不倍增

TH1=0xfd;TL1=0xfd;TI=0;TR1=1;while(1){

if(K1==0)//按下K1时选择操作代码0,1,2,3

{

while(K1==0);

Operation_No=(Operation_No+1)%4;

}

switch(Operation_No)//根据操作代码发送A/B/C或停止发送

{

case 0: LED1=LED2=1;

break;

case 1: Putc_to_SerialPort('A');

LED1=~LED1;LED2=1;

break;

case 2: Putc_to_SerialPort('B');

LED2=~LED2;LED1=1;

break;

case 3: Putc_to_SerialPort('C');

LED1=~LED1;LED2=LED1;

break;

}

DelayMS(100);} }

/* 名称:乙机程序接收甲机发送字符并完成相应动作

说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。*/ #include #define uchar unsigned char #define uint unsigned int sbit LED1=P0^0;

sbit LED2=P0^3;上海师范大学信息与机电工程学院—倪继锋

《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例

//延时

void DelayMS(uint ms){ uchar i;while(ms--)for(i=0;i<120;i++);} //主程序 void main(){

} SCON=0x50;TMOD=0x20;PCON=0x00;TH1=0xfd;TL1=0xfd;RI=0;TR1=1;LED1=LED2=1;while(1){ if(RI)

} {

//串口模式1,允许接收 //T1工作模式2 //波特率不倍增 //波特率9600 //如收到则LED闪烁

RI=0;switch(SBUF)//根据所收到的不同命令字符完成不同动作 {

}

//关闭LED case 'A': LED1=~LED1;LED2=1;break;case 'B': LED2=~LED2;LED1=1;break;case 'C': LED1=~LED1;LED2=LED1;

//LED1闪烁 //LED2闪烁

//双闪烁

} else LED1=LED2=1;DelayMS(100);

单片机之间双向通信

/* 名称:甲机串口程序 说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管上。*/ #include #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0;

上海师范大学信息与机电工程学院—倪继锋

第五篇:单片机实验9 多分支程序设计

实验9 多分支程序设计

1、实验内容

用P1.0、P1.1控制流水灯的变化

P1.0、P1.1=00灯全灭

P1.0、P1.1=01单灯亮左循环

P1.0、P1.1=10单灯亮右循环

P1.0、P1.1=11双灯亮左循环

灯亮的时时为1秒。用软件延时实现。*用T0定时选作。

2、实验步骤

1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。

2)打开P0、P1窗口给

3)调试灯全灭、单灯亮左循环、单灯亮右循环、双灯亮左循环程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。

4)设断点调试主程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。

首先将P1.0、P1.1置00观察P2窗口灯是否全灭,然后改变P1.0、1.1的设置观察流水灯运行是否正确。

5)流水灯运行中改变P1.0、1.1看流灯能否随之变化。若执行正确程序通过。否则在每个流水子程序中加入读P1口散转子程序。

3.实验报告

1.写出主程序流程图、子程序流程图、程序清单

2.根据记渌数据给程序加注解

3.调试心得

下载51单片机脉冲产生程序设计word格式文档
下载51单片机脉冲产生程序设计.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    怎么用脉冲造句

    脉冲拼音【注音】: mai chong脉冲解释【意思】:(1)指电流或电压的短暂的起伏变化。脉冲形状有矩形、三角形等几种。各种高频脉冲广泛用在无线电技术中。(2)指变化规律类似电脉冲的现......

    AVR单片机C语言高级程序设计(共5则范文)

    AVR单片机C语言高级程序设计 前言 ......................................................................................................................................

    实验1:单片机语言程序设计仿真实验(共5则范文)

    实验一:单片机汇编语言程序设计仿真实验目的: 1.掌握单片机仿真软件的使用。 2.掌握单片机汇编语言程序设计的基本方法。 3.掌握单片机编程、调试方法。设计题目: 1、试编写程序。......

    脉冲除尘器基础知识及使用说明

    脉冲除尘器基础知识及使用说明 一、设备结构:本设备包括,净气室,袋室,灰斗,卸灰阀,气包,脉冲阀,喷吹管,滤袋。 二、工作原理:含尘气体从灰斗上的进风口进入灰斗,然后变向向上进入袋室......

    单片机的C语言程序设计与应用课程教学大纲

    单片机的C语言程序设计与应用课程教学大纲 课程编号: 一、说明 (一)课程性质 本课程应用电子技术专业的必修课。本课程面向的学生主要是高年级本科生。先修课程:数字电子技术、......

    程序设计

    程序设计(给全班人随机分组) 功能特性: 1. 键盘输入组数、班级人数(其中包括有人迟到等特殊情况)。 2. 分好组后出现选择界面,就是当程序块执行完分好组后,由人来判定此分组是......

    脉冲 电子 围栏施工方案

    校园智能电子围栏施工安装方案锦丰广电站根据学校的具体要求以及实际情况,我们采用广拓电子围栏系统,是通过中国公安部第三研究所检测的智能型周边安防阻挡报警系统。广拓系统......

    浅析脉冲电子围栏技术发展及应用

    浅析脉冲电子围栏技术发展及应用 前言》 脉冲电子围栏作为最主流应用的一种实现公共安全的新型高科技智能周界报警产品,它与传统的红外、微波、静电感应等周界安防系统相比,具......