51单片机学习笔记

预备知识:

1.电平特性 

2.二进制B十六进制H

 3.单片机名称含义

例子:      STC89C52RC       (STC:生产厂家 ,89:单片机系列, C:单片机内部为Cmos器件, 52:2代表ROM大小52ROM为2X4K)

                  40I-PDIP40        (40:此单片机最大晶振频率为40MHZ,I:工业级单片机(C:商业级单片机)两者区别在于温度不同,PDIP:封装形式为双列直插式。)

                  2051H21R86.X90C (2051:20年第51周生产  H21.....:含义不明不重要)

4.80C51的引脚封装


 5.80C51内部结构

 6.C-51知识

1.数据类型扩充定义

 sfr SCON = OX98;//声明一个特殊功能寄存器SCON其地址为OX95.

sbit OV = PSW^2;//声明一个位操作OV其为寄存器PSW的第二位.

2.C-51运算符


7.天翔电子实验板模块注释图

8.74HC573锁存器芯片

接口信息:

E:启动端 

L:锁存端

真值表:

Q0:Q端值不受D端变化为变化,Q端输出值一直保持为L端为1时所输出的值。 

Z:高阻态(介于0与1间的电压值)。

9.REG52.h头文件

该头文件将单片机与编译器连接!(自己可以在在该头文件中进行定义)

LED0,LED1都亮

10.80C51中断系统

 

 

  

 

终端序号:

外部中断0:0

定时/计数器0:1

外部中断1:2

定时/计数器1:3

串行口:4

实现一个简单的中断:

   代码:

#include<reg52.h>
#define uint unsigned int 
#define uchar unsigned char 
void delay(uint z);
sbit wela=P2^7;
sbit dula=P2^6;
sbit d1=P1^1;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//CODE将数组数据放入ROM中


void main()
{
uint j; 
EA=1;//开启中断
EX0=1;//开启外部中断0
IT0=0;//设置外部中断0触发方式为低电平触发
wela=1;
P0=0xea;
wela=0;//锁存段选择
dula=1;
while(1)
	{
for(j=0;j<16;j++)
		{
			P0=table[j];
			delay(1000);
		}
	}
}

void  zd0() interrupt 0//中断程序,外部中断序号为0
{
P0=0x3f;
d1=0;
}

void delay(int z)//延时程序
{
	uint x,y;
 for(x=z;x>0;x--)
	for(y=z;y>0;y--);
}

11.80C51定时器

 

 

 

 设置计数初值的方法:

X为计数初值,N为计数值,采用方式1十六位计数器则

TH0=(65536-X)/256;

TL0=(65536-X)%256;

定时器案例:在P1.0端口输出一个周期为4s的方波

代码:

#include<reg52.h>
#define uint unsigned int 
#define uchar unsigned char 
uint j;//定义全局变量
sbit D1=P1^0;



void main()
{
j=0;
D1=0;
TMOD=0x10;//设置定时器选项,GATE0=0
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;//设置初值
EA=1;//中断允许位
ET1=1;//定时器1中断允许位
TR1=1;//开始计数
while(1)
	{
if (j==40)
		{
		j=0;
		D1=!D1;
		}
  }
}

void  zd0() interrupt 3//定时器1序号为3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
j++;
}

点亮发光管

1)点亮一个发光管

注意:51单片机上电后所以端口都为1!

 位操作点灯程序:

#include<reg52.h>//52包含的头文件
sbit D1=P1^0;//位操作
void main()
{
D1=0;
}

 总线操作点灯程序:

#include<reg52.h>
void main()
{
  P1=0Xfe;
}

2)循环点亮发光二极管

需要包含头文件intrins.h

 代码:

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uint temp;
void delay(uint z);

void main()
{
 temp=0xfe;
 P1=temp;
 while(1)
 {
	delay(1000);
	temp=_crol_ (temp,1);
	P1=temp;
 }
}

void delay(uint z)
{
uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

2.点亮LED灯

1)静态LED点灯

需要用到的端口:

P0口 

DULA:选位允许端口

WELA:选段允许端口

代码:

#include<reg52.h>
sbit WELA=P2^7;
sbit DULA=P2^6;

void main()
{
	WELA=1;
	P0=0xf0;
	WELA=0;
	DULA=1;
	P0=0x06;
}

2)动态LED显示

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值