C51复习资料标准_第1页
C51复习资料标准_第2页
C51复习资料标准_第3页
C51复习资料标准_第4页
C51复习资料标准_第5页
已阅读5页,还剩13页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、word1. 8个发光管间隔200ms由上至下,再由下至上(每次亮1个发光二极管),再重复一次,然后全部熄灭再以300ms间隔全部闪烁5次。重复此过程。#include<reg51.h>#include<intrins.h>void delayms(unsigned int xms) /延时xms函数 unsigned int i,j; for(i=0;i<xms;i+) for(j=0;j<110;j+);void main() unsigned int temp,num1,num2; while(1) for(num1=0;num1<2;num1+

2、) /注意外层循环和内层循环一定要使用两个变量,否那么会出错外层循环不起作用因为用同个变量会进入死循环 temp=0x01; for(num2=0;num2<8;num2+) /流水灯由左到右 P1=temp; delayms(200); temp=_crol_(temp,1); temp=0x80; for(num2=0;num2<8;num2+) /流水灯由右到左 P1=temp; delayms(200); temp=_cror_(temp,1); for(num1=0;num1<5;num1+) /控制8个LED全部点亮或者熄灭 P1=0xff; delayms(30

3、0); P1=0x00; delayms(300); 2. 在AT89C51的P1口接有8个发光二极管D0D7,振荡器频率为12MHz。编程实现以下控制要求:(1) 开始,8个发光二极管全暗。(2) 延时1s后,按D0D1D2D3D4D5D6D7顺序依次点亮8个发光二极管,时间间隔为50ms。(3) 延时1s后,按D7D6D5D4D3D2D1D0顺序依次点亮8个发光二极管,时间间隔为50ms。(4) 延时1s后,按D0D2D4D6D1D3D5D7顺序依次点亮8个发光二极管,时间间隔为50ms。(5) 延时1s后,按D1D3D5D7D0D2D4D6顺序依次点亮8个发光二极管,时间间隔为50ms。

4、(6) 重复步骤(1)(5)。/*/程序功能:按不同方式点亮接在P1口上的8个发光二极管/*/#include<reg51.h>unsigned char Disp18= 0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0x0ff ;unsigned char Disp28= 0x80,0x0c0,0x0e0,0x0f0,0x0f8,0x0fc,0x0fe,0x0ff ;unsigned char Disp38= 0x01,0x05,0x15,0x55,0x57,0x5f,0x7f,0x0ff ;unsigned char Disp48= 0x02,0x0a,

5、0x2a,0x0aa,0x0a3,0x0af,0x0bf,0x0ff ;/*/函数名称:DelayXs ( unsigned char x )函数功能:x=20,延时1s;x=1,延时50ms/*/void DelayXs ( unsigned char x ) unsigned char i, j; for( ; x>=1; x- ) for( i=200;i>0;i- ) for( j=250;j>0;j- ) ;/*/函数名称:Disp ( unsigned char *ptr )函数功能:按指定方式亮灯,时间间隔为50ms调用函数:DelayXs ( unsigned

6、 char x )/*/void Disp ( unsigned char *ptr ) unsigned char k;for ( k=0;k<8;k+ ) P1 = *ptr; DelayXs(1); ptr+; /*/函数名称:main ( void )函数功能:主函数,控制亮灯方式调用函数:Disp ( unsigned char *ptr ),DelayXs ( unsigned char x )/*/void main ( void ) unsigned char *PTR;for( ; ; )P1 = 0x00; DelayXs( 20 ); PTR = &Disp

7、1; Disp ( PTR );P1 = 0x00; DelayXs( 20 ); PTR = &Disp2; Disp ( PTR );P1 = 0x00; DelayXs( 20 ); PTR = &Disp3; Disp ( PTR );P1 = 0x00; DelayXs( 20 ); PTR = &Disp4; Disp ( PTR );3. 基于图3-2,编程实现以下功能:开机后,全部LED 不亮;按下K1键就点亮D0,弹起K1键就熄灭D0,按下K2键就点亮D0, D1 ,弹起K2键就熄灭D0,D1,按下K3键就点亮D0, D1 ,D3,弹起K3键就熄灭,按

8、下K4键就点亮D0, D1 ,D3,D4弹起K3键就熄灭./*/程序功能:演示if-else-if语句的使用方法/*/#include <reg51.h>sbit K1=P32; /定义4个按键对应的引脚sbit K2=P33;sbit K3=P34;sbit K4=P35;/*/函数名称:main ( )函数功能:主函数,控制亮灯方式/*/void main () while (1) P3|=0xc3;if ( K1=0 ) P1=0xfe;else if ( K2=0 ) P1=0xfc; else if ( K3=0 ) P1=0xf8; else if ( K4=0 ) P

9、1=0xf0; else P1=0xff; 4. 基于图4.7,P1口连接8个红色发光二极管,其他不变。要求:当主程序正在执行时, P1口连接8个红色发光二极管将闪烁,假设按下K1,那么进入中断状态,P1所连接的8个LED灯将变成单灯左移,而左移三圈后,恢复中断前的状态,程序将继续 执行8灯闪烁功能。/*/程序功能:用外部中断0控制发光二极管熄灭调用函数:Xint0( void ), DelayXs ( unsigned char x ) ,Disp( unsigned char *ptr )/*/#include <reg51.h>unsigned char *PTR;unsig

10、ned char Disp18 = 0x0fe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f ;sbit K1 = P32; / 定义外部中断按键void Xint0( void ) ; / 外部中断0中断函数声明/*/程序名称:DelayXs ( unsigned char x )函数功能:x=20,延时1s;x=1,延时50ms/*/void DelayXs ( unsigned char x ) unsigned char i, j; for( ; x>=1; x- ) for( i=200; i>0; i- ) for( j=250; j>0;

11、 j- ) ; /*/函数名称:Disp ( unsigned char *ptr )函数功能:按指定方式亮灯调用函数:DelayXs ( unsigned char x )/*/void Disp( unsigned char *ptr ) unsigned char k; for( k=0; k<8; k+ ) P1 = *ptr; DelayXs(10); ptr+; /*/函数名称:main ( void )函数功能:主函数,控制亮灯方式调用函数:Disp ( unsigned char *ptr ),DelayXs ( unsigned char x )/*/void main

12、( void ) EA = 1; EX0 = 1; IT0 = 0; for( ; ; ) P1 = 0xff; DelayXs( 2); P1 = 0x00; DelayXs( 2); /*/函数名称:void Xint0 ( void ) interrupt 0 using 3函数功能:用外部中断0控制发光二极管发光调用函数:DelayXs ( unsigned char x ) ,Disp ( unsigned char *ptr )/*/ void Xint0 ( void ) interrupt 0 using 3 /外部中断0中断函数 unsigned char *PTR; P1

13、= 0xff; DelayXs( 2 ); PTR = &Disp1 ; Disp( PTR ); P1 = 0xff; DelayXs( 2 ); PTR = &Disp1 ; Disp( PTR ); P1 = 0xff; DelayXs( 2 ); PTR = &Disp1 ; Disp( PTR );5. 基于图4.7,P1口连接8个红色发光二极管,其他不变。要求:当主程序正在执行时, P1口连接8个红色发光二极管将闪烁,假设按下K1,那么进入中断状态,P1所连接的8个LED灯将变成单灯左移,而左移三圈后,恢复中断前的状态,程序将继续执行8灯闪烁功能。假设按下K

14、2,那么进入中断状态,P1所连接的8个LED灯将变成单灯右移,而右移三圈后,恢复中断前的状态,程序将继续执行8灯闪烁功能。另外要求右移的优先级高于左移。/*/程序功能:用外部中断0控制发光二极管熄灭调用函数:Xint0( void ),Xint1( void ),DelayXs ( unsigned char x ),Disp( unsigned char *ptr )/*/#include <reg51.h>unsigned char *PTR;unsigned char Disp18 = 0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df,0x0bf,0x0

15、7f ;unsigned char Disp28 = 0x07f,0x0bf,0x0df,0x0ef,0x0f7,0x0fb,0x0fd,0x0fe ;sbit K1 = P32; / 定义外部中断按键sbit K2 = P33;void Xint0( void ) ; / 外部中断0中断函数声明void Xint1( void ) ; / 外部中断1中断函数声明/*/程序名称:DelayXs ( unsigned char x )函数功能:x=20,延时1s;x=1,延时50ms/*/void DelayXs ( unsigned char x ) unsigned char i, j; f

16、or( ; x>=1; x- ) for( i=200; i>0; i- ) for( j=250; j>0; j- ); /*/函数名称:Disp ( unsigned char *ptr )函数功能:按指定方式亮灯调用函数:DelayXs ( unsigned char x )/*/void Disp( unsigned char *ptr ) unsigned char k; for( k=0; k<8; k+ ) P1 = *ptr; DelayXs(2); ptr+; /*/函数名称:main ( void )函数功能:主函数,初始化CPU调用函数:Disp

17、( unsigned char *ptr ),DelayXs ( unsigned char x )/*/void main( void )EA = 1; EX0 = 1; EX1 = 1; IT0 = 0;IT1 = 0;PX1 = 1;for( ; ; )P1 = 0xff;DelayXs( 2);P1 = 0x00;DelayXs( 2);/*/函数名称:void Xint0 ( void ) interrupt 0 using 3函数功能:用外部中断0控制发光二极管发光调用函数:DelayXs ( unsigned char x ) ,Disp ( unsigned char *ptr

18、 )/*/void Xint0 ( void ) interrupt 0 using 3 unsigned char *PTR; P1 = 0xff;DelayXs( 2);PTR = &Disp1 ;Disp( PTR ); P1 = 0xff; DelayXs( 2); PTR = &Disp1 ; Disp( PTR ); P1 = 0xff; DelayXs( 2); PTR = &Disp1 ; Disp( PTR );/*/函数名称:void Xint0 ( void ) interrupt 2 using 3函数功能:用外部中断1控制发光二极管发光调用函数

19、:DelayXs ( unsigned char x ) ,Disp ( unsigned char *ptr )/*/ void Xint1 ( void ) interrupt 2 using 2 unsigned char *PTR; P1 = 0xff; DelayXs( 2); PTR = &Disp2 ; Disp( PTR ); P1 = 0xff; DelayXs( 2); PTR = &Disp2 ; Disp( PTR ); P1 = 0xff; DelayXs( 2); PTR = &Disp2 ; Disp( PTR );6. 利用键盘控制4级变

20、速流水灯,按下K1延时0.1秒,按下K2延时0.2秒,按下K3延时0.5秒,按下K4延时1秒。利用CPU控制和定时器中断两种方式。/*/程序功能:用CPU控制发光二极管的状态/*/#include <reg51.h>unsigned int time = 50; / 时间间隔50msvoid delayXms( unsigned int x ); / 延时xms函数void keypad( ); / 键盘扫描及按键处理void K1( unsigned int x ); / 以时间间隔x依次点亮D1D8void K2( unsigned int y ); / 以时间间隔y依次点亮D

21、8D1void K3( unsigned int x); void K4( unsigned int y );/*/函数名称:void main( )函数功能:主函数,完成题目要求的功能/*/void main( ) P1 = 0x00; / 开机D1D8全亮 while( 1 ) keypad( );/*/函数名称:void delayXms( unsigned char x )函数功能:延时xms,振荡器频率focs为12MHz/*/void delayXms( unsigned int x ) unsigned int y,z; for( ; x>0; x- ) for( y=4;

22、 y>0; y- ) for( z=250; z>0; z-);/*/函数名称:void keypad( )函数功能:键盘扫描及按键处理/*/void keypad( ) unsigned char keyvalue; for( ; ; ) P0 = P0|0xff; keyvalue = P0&0x0f; / 第1次读I/O口 if( keyvalue=0x0f ) break; / 无键闭合 delayXms( 10 ); / 有键闭合,延时,消除按键抖动 keyvalue = P0&0x0f; / 第2次读I/O口 switch( keyvalue ) cas

23、e 0x0e: K1( 100 ); break; / K1闭合 case 0x0d: K2( 300 ); break; / K2闭合 case 0x0b: K3( 500 ); break; / K3闭合 case 0x07: K4( 1000); break; / K4闭合 case 0x0f: P1 = 0x00; break; / 无键闭合 /*/函数名称:void K1( unsigned int x )函数功能:按时间间隔x依次点亮D1D8/*/void K1( unsigned int x ) P1 = 0xfe; delayXms( x ); P1 = 0xfc; delay

24、Xms( x ); P1 = 0xf8; delayXms( x ); P1 = 0xf0; delayXms( x ); P1 = 0xe0; delayXms( x ); P1 = 0xc0; delayXms( x ); P1 = 0x80; delayXms( x ); P1 = 0x00; delayXms( x ); /*/函数名称:void K2( unsigned int y )函数功能:按时间间隔y依次点亮D1D8/*/void K2( unsigned int y ) P1 = 0xfe; delayXms( y ); P1 = 0xfc; delayXms( y ); P

25、1 = 0xf8; delayXms( y ); P1 = 0xf0; delayXms( y ); P1 = 0xe0; delayXms( y ); P1 = 0xc0; delayXms( y ); P1 = 0x80; delayXms( y ); P1 = 0x00; delayXms( y ); /*/函数名称:void K3( unsigned int x )函数功能:D1D8按时间间隔x闪烁/*/void K3( unsigned int x ) P1 = 0xfe; delayXms( x ); P1 = 0xfc; delayXms( x ); P1 = 0xf8; del

26、ayXms( x ); P1 = 0xf0; delayXms( x ); P1 = 0xe0; delayXms( x ); P1 = 0xc0; delayXms( x ); P1 = 0x80; delayXms( x ); P1 = 0x00; delayXms( x ); /*/函数名称:void K4( unsigned int y )函数功能:按时间间隔y依次点亮D1D8/*/void K4( unsigned int y ) P1 = 0xfe; delayXms( y ); P1 = 0xfc; delayXms( y ); P1 = 0xf8; delayXms( y );

27、 P1 = 0xf0; delayXms( y ); P1 = 0xe0; delayXms( y ); P1 = 0xc0; delayXms( y ); P1 = 0x80; delayXms( y ); P1 = 0x00; delayXms( y );/*/函数功能:定时器中断控制的独立式键盘扫描实验/*/#include<reg51.h> sbit S1=P14; /将S1位定义为P1.4引脚sbit S2=P15; /将S2位定义为P1.5引脚sbit S3=P16; /将S3位定义为P1.6引脚sbit S4=P17; /将S4位定义为P1.7引脚unsigned c

28、har keyval; /储存按键值/*/函数功能:流水灯延时/*/void led_delay(unsigned int x ) unsigned char y,z; for( ; x>=1; x- ) for( y=20; y>0; y- ) for( z=50; z>0; z-);/*/函数功能:软件消抖延时/*/void delay20ms(void) unsigned char i,j; for(i=0;i<100;i+) for(j=0;j<60;j+) ;/*/函数功能:正向流水点亮LED/*/void forward1(void) P3=0x7f;

29、 /第一个灯亮 led_delay(100); P3=0xbf; /第二个灯亮 led_delay(100); P3=0xdf; /第三个灯亮 led_delay(100); P3=0xef; /第四个灯亮 led_delay(100); P3=0xf7; /第五个灯亮 led_delay(100); P3=0xfb; /第六个灯亮 led_delay(100); P3=0xfd; /第七个灯亮 led_delay(100); P3=0xfe; /第八个灯亮 led_delay(100);/*/函数功能:正向流水点亮LED/*/void forward2(void) P3=0x7f; /第一个

30、灯亮 led_delay(300); P3=0xbf; /第二个灯亮 led_delay(300); P3=0xdf; /第三个灯亮 led_delay(300); P3=0xef; /第四个灯亮 led_delay(300); P3=0xf7; /第五个灯亮 led_delay(300); P3=0xfb; /第六个灯亮 led_delay(300); P3=0xfd; /第七个灯亮 led_delay(300); P3=0xfe; /第八个灯亮 led_delay(300); /*/函数功能:正向流水点亮LED/*/void forward3(void) P3=0x7f; /第一个灯亮 l

31、ed_delay(500); P3=0xbf; /第二个灯亮 led_delay(500); P3=0xdf; /第三个灯亮 led_delay(500); P3=0xef; /第四个灯亮 led_delay(500); P3=0xf7; /第五个灯亮 led_delay(500); P3=0xfb; /第六个灯亮 led_delay(500); P3=0xfd; /第七个灯亮 led_delay(500); P3=0xfe; /第八个灯亮 led_delay(500);/*/函数功能:正向流水点亮LED/*/void forward4(void) P3=0x7f; /第一个灯亮 led_de

32、lay(1000); P3=0xbf; /第二个灯亮 led_delay(1000); P3=0xdf; /第三个灯亮 led_delay(1000); P3=0xef; /第四个灯亮 led_delay(1000); P3=0xf7; /第五个灯亮 led_delay(1000); P3=0xfb; /第六个灯亮 led_delay(1000); P3=0xfd; /第七个灯亮 led_delay(1000); P3=0xfe; /第八个灯亮 led_delay(1000); /*/函数功能:主函数/*/void main(void) /主函数 TMOD=0x01; /使用定时器T0的模式1

33、 EA=1; /开总中断 ET0=1; /定时器T0中断允许 TR0=1; /启动定时器T0 TH0=(65536-1000)/256; /定时器T0赋初值,每计数200次217微秒发送一次中断请求 TL0=(65536-1000)%256; /定时器T0赋初值 keyval=0; /按键值初始化为0,什么也不做 while(1) switch(keyval) case 1:forward1();break; case 2:forward2();break; case 3:forward3();break; case 4: forward4();break; /*/函数功能:定时器T0的中断效劳子程序/*/void Time0_serve(void) interrupt 1 using 1 if(P1&0xf0)!=0xf0) /第一次检测到有键按下 delay20ms(); /延时20ms再去检测 if(S1=0) /按键S1被按下 keyval=1; if(S2=0) /按键S2被按下 keyval=2; if(S3=0) /按键S3被按下 key

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论