51单片机系统练习

 头文件内容:

/*--------------------------------------------------------------------------
AT89X52.H

Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __AT89X52_H__
#define __AT89X52_H__

/*------------------------------------------------
Byte Registers
------------------------------------------------*/
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;
sfr TMOD    = 0x89;
sfr TL0     = 0x8A;
sfr TL1     = 0x8B;
sfr TH0     = 0x8C;
sfr TH1     = 0x8D;
sfr P1      = 0x90;
sfr SCON    = 0x98;
sfr SBUF    = 0x99;
sfr P2      = 0xA0;
sfr IE      = 0xA8;
sfr P3      = 0xB0;
sfr IP      = 0xB8;
sfr T2CON   = 0xC8;
sfr T2MOD   = 0xC9;
sfr RCAP2L  = 0xCA;
sfr RCAP2H  = 0xCB;
sfr TL2     = 0xCC;
sfr TH2     = 0xCD;
sfr PSW     = 0xD0;
sfr ACC     = 0xE0;
sfr B       = 0xF0;

/*------------------------------------------------
P0 Bit Registers
------------------------------------------------*/
sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

/*------------------------------------------------
PCON Bit Values
------------------------------------------------*/
#define IDL_    0x01

#define STOP_   0x02
#define PD_     0x02    /* Alternate definition */

#define GF0_    0x04
#define GF1_    0x08
#define SMOD_   0x80

/*------------------------------------------------
TCON Bit Registers
------------------------------------------------*/
sbit IT0  = 0x88;
sbit IE0  = 0x89;
sbit IT1  = 0x8A;
sbit IE1  = 0x8B;
sbit TR0  = 0x8C;
sbit TF0  = 0x8D;
sbit TR1  = 0x8E;
sbit TF1  = 0x8F;

/*------------------------------------------------
TMOD Bit Values
------------------------------------------------*/
#define T0_M0_   0x01
#define T0_M1_   0x02
#define T0_CT_   0x04
#define T0_GATE_ 0x08
#define T1_M0_   0x10
#define T1_M1_   0x20
#define T1_CT_   0x40
#define T1_GATE_ 0x80

#define T1_MASK_ 0xF0
#define T0_MASK_ 0x0F

/*------------------------------------------------
P1 Bit Registers
------------------------------------------------*/
sbit P1_0 = 0x90;
sbit P1_1 = 0x91;
sbit P1_2 = 0x92;
sbit P1_3 = 0x93;
sbit P1_4 = 0x94;
sbit P1_5 = 0x95;
sbit P1_6 = 0x96;
sbit P1_7 = 0x97;

sbit T2   = 0x90;       /* External input to Timer/Counter 2, clock out */
sbit T2EX = 0x91;       /* Timer/Counter 2 capture/reload trigger & dir ctl */

/*------------------------------------------------
SCON Bit Registers
------------------------------------------------*/
sbit RI   = 0x98;
sbit TI   = 0x99;
sbit RB8  = 0x9A;
sbit TB8  = 0x9B;
sbit REN  = 0x9C;
sbit SM2  = 0x9D;
sbit SM1  = 0x9E;
sbit SM0  = 0x9F;

/*------------------------------------------------
P2 Bit Registers
------------------------------------------------*/
sbit P2_0 = 0xA0;
sbit P2_1 = 0xA1;
sbit P2_2 = 0xA2;
sbit P2_3 = 0xA3;
sbit P2_4 = 0xA4;
sbit P2_5 = 0xA5;
sbit P2_6 = 0xA6;
sbit P2_7 = 0xA7;

/*------------------------------------------------
IE Bit Registers
------------------------------------------------*/
sbit EX0  = 0xA8;       /* 1=Enable External interrupt 0 */
sbit ET0  = 0xA9;       /* 1=Enable Timer 0 interrupt */
sbit EX1  = 0xAA;       /* 1=Enable External interrupt 1 */
sbit ET1  = 0xAB;       /* 1=Enable Timer 1 interrupt */
sbit ES   = 0xAC;       /* 1=Enable Serial port interrupt */
sbit ET2  = 0xAD;       /* 1=Enable Timer 2 interrupt */

sbit EA   = 0xAF;       /* 0=Disable all interrupts */

/*------------------------------------------------
P3 Bit Registers (Mnemonics & Ports)
------------------------------------------------*/
sbit P3_0 = 0xB0;
sbit P3_1 = 0xB1;
sbit P3_2 = 0xB2;
sbit P3_3 = 0xB3;
sbit P3_4 = 0xB4;
sbit P3_5 = 0xB5;
sbit P3_6 = 0xB6;
sbit P3_7 = 0xB7;

sbit RXD  = 0xB0;       /* Serial data input */
sbit TXD  = 0xB1;       /* Serial data output */
sbit INT0 = 0xB2;       /* External interrupt 0 */
sbit INT1 = 0xB3;       /* External interrupt 1 */
sbit T0   = 0xB4;       /* Timer 0 external input */
sbit T1   = 0xB5;       /* Timer 1 external input */
sbit WR   = 0xB6;       /* External data memory write strobe */
sbit RD   = 0xB7;       /* External data memory read strobe */

/*------------------------------------------------
IP Bit Registers
------------------------------------------------*/
sbit PX0  = 0xB8;
sbit PT0  = 0xB9;
sbit PX1  = 0xBA;
sbit PT1  = 0xBB;
sbit PS   = 0xBC;
sbit PT2  = 0xBD;

/*------------------------------------------------
T2CON Bit Registers
------------------------------------------------*/
sbit CP_RL2= 0xC8;      /* 0=Reload, 1=Capture select */
sbit C_T2 = 0xC9;       /* 0=Timer, 1=Counter */
sbit TR2  = 0xCA;       /* 0=Stop timer, 1=Start timer */
sbit EXEN2= 0xCB;       /* Timer 2 external enable */
sbit TCLK = 0xCC;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit RCLK = 0xCD;       /* 0=Serial clock uses Timer 1 overflow, 1=Timer 2 */
sbit EXF2 = 0xCE;       /* Timer 2 external flag */
sbit TF2  = 0xCF;       /* Timer 2 overflow flag */

/*------------------------------------------------
T2MOD Bit Values
------------------------------------------------*/
#define DCEN_   0x01    /* 1=Timer 2 can be configured as up/down counter */
#define T2OE_   0x02    /* Timer 2 output enable */

/*------------------------------------------------
PSW Bit Registers
------------------------------------------------*/
sbit P    = 0xD0;
sbit F1   = 0xD1;
sbit OV   = 0xD2;
sbit RS0  = 0xD3;
sbit RS1  = 0xD4;
sbit F0   = 0xD5;
sbit AC   = 0xD6;
sbit CY   = 0xD7;

/*------------------------------------------------
Interrupt Vectors:
Interrupt Address = (Number * 8) + 3
------------------------------------------------*/
#define IE0_VECTOR	0  /* 0x03 External Interrupt 0 */
#define TF0_VECTOR	1  /* 0x0B Timer 0 */
#define IE1_VECTOR	2  /* 0x13 External Interrupt 1 */
#define TF1_VECTOR	3  /* 0x1B Timer 1 */
#define SIO_VECTOR	4  /* 0x23 Serial port */

#define TF2_VECTOR	5  /* 0x2B Timer 2 */
#define EX2_VECTOR	5  /* 0x2B External Interrupt 2 */

#endif



  • 单个LED灯的闪烁
    #include<REGX52.H>
    
    void Delay(unsigned int number)	//@12.000MHz
    {
    	unsigned char data i, j;
    
    	while (number--)
    	{
    			i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    
    void main()
    {
    	while (1)
    	{
    		P2_0=0;
    		Delay(500);
    		P2_0=1;
    		Delay(500);
    	}
    	
    	
    }
    
     
  •  流水灯设计,软件定时器的使用
#include<REGX52.H>
#include<intrins.h>

void Delay(unsigned int number)	//@12.000MHz
{
	unsigned char data i, j, k;

	_nop_();
	_nop_();
	while(number--)
	{
			
			i = 5;
			j = 144;
			k = 71;
			do
			{
				do
				{
					while (--k);
				} while (--j);
			} while (--i);
	}
}
void main ()
{
	while (1)
	{
		P2=0xFE;
		Delay(500);
		P2=0xFD;
		Delay(500);
		P2=0xFB;
		Delay(500);
		P2=0xF7;
		Delay(500);
		P2=0xEF;
		Delay(500);
		P2=0xDF;
		Delay(500);
		P2=0xBF;
		Delay(500);
		P2=0x7F;
		Delay(500);	
	}

}
  • 延迟函数
  • void Delay(unsigned int number)	//@12.000MHz
    {
    	unsigned char data i, j;
    
    	while (number--)
    	{
    			i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
  •  按键独立控制LED灯亮灭
  • #include<REGX52.H>
    void main ()
    {
    	if (P3_1==0)
    	{
    		P2_0=0;
    	}
    	else
    	{
    		P2_0=1;
    	}
    	while (1);//需要先初始化一次再按击K1键位
    }
    
    
    

    版本二

  • #include<REGX52.H>
    
    
    //时间延迟器(初始化 1  毫秒)(输入数据 转化为秒)
    void Delay(unsigned int number)	//@12.000MHz
    {
    	unsigned char data i, j;
    
    	while (number--)
    	{
    	    i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    
    void main()
    {
    	while (1)
    	{
    		if (P3_1==0)//判断按键K1 是否高电平
    		{
    			Delay(20);//时间延迟效果,(震荡波)
    			while(P3_1==0);//确定按键操作
    			Delay (20);
    			
    			P2_0=~P2_0;//按位取反,修改P2_0处的高低电平
    		}
    	}
    	
    	
    }
    

  • 按键控制左右移动
  • #include <REGX52.H>
    
    
    
    void Delay(unsigned int number)	//@12.000MHz
    {
    	unsigned char data i, j;
    
    	while (number --)
    	{
    		i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    
    unsigned char LEDNum=0;
    
    void main()
    {
        P2=~0x01;//初始化操作
    	while (1)
    	{
    		if (P3_1 == 0)
    		{
    			Delay(20);
    			while (P3_1 == 0);
    			Delay(20);
    			
    			LEDNum++;
    			if(LEDNum >= 8)//判断是否大于8 ?0:》越界处理
    			{
    				LEDNum = 0 ;
    			}
    			P2_0=~(0x01<<LEDNum);//实现二进制数据左移,比如(0x01)-( 0000 0001 )-> (0000 0010 );控制高低电平输出
    		}			
    	}
    	
    }

    左右移动

  • #include <REGX52.H>
    
    
    
    void Delay(unsigned int number)	//@12.000MHz
    {
    	unsigned char data i, j;
    
    	while (number --)
    	{
    		i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    
    unsigned char LEDNum=0;
    
    void main()
    {
    	P2=~0x01;
    	while (1)
    	{
    		if (P3_1 == 0)
    		{
    			Delay(20);
    			while (P3_1 == 0);
    			Delay(20);
    			
    			LEDNum++;
    			if(LEDNum >= 8)
    			{
    				LEDNum = 0 ;
    			}
    			P2_0=~(0x01<<LEDNum);
    		}	
    			if (P3_0 == 0)
    		{
    			Delay(20);
    			while (P3_0 == 0);
    			Delay(20);
    			
    			if(LEDNum == 0)
    				LEDNum = 7 ;
    			else 
    				LEDNum--;
    
    			P2_0=~(0x01<<LEDNum);
    		}	
    	}
    	
    }

  • 按键控制二进制显示
  • #include<REGX52.H>
    
    void Delay(unsigned int number)	//@12.000MHz
    {
    	unsigned char data i, j;
    	while (number--)
    	{
    		i = 2;
    		j = 239;
    		do
    		{
    			while (--j);
    		} while (--i);
    	}
    }
    void main()
    {
    	
    	unsigned char LEDNum=0;//自定义
    	while (1)
    	{
    		if (P3_1==0)
    		{
    			Delay(20);
    			while (P3_1==0);
    			Delay (20);
    			
    			LEDNum ++;//按位,转换为二进制()比如——( 0 ) -> 先进行加一操作(1)-- >  
    二进制转换( 0000  0001  ); 
    			P2_0=~LEDNum;//二进制取反操作( 0000 0001 )---> ( 1111 1110 )“控制电平高低”
    			
    		}
    		
    		
    	}
    	
    	
    }
    

  • 数码管显示
#include<REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//数码管段码表(还有--- > > 0x77  0x7C  0x39  0x5E  0x79  0x71  0x00(空) )

void Nixie(unsigned char Location ,unsigned char Number )
{
	
	switch (Location)
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];
}

void main()
{
	Nixie(2,3);
	while(1);
	
}

 第二版本

#include<REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void Delay(unsigned int number)	//@12.000MHz
{
	unsigned char data i, j;

	while(number--)
	{
			i = 2;
			j = 239;
			do
			{
				while (--j);
			} while (--i);
	}
}


void Nixie(unsigned char Location ,unsigned char Number )
{
	
	switch (Location)
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];
}

void main()
{
	while(1)
	{
		Nixie(1,1);
		Delay(20);
		Nixie(2,2);
		Delay(20);
		Nixie(3,3);
		Delay(20);
		Nixie(4,4);
		Delay(20);
		Nixie(5,5);
		Delay(20);
	}
	
}

版本三

#include<REGX52.H>

unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

void Delay(unsigned int number)	//@12.000MHz
{
	unsigned char data i, j;

	while(number--)
	{
			i = 2;
			j = 239;
			do
			{
				while (--j);
			} while (--i);
	}
}


void Nixie(unsigned char Location ,unsigned char Number )
{
	
	switch (Location)
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];
	Delay (1);
	P2=0x00;
}

void main()
{
	while(1)
	{
		Nixie(1,1);
		Delay(20);
		Nixie(2,2);
		Delay(20);
		Nixie(3,3);
		Delay(20);
		Nixie(4,4);
		Delay(20);
		Nixie(5,5);
		Delay(20);
	}
	
}

  • 16
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码 课程设计 51单片机开发 编程 实验 模块 源代码
基于C51单片机数字记忆练习器是一种通过使用C51单片机来制作的数学记忆练习装置。该装置旨在帮助用户提高数字记忆能力并锻炼大脑。 这个数字记忆练习器的工作原理如下:首先,装置会在一个小屏幕上显示一系列的数字,这些数字会以特定的顺序快速闪烁。接着,用户需要记住这些数字的顺序。当数字停止闪烁后,用户需要按照记忆的顺序逐个输入这些数字。装置会通过C51单片机进行比对,对用户的输入进行评估,然后给出准确性的反馈。 通过这种训练方式,用户可以锻炼并提高数字记忆能力。随着训练的进行,装置可以逐渐增加数字的个数和复杂度,从而提高记忆的难度和水平。用户可以在家中或者其他自选的时间和地点进行练习,这样可以方便地获得训练和提高记忆能力的机会。 此外,基于C51单片机数字记忆练习器也具备其他功能。它可以记录用户每次训练的数据,以便用户进行对比和跟踪进展。装置还可以设置不同的模式和难度级别,以满足不同用户的需求。同时,装置的大小适中,携带方便,用户可以随时随地使用它进行训练。 总之,基于C51单片机数字记忆练习器是一种方便高效的工具,可用于锻炼和提高数字记忆能力。通过持续而有针对性的训练,用户能够提升大脑的记忆能力,并在日常生活中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值