ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

单片机2

2021-01-07 20:57:32  阅读:336  来源: 互联网

标签:P1 -- unsigned delay 单片机 sbit 500


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

Proteus中常用元器件名称

单片机如何学

1、熟悉编程环境

2、学会看原理图

3、从照搬到独自写

单片机开发版一览

image-20201204225038342

单片机芯片命名

image-20201204223759281 img

芯片引脚一览

image-20201204190016807 image-20201204213812037

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);
        }
    }
}

标签:P1,--,unsigned,delay,单片机,sbit,500
来源: https://blog.csdn.net/weixin_45590051/article/details/112337549

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有