51单片机系统练习

 头文件内容:

/*--------------------------------------------------------------------------
AT89X52.HHeader 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);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM学习-虚拟机层面看String

String基本特性 String字符串&#xff0c;使用一对“”引起来表示 String s1 “lotus”; //字面量定义方式String s2 new String(“hello”) String声明为final,不可被继承String实现了Serializable接口&#xff0c;表示字符串支持序列化&#xff0c;实现Comparable接口&…

供应链金融模式学习资料

目录 产生背景 供应链金融的诞生 供应链金额的六大特征

结构安全预警?事前发现?人工观测VS自动化监测,谁更胜一筹?

人工检测是依靠目测检查或借助于便携式仪器测量得到的信息&#xff0c;但是随着整个行业的发展&#xff0c;传统的人工检测方法已经不能满足检测需求&#xff0c;从人工检测到自动化监测已是必然趋势。 a. 从检测方式看 人工检测需要耗费大量的精力&#xff0c;从摆放检测工具到…

Golang | Leetcode Golang题解之第110题平衡二叉树

题目&#xff1a; 题解&#xff1a; func isBalanced(root *TreeNode) bool {return height(root) > 0 }func height(root *TreeNode) int {if root nil {return 0}leftHeight : height(root.Left)rightHeight : height(root.Right)if leftHeight -1 || rightHeight -1 …

最热门好用骨传导耳机推荐!!分享六大实用选购技巧助你挑选!

耳机基本是每人人手一台&#xff0c;不管是在地铁上还是在公交上&#xff0c;都可以看到很多人戴着耳机度过空余的时光&#xff0c;甚至现在人们在耳机的选择方面更加偏向于骨传导耳机&#xff0c;开放耳道的奇特设计在户外佩戴的时候可以更好的感知到周围的环境音&#xff0c;…

java标准库介绍

Java 提供了一个丰富且功能强大的标准库,也称为 Java API(Application Programming Interface)。这些库涵盖了广泛的功能,从基础数据结构和集合,到并发编程、网络通信、图形界面和XML处理等。以下是一些最基本和常用的 Java 库和包: 1. java.lang 包 java.lang 包是 Ja…

java单元测试:JUnit测试运行器

JUnit测试运行器&#xff08;Test Runner&#xff09;决定了JUnit如何执行测试。JUnit有多个测试运行器&#xff0c;每个运行器都有特定的功能和用途。 1. 默认运行器 当没有显式指定运行器时&#xff0c;JUnit会使用默认运行器&#xff0c;这在JUnit 4和JUnit 5之间有所不同…

基于多模态MRI中深层语义和边缘信息融合的脑肿瘤分割 | 文献速递-深度学习肿瘤自动分割

Title 题目 Brain tumor segmentation based on the fusion of deep semantics and edge information in multimodal MRI 基于多模态MRI中深层语义和边缘信息融合的脑肿瘤分割 01 文献速递介绍 医学图像分割是医学图像处理领域的重要课题。其中&#xff0c;脑肿瘤分割旨在…

基础5 探索JAVA图形编程桌面:字符操作组件详解

在繁华都市的一个角落&#xff0c;卧龙和凤雏相聚在他们常去的台球厅。灯光洒在绿色的台球桌上&#xff0c;彩色的台球整齐地排列着&#xff0c;仿佛在等待着一场激烈的角逐。 卧龙轻轻地拿起球杆&#xff0c;微微瞄准&#xff0c;然后用力一击&#xff0c;白球带着一股强大的力…

C#_库的引用

类库的引用 还可以自己引用类库&#xff1a;解决方案-添加-新建项目 主程序 using System; using System.Windows.Forms; using Tools;namespace ConsoleApp2 {class Program{static void Main(string[] args){//Console.WriteLine("helloword");// Form form ne…

[力扣]——70.爬楼梯

题目描述&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 本题较为简单&#xff0c;主要用到递归思想 int fun(int n,int memo[]) {if(memo[n]!-1) //如果备忘录中已经有记录了…

MVCC相关

文章目录 前情要点基于什么引擎并发事务产生的问题不可重复读和幻读区别Next-Key Lock的示例解决并发事务采用的隔离级别当前读(Current Read)快照读(Snapshot Read)参考 MVCC定义表里面的隐藏字段由db_roll_ptr串成的版本链ReadView可见性算法mvcc的可见性算法为什么要以提交的…

Java封装

什么是封装&#xff1f; 封装是指在将对象的状态信息隐藏在对象内部&#xff0c;不允许外部程序直接访问对象内部的信息&#xff0c;而是通过该类所提供的方法来实现对内部信息的操作和访问 封装的作用 隐藏类的实现细节 让使用者只能通过事先预定的方法来访问数据&#xff0c…

WMI技术介绍以及使用WMI技术获取系统信息

WMI简介 Windows Management Instrumentation&#xff08;WMI&#xff09;是Microsoft Windows操作系统中一个强大的管理框架&#xff0c;它允许管理员以及开发者以标准化的方式访问和控制系统的各种硬件、操作系统组件、应用程序以及网络资源。WMI是基于Web-Based Enterprise…

React Suspense与Concurrent Mode:异步渲染的未来

React的Suspense和Concurrent Mode是React 16.8及更高版本引入的概念&#xff0c;旨在提升用户体验和性能&#xff0c;特别是在处理异步数据加载和动画时。它们是React的下一代渲染策略的一部分&#xff0c;目的是实现更流畅的交互和更高效的资源调度。 Suspense Suspense是一…

Linux之单机项目部署

1、虚拟机&#xff08;VMware&#xff09;创建Linux系统 1.1、创建虚拟机 1.2、配置虚拟机IOS映射文件 1.3、虚拟机内部相关配置 等待加载即可&#xff0c;加载完后会弹出图形化界面&#xff0c;如图&#xff1a; 注意&#xff1a;一般我们做为管理员使用ROOT账号来操作&#x…

[AI Google] Android的防盗功能可保护您的设备和数据安全

Android的新功能可在盗窃发生前、期间和之后帮助保护您的数据的三种方式。 智能手机帮助我们处理日常任务&#xff0c;如在线银行业务、存储敏感信息、为朋友和家人拍照以及快速支付购物。尽管手机让我们的生活变得更加便捷&#xff0c;但它们也包含了大量宝贵信息&#xff0c…

微服务架构(如SpringCloud )中业务中台概念讲解

概念讲解 在微服务架构特别是Spring Cloud技术领域中&#xff0c;业务中台&#xff08;Business Middle Platform, BMP&#xff09;是一个关键概念&#xff0c;旨在通过整合和复用企业的核心业务能力&#xff0c;提高业务响应速度和敏捷性。以下是业务中台的详细讲解&#xff…

数据结构和算法基础(二)

树和二叉树——树的基本概念 树和二叉树——树转二叉树 树和二叉树——查找二叉树&#xff08;二叉排序树&#xff09; 树和二叉树——构造霍夫曼树&#xff08;最优&#xff09; 树和二叉树——线索二叉树 树和二叉树——平衡二叉树 图——基本概念 1、有向图 2、无向图 3、完…