1.关于 单片机   AT89C51  与单片机   AT89C52  的区别

1、内部FLASH容量不同

AT89C51和AT89C52是单片机的两种型号,AT89C52是AT89C51的各个方面的升级版,AT89C51 有 4K 字节的内部FLASH PERAM,而AT89C52 的内部FLASH PERAM 相比AT89C51 增加了1倍,其容量达到8K。

2、随机存取数据存储器(RAM)不同

AT89C51 有128 字节的内部 RAM,AT89C52 的内部 RAM 扩展为 256 字节。

3、中断源数量不同

AT89C51有6个中断源,AT89C52 除了具备 AT89C51 的定时器/计数器 T0 和定时器/计数器 T1,还额外增加了一个定时器/计数器 T2。

4、定时器数量不同

AT89C51C51有T0、T1两个16位定时器,而AT89C52除了有AT89C51的T0、T1之外,还增加了T2这一16位定时器。


2.关于 单片机  LED  模块的编写

1.需要知道的知识:  首先  LED 灯  是低电平点亮  !

2.看实物单片机的 原理图: (主要是 模块对应的引脚 )

3.编写代码

LED.h 文件

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int  void  LED_water_2();//流水灯 //第二种方式的流水灯       从右边先亮
void  LED_water();//流水灯  从左边先亮
void delay_s(uint a);//  计时 a秒
void delay(void);  //标准的一秒,利用for 循环结构
void close_LED(int i);// 关闭 第 i 个灯
void play_LED(int i);// 开启 第 i 个灯

LED.c

#include "led.h"
sbit led1=P2^0;//LED1 的引脚
sbit led2=P2^1;//LED2 的引脚
sbit led3=P2^2;//LED3 的引脚
sbit led4=P2^3;//LED4 的引脚
sbit led5=P2^4;//LED5 的引脚
sbit led6=P2^5;//LED6 的引脚
sbit led7=P2^6;//LED7 的引脚
sbit led8=P2^7;//LED8 的引脚
void delay(void)  //标准的一秒,利用for 循环结构
{uint i,j;for(i=124;i>0;i--){for(j=1000;j>0;j--){}}
}void delay_s(uint a)//  计时 a秒
{int i;for(i=1;i<=a;i++){delay();}
}void  LED_water()//流水灯  从左边先亮
{led1=0;delay();led2=0;delay();led3=0;delay();led4=0;delay();led5=0;delay();led6=0;delay();led7=0;delay();led8=0;delay();led1=1;led2=1;led3=1;led4=1;led5=1;led6=1;led7=1;led8=1;}
//  这里有一个知识点
//  引脚的位置 问题      (顺序)         大的在前面
//  P2^7   P2^6  P2^5   P2^4   P2^3   P2^2   P2^1   P2^0   === P2void  LED_water_2()//流水灯 //第二种方式的流水灯       从右边先亮
{//0xff  右移 一位uint  i;P2=0xff;for(i=0;i<8;i++){P2=P2>>1;//右移一位delay();//延时函数  }P2=0xff;
}void play_LED(int i)
{if(i==1){led1=0;}if(i==2){led2=0;}if(i==3){led3=0;}if(i==4){led4=0;}if(i==5){led5=0;}if(i==6){led6=0;}if(i==7){led7=0;}if(i==8){led8=0;}
}void close_LED(int i)
{if(i==1){led1=1;}if(i==2){led2=1;}if(i==3){led3=1;}if(i==4){led4=1;}if(i==5){led5=1;}if(i==6){led6=1;}if(i==7){led7=1;}if(i==8){led8=1;}
}

4.编译代码,下载到芯片里面


3.单片机  的 蜂鸣器   (我的单片机的蜂鸣器是 无源蜂鸣器  )

1.有源蜂鸣器  与无源蜂鸣器的 区别

蜂鸣器的驱动方式的区别

无源蜂鸣器是没有正负之分的,类似于喇叭,只要在两个腿上加载不同的频率的电信号就可以实现发声,根据不同的频率所发出的声音也是不一样的。所以如果用直流信号无法令其鸣叫。无源蜂鸣器需要1.5~2.5kHz(与蜂鸣器种类有关)的音频信号,这个音频信号即一个高低变化频率为1.5-2.5kHz的方波。实际上频率小于1.5kHz也是有声音的,只是不那么准了,可能是嘟嘟声。

有源蜂鸣器是有正负之分的,只需要在两个腿上加上电压信号就会发声,发出的声音音调单一、频率固定。

有源蜂鸣器比无源蜂鸣器内部多了振荡结构,所以有源蜂鸣器在价格上稍微贵一点。

2.单片机  的BEEP  模块  原理图

板子上面带有ULN2003D芯片 使它来驱动蜂鸣器

P1^5输出高  ULN2003D 输出低 所以他们得逻辑关系是相反得!

3.代码编写

BEEP.h

 #include<reg52.h>void play_BEEP();//打开蜂鸣器
void Delay10us(unsigned char i);        //@11.0592MHz 延迟大约是10微秒
void play_beep_s(int x);//打开蜂鸣器   x 代表几秒

BEEP.c

#include "BEEP.h"
sbit BEEP = P1^5;  // 把P2得第5个针脚定义成BEEP void Delay10us(unsigned char i)     //@11.0592MHz 延迟大约是10微秒
{i = i*2;while (--i);
}void play_BEEP()//打开蜂鸣器
{BEEP = 0;  // 低电平 蜂鸣器就是高电平Delay10us(100);  //持续1000微秒也就是1毫秒BEEP = 1;Delay10us(100);
}void play_beep_s(int x)//打开蜂鸣器   x 代表几秒
{int a=x*1000;   //1 ms *1000 * x =  x 秒 while(a--){//形成一个方波的信号  所以是 1  和  0 的  信号   BEEP = 0;  // 低电平 蜂鸣器就是高电平Delay10us(100);  //持续1000微秒也就是1毫秒BEEP = 1;Delay10us(100);}
}

4.代码编译, 下载到芯片


4.单片机  的独立按键  (k1  --  k4)

1.首先按键原理    按键一端 连接  芯片的引脚    一端连接  GED (接地 ),本来的时候引脚是输出高电平的 , 当我们的按键 按下去的时候  这时候芯片的这引脚 接地了, 这时候这个引脚是为低电平 ,  但是当我们 按下的按键 回位之后,按键还是会变为 输出高电平 ,  但是这个引脚会有 小段时间内 为低电平!

2.原理图:

3.编写代码:

key.h

#include<reg52.h>
#include "led.h"
#include "BEEP.h"void key_panding();

key.c

#include "key.h"
sbit key1=P3^1;//独立按键  key1
sbit key2=P3^0;//独立按键  key2
sbit key3=P3^2;//独立按键  key3
sbit key4=P3^3;//独立按键  key4
void key_panding()
{if(key1==0)//按下去了 引脚为 0 {while(key1==0);//消抖LED_water(); //流水灯}if(key2==0)     //按下去了 引脚为 0 {while(key2==0);//消抖play_beep_s(2);//蜂鸣器响  2 秒}if(key3==0)     //按下去了 引脚为 0 {while(key3==0);//消抖play_LED(1);       //led1 亮}if(key4==0)    //按下去了 引脚为 0 {while(key4==0);//消抖close_LED(1);     //led1 灭}} 

4.代码编译,下载到芯片


5.单片机的  矩形按键模块

1.矩形按键的使用方法:

没有按键按下时,X0~X3是低电平,Y0~Y3是高电平。

某一个按键按下,设置其所在的行低电平,列就会变为低电平。

1、判断有无键被按下

方法是:将全部行线X0~X3置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

2、确定哪个键按下

方法是:在确认有键按下后,依次将行线置为低电平,即在置某根行线为低电平时,其他线为高电平(其实就是屏蔽其他行的按键状态,只有当前检测行的按键状态有效);在确定某根行线位置为低电平后,再逐行检测各列线的电平状态,若某列为低(说明当前检测行有按键按下),则该列线与置为低电平的行线交叉处的按钮就是闭合的按键。

2.原理图:

3.代码编写

key16.h

 #include <reg52.h>int key_16_pandaun();//判断那个按键按下了

key16.c

#include"key16.h"
#include "key.h"
0
/*
7   key1   key2   key3   key4
6   key5   key6   key7   key8
5   key9   key10  key11  key12
4   key13  key14  key15  key163
2
1
0*/
//假如引脚接地  会变成 0    但是引脚自己为0  的时候  和接地一样的
int key_16_pandaun()//返回 矩阵按键模块 那个按键 被按
{int num=0;//先列P1=0x0f;//后面 3  2  1   0  的二进制位 为 0if(P1!=0x0f)//看按键是否按下{Delay10us(100000);//消抖 10msif(P1!=0x0f){if(P1==0x07){//key 1    对应着 3  7 num+=1;}else if(P1==0x0b){//k2   对应着2   7  num+=2;}else if(P1==0x0d){//k2   对应着2   7  num+=3;}else if(P1==0x0e){//k2   对应着2   7  num+=4;}  }}//在行P1=0xf0;if(P1!=0xf0)//看按键是否按下{Delay10us(100000);//消抖 10msif(P1!=0xf0){if(P1==0x70){//key 1    对应着 3  7 num+=0;}else if(P1==0xb0){//k2   对应着2   7  num+=4;}else if(P1==0xd0){//k2   对应着2   7  num+=8;}else if(P1==0xe0){//k2   对应着2   7  num+=12;}}      } P1=0xff;return num; }

main.c

#include <reg52.h>
#include <intrins.h>
#include "led.h"
#include "BEEP.h"
#include "key.h"
#include "key16.h"void main()
{int a;while(1){a=0;a=key_16_pandaun();if(a==1){play_LED(1);}else if(a==2){play_LED(2);   } else if(a==3){play_LED(3);} else if(a==4){play_LED(4);} else if(a==5){play_LED(5);} else if(a==6){play_LED(6);} else if(a==7){play_LED(7);} else if(a==8){play_LED(8);} else if(a==9){close_LED(1);} else if(a==10){close_LED(2);}else if(a==11){close_LED(3);}else if(a==12){close_LED(4);}else if(a==13){close_LED(5);}else if(a==14){close_LED(6);}else if(a==15){close_LED(7);}else if(a==16){close_LED(8);} }}

6.编写程序的时候添加头文件    的方式  (是添加头文件的路径  ,离头文件最近 的文件夹)


7.程序添加文件的方式 

单片机 实物 AT89C52RC day01 内容: LED 蜂鸣器 独立按键, 矩形按键模块相关推荐

  1. 51单片机独立按键联动数码管LED蜂鸣器

    目录: LED工作原理.电路及源码 蜂鸣器工作原理.电路及源码 数码管工作原理.电路及源码 独立按键工作原理.电路及源码 总结 LED原理,电路及源码 LED原理 LED就是发光二级管,有单向导电性, ...

  2. 串口通信操作STM32f4单片机LED 蜂鸣器(io)

    串口通信操作STM32f4单片机LED 蜂鸣器(io) 首先将串口与PC通信 单片机中串口1需要连接p6 中的PA9连接rxd PA10连接txd并使能相应io,io模式为挽推复用,复用为串口USAR ...

  3. c语言c51单片机点亮8个灯,单片机课程设计-8个LED灯来回点亮

    <单片机课程设计-8个LED灯来回点亮>由会员分享,可在线阅读,更多相关<单片机课程设计-8个LED灯来回点亮(20页珍藏版)>请在人人文库网上搜索. 1.目录第一章 绪论-3 ...

  4. 数字电子计算机处理信号shi,余洪伟 基于单片机数字电子时钟设计(led显示).doc...

    余洪伟 基于单片机数字电子时钟设计(led显示) 沈阳航空航天大学 课 程 设 计 (论文) 题目 基于单片机的数字电子时钟设计 (LED显示) 班 级 学 号 2013040701060 学 生 姓 ...

  5. 国信长天单片机之led、数码管与按键

    目录 一.LED模块 二.数码管模块 三.按键模块 四.相关代码 config.h文件 config.c文件 main.c文件 在蓝桥杯单片机比赛中,LED灯.数码管.按键这三个模块的重要性我就不明说 ...

  6. WLGK-51单片机接口技术基础实验 —LED闪烁灯

    WLGK-51单片机接口技术基础实验--LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld", ...

  7. WLGK-51单片机接口技术基础实验 ——LED闪烁灯

    WLGK-51单片机接口技术基础实验-LED闪烁灯 当我们开始接触单片机,首先接触的第一个实验就是LED灯的使用,类似于我们学习软件开始接触的第一个程序"HelloWorld",这 ...

  8. 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】

    C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...

  9. 单片机C语言-1-点亮LED灯

    单片机C语言-1-点亮LED灯 #include "stm32f10x.h" //引入头文件//高低电平 //低电平 GND 0V //高电平 VCC 单片机的VCC供电电压//I ...

最新文章

  1. L0、L1、L2范数在机器学习中的应用
  2. 教你如何看手相掌握命运!
  3. Mono for Android 显示远程图片
  4. 巧用 Lazy 解决.NET Core中的循环依赖关系
  5. combobox的联动练习
  6. oracle 10g 白皮书,Oracle 10g标准版与企业版
  7. yum httpd安装详解
  8. 【图像配准】基于灰度的模板匹配算法(一):MAD、SAD、SSD、MSD、NCC、SSDA、SATD算法...
  9. PHP压缩CSS文件
  10. MediaCreationTool20H1制作Win10启动盘
  11. 2019ZIF郑州工博会 盛大起航
  12. 打通云主机实现局域网
  13. 分子模拟||常见计算任务流程梳理:平衡态计算、非平衡态计算及复杂流程模拟
  14. call和apply详解-利用借充电宝模拟用法
  15. Springboot的快速入门
  16. 浪尖断更两天回家过年了!
  17. 互联网年底裁员,离职倒计时!!!
  18. candence16.6出现license 类似retrieval of allegro_pcb_design_gxl的问题
  19. iOS动画 Masonry约束弹框动画animateWithDuration:
  20. python|解决Cannot open D:\python\Anaconda\envs\tensorflow\Scripts\pip-script.py(重装pip)

热门文章

  1. ES搜索--轻量搜索语法
  2. VL53L0X报错记录
  3. CAN Bus cable simulation
  4. 空间计量 python_stata进行空间计量分析
  5. 大数据面试常见问题(五)——报表部分
  6. 将阿拉伯数字变成罗马数字 案例
  7. 思林杰科技通过注册:应收账款余额1.87亿 占营收比例160%
  8. 企业知识管理怎样做?一些解决方案分享!
  9. 中软实训-day1 Maven的基本知识
  10. 关于计算机视觉中的深度信息概念