【51单片机学习笔记】:P01 STC89C52RC

复制代码
在使用 _nop_(); 指令时,需要引用头文件

#include "intrins.h"

当我们需要给整组对 P1 口赋值时:
P1 = 0xfe;

标准库函数:intrins.h
字符型循环左移:_crol_
字符型循环右移:_cror_

举个例子:
#include <intrins.h>
void test_crol (void) 
{
  unsigned char a;
  unsigned char b;
  a = 0xFE;      //1111 1110
  b = _crol_(a,1); // b now is 0xFD  二进制为1111 1101
}


使用字符型循环左移:
#include <intrins.h>
void test_crol (void) {
  unsigned char a;
  unsigned char b;
  a = 0xFE;        //1111 1110
  b = _crol_(a,1); // b now is 0xFD  二进制为1111 1101
}
使用左移运算符
  a = 0xFE;        //1111 1110
  b = a<<1;        // b now is 0xFC  二进制为1111 1100
以上着两者的区别:循环左移是把最高位移到最低位上,左移运算符是把最高位移除最低位补0。

流水灯

复制代码
	uchar temp = 0xfe;   //声明一个中间变量,用来存储IO状态
	P1 = temp;           //将temp赋值给P1口
	Delay300ms();        //延时
	
	while(1)
	{
		temp = _crol_(temp,1);   //将temp循环左移1位,并赋值给temp
		P1 = temp;               //将temp赋值给P1口
		Delay300ms();            //延时
	}

蜂鸣器

复制代码
状态取反
beep = ~beep;//	蜂鸣器发出滴滴声

数码管的静态显示与动态显示

复制代码
共阴极数码码表
0x3F,  //"0"
0x06,  //"1"
0x5B,  //"2"
0x4F,  //"3"
0x66,  //"4"
0x6D,  //"5"
0x7D,  //"6"
0x07,  //"7"
0x7F,  //"8"
0x6F,  //"9"
0x77,  //"A"
0x7C,  //"B"
0x39,  //"C"
0x5E,  //"D"
0x79,  //"E"
0x71,  //"F"
0x76,  //"H"
0x38,  //"L"
0x40,  //"-"
0x00,  //熄灭

动态显示分 "段选" 跟 "位选"

74HC573锁存器

锁存器的作用:可以把数据输入端与输出端进行隔离或连接

  • 输出口Q要想输出高低电平OE使能脚必须接GND。

  • LE脚为高时,输出端Q随输入端D的数据而变化。

  • LE脚为低时,输出端Q数据保持不变,输入端D数据变化不会改变Q的数据。

    sbit DU = P2^6;//数码管段选
    sbit WE = P2^7;//数码管段选

    WE = 1; //打开位选锁存器
    P0 = 0XFE; //1111 1110 选通第一位数码管
    WE = 0; //锁存位选数据

    DU = 1; //打开段选锁存器
    P0 = 0X06; //0000 0110 显示"1"
    DU = 0; //锁存段选数据

    //第一位数码管
    P0 = 0XFF; //清除断码
    WE = 1; //打开位选锁存器
    P0 = 0XFE; //1111 1110
    WE = 0; //锁存位选数据

    DU = 1; //打开段选锁存器
    P0 = tabel[bai];
    DU = 0; //锁存段选数据
    delay(5);

自适应延时函数

复制代码
// delay.c 文件

//========================================================================
// 函数: void  Delay_Ms(INT16U ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-8-8
// 备注: 
//========================================================================
void Delay_Ms(INT16U ms)
{
     INT16U i;
	 do{
	      i = MAIN_Fosc / 96000;
		  while(--i)	;   //96T per loop
     }while(--ms);
}
//========================================================================
// 函数: void  Delay5us()
// 描述: 5us延时函数,自动适应11.0592M、12M、22.1184M主时钟。
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-8-9
// 备注: 
//========================================================================
void Delay5us()
{
	#if MAIN_Fosc == 11059200
		_nop_();
	#elif MAIN_Fosc == 12000000
		_nop_()
	#elif MAIN_Fosc == 22118400
		_nop_(); _nop_(); _nop_();
	#endif
}

// delay.h 文件

#ifndef	__DELAY_H
#define	__DELAY_H

#include	"REGX52.h"

/*********************************************************/

//#define MAIN_Fosc		24000000UL	//定义主时钟
//#define MAIN_Fosc		22118400UL	//定义主时钟
//#define MAIN_Fosc		12000000UL	//定义主时钟
#define MAIN_Fosc		11059200UL	//定义主时钟
//#define MAIN_Fosc		 5529600UL	//定义主时钟

/*********************************************************/

void Delay_Ms(INT16U ms);
void Delay5us();
#endif

数据类型

复制代码
// datatype.h 文件

#ifndef		__DATATYPE_H
#define		__DATATYPE_H

/*********************************************************/

typedef bit BOOL;	//位变量
typedef unsigned char 	INT8U;//无符号8位整型变量
typedef signed char		INT8S;//有符号8位整型变量
typedef unsigned int 	INT16U;//无符号16位整型变量
typedef signed int		INT16S;//有符号16位整型变量
typedef unsigned long	INT32U;//无符号32位整型变量
typedef signed long		INT32S;//有符号32位整型变量
typedef float			FP32;  //单精度浮点数(32位长度)
typedef double			FP64;  //双精度浮点数(64位长度)	

typedef unsigned char 	uchar; //无符号8位整型变量
typedef unsigned int	uint;  //无符号16位整型变量
/*********************************************************/

#endif
相关推荐
中屹指纹浏览器1 小时前
2026浏览器本地缓存分区机制演进与沙箱缓存差异化运维探究
经验分享·笔记
tedcloud1231 小时前
Dolt部署教程:打造可追踪数据变更的数据库环境
服务器·数据库·人工智能·学习·自动化·powerpoint
赏金术士1 小时前
Android 组件化学习项目(Kotlin + AGP8+)
android·学习·kotlin
sulikey2 小时前
个人Linux操作系统学习笔记7 - 进程理解
linux·笔记·学习·操作系统·进程·pid
程序喵大人2 小时前
C++ 程序员转型 AI Infra 学习路线
c++·人工智能·学习·ai infra
问心无愧05132 小时前
ctf show web入门100
android·ide·笔记·android studio
张_boss2 小时前
从“成本中心”到“价值中心”:IT部门的价值突围
经验分享·笔记·程序人生
RainCityLucky2 小时前
Java Swing 自定义组件库分享(十一)
java·笔记·后端
段一凡-华北理工大学2 小时前
工业领域的Hadoop架构学习~系列文章14:Hadoop集群部署 - 从规划到上线的全流程实践
大数据·数据库·人工智能·hadoop·学习·架构·高炉炼铁