单片机2

proteus7.8的安装、破解、汉化教程

Proteus中常用元器件名称

单片机如何学

1、熟悉编程环境

2、学会看原理图

3、从照搬到独自写

单片机开发版一览

单片机2

单片机芯片命名

单片机2单片机2

芯片引脚一览

单片机2单片机2

1、C51与C及C++的区别

C++:面向对象

C:面向过程

C51:是为51系列单片机设计的一种C语言

​ 特点:

​ •结构化语言,代码紧凑——效率可与汇编语言媲美

​ •接近真实语言,程序可读性强——易于调试、维护

​ •库函数丰富,编程工作量小——产品开发周期短

​ •机器级控制能力,功能很强——适合于嵌入式系统开发

​ •与汇编指令无关,易于掌握——在单片机基础上上手快

2、单片机特有的三种存储格式

bit型

​ 用于定义一个位变量,语法规则:

bit bit_name  [= 0或1];

sfr型(sfr16型

​ 用于定义SFR字节地址变量

sfr sfr_name = 字节地址常数;
sfr P0=0x80;        //定义P0口地址80H

sfr bit型(sbit型)

​ 用于定义SFR位地址变量

位地址表达形式:

​ 绝对位地址:

​ 相对位地址:

4个端口

51单片机有32只I/O引脚,分属于4个端口(P0~P3)。

​ •可作为并行I/O输入通道也可作为并行I/O输出通道

​ •可作为串行通信通道

•可作为外部设备的连接通道

P0口

1、P0口具有通用I/O口方式,可实现输出、读引脚(输入)和读锁存器三种功能;

2、P0口为准双向通用口,作为通用输入口时应先使P0.n→1,作为通用输出口时应先使第二输出端→1 ;

3、作为通用I/O口方式时,需要外接上拉电阻;

4、P0口具有地址/数据分时复用方式,可实现地址/数据输出、数据输入两种功能;

5、地址/数据分时复用方式时无需外接上拉电阻;

6、分时复用方式的数据输入时无需程序写1操作。

P1口

1、 P1口具有通用I/O口方式,可实现输出、读引脚(输入)和读锁存器三种功能;

2、 P1口为准双向通用口,作为通用输入口时应先使P1.n→1,作为通用输出口时是无条件的。

P2口

1、P2口具有通用I/O口方式,可实现输出、读引脚(输入)和读锁存器三种功能;

2、P2口为准双向通用口,作为通用输入口时应先使P2.n→1,作为通用输出口时应先使控制端→1 ;

3、作为通用I/O口方式时,无需外接上拉电阻;

4、P2口具有地址输出方式,可实现地址输出功能。

P3口

1、 P3口具有通用I/O口方式,可实现输出、读引脚(输入)和读锁存器三种功能;

2、 P3口为准双向通用口,作为通用输入口时应先使P3.n→1,作为通用输出口时应先使第二输出端→1 ;

3、 P3口具有第二功能方式,可实现第二输出和第二输入两种功能。

开始编程

引用林学长的一句名言:有手就行。

头文件

#include<reg51.h>  //REG也是可以的
#include<reg52.h>

延时函数

void delay(unsigned int s)//1ms
{
    unsigned int i,j;
    for(i=s;i>0;i--)
        for(j=144;j>0;j--);
    return 0;
}

定义一个引脚

sbit buzzer=P0^7;

控制一个灯

控制蜂鸣器

#include<reg52.h>
sbit buzzer=P0^7;
delay(unsigned int s)
{
    unsigned int i,j;
    for(i=s;i>0;i--)
        for(j=144;j>0;j--);
    return 0;
}
void main(void)

{
    while(1)
	{
	   buzzer=0;
	   delay(500);
	   buzzer=1;
	   delay(500);
	}
}

流水灯

位编程

#include<reg51.h>
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
sbit led5=P1^4;
sbit led6=P1^5;
sbit led7=P1^6;
sbit led8=P1^7;


void delay(unsigned int s)
{
    unsigned int i,j;
    for(i=s;i>0;i--)
        for(j=144;j>0;j--);
    return 0;
}
void main()
{
   while(1)
   {
	 led1=0;
	 delay(500);
	 led1=1;
	 led2=0;
	 delay(500);
	 led2=1;
	 led3=0;
	 delay(500);
	 led3=1;
	 led4=0;
	 delay(500);
	 led4=1;
	 led5=0;
	 delay(500);
	 led5=1;
	 led6=0;
	 delay(500);
	 led6=1;
	 led7=0;
	 delay(500);
	 led7=1;
	 led8=0;
	 delay(500);
	 led8=1;
	}
}

数组法

#include<reg51.h>
unsigned char arr[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
delay(unsigned int s)
{
    unsigned int i,j;
    for(i=s;i>0;i--)
        for(j=114;j>0;j--);
    return 0;
}
void main(void)
{
    unsigned char i;
    while(1)
    {
        for(i=0;i<8;i++)
        {
            P1=arr[i];
            delay(500);
        }
    }
}

移位法

#include<reg51.h>
delay(unsigned int s)
{
    unsigned int i,j;
    for(i=s;i>0;i--)
        for(j=144;j>0;j--);
    return 0;
}
void main(void)

{
    unsigned char a,i;
    while(1)
    {
        a=0xfe;
        for(i=0;i<8;i++)
        {
            P1=a;
            a=a<<1;
            a=a|0x01;
            delay(500);
        }
    }
}
上一篇:51单片机直流电机PWM调速回复https://bbs.csdn.net/topics/392742676


下一篇:基于单片机数字频率计系统仿真设计-单片机毕设