单片机

单片机练习 - 使用1602LCD显示DS18B20的温度值

会有一股神秘感。 提交于 2019-11-26 15:51:15
关于DS18B20电子温度器件可查看 单片机练习 - DS18B20温度转换与显示 . 本文主要讲述如何使用LCD. 具体过程解释可查看代码注释. 程序代码: 1602LCD 1 // 1602液晶显示程序, TX-1B实验板上的1602LCD的R/W读写端接地, 即始终只写, 不读数据 2 // 使用1602LCD显示DS18B20转换的温度值 3 #include < reg52.H > 4 #include < intrins.H > 5 #include < math.H > 6 7 #define uchar unsigned char 8 #define uint unsigned int 9 sbit dula = P2 ^ 6 ; 10 sbit wela = P2 ^ 7 ; 11 12 sbit RS = P3 ^ 5 ; // 数据/命令选择端(H/L) 13 sbit LCDEN = P3 ^ 4 ; // 使能端 14 15 void delayUs() 16 { 17 _nop_(); 18 } 19 20 void delayMs( uint a) 21 { 22 uint i, j; 23 for (i = a; i > 0 ; i -- ) 24 for (j = 100 ; j > 0 ; j -- ); 25 } 26 27 //

单片机之硬件系统设计原则

柔情痞子 提交于 2019-11-26 12:57:46
  一个单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,要设计合适的接口电路。   系统的扩展和配置应遵循以下原则:   1、尽可能选择典型电路,并符合单片机常规用法。为硬件系统的标准化、模块化打下良好的基础。   2、系统扩展与外围设备的配置水平应充分满足应用系统的功能要求,并留有适当余地,以便进行二次开发。   3、硬件结构应结合应用软件方案一并考虑。硬件结构与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可能由软件实现,以简化硬件结构。但必须注意,由软件实现的硬件功能,一般响应时间比硬件实现长,且占用CPU时间。   4、系统中的相关器件要尽可能做到性能匹配。 如选用CMOS芯片单片机构成低功耗系统时,系统中所有芯片都应尽可能选择低功耗产品。   5、可靠性及抗干扰设计是硬件设计必不可少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等。   6、单片机外围电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,可通过增设线驱动器增强驱动能力或减少芯片功耗来降低总线负载。   7

AVR单片机教程——开发环境配置

妖精的绣舞 提交于 2019-11-26 10:25:22
今天去交大密院参观了设计展,无外乎两个主题:Arduino、Python。 关于Python,我印象最深的是一位Python程序员的话:你要硬核的话,可以去那边看Java。 拜托,都9102年了,Java已经算得上硬核了?是Python太好用,还是Java版本更新太快了?真正的硬核,绝对BrainFuck莫属,如果要实际一点,也是C++、Haskell之辈,当Java在他们口中称得上硬核的时候,我觉得,我可以换一个展台了。 于是我来到了全是Arduino的楼层。看到那么多Arduino,我不禁疑惑,虽然Arduino是最常见的开发板,但也不至于完全没有STM32的踪影吧?问了才知道,是教授要求他们用Arduino的,我也就无语了。 跟一个优秀作品设计者聊了几句,他说同时控制舵机和扬声器很难控制好延时,扬声器输出的音乐节奏会乱。我第一反应当然是他没有用定时器中断,一问果然如此,并且他不知道中断也不知道定时器。我也就不想多说了,告辞。 参观完这个展览,我更坚定了要好好写这份教程的想法。 以上为废话,我们来配置开发环境吧。 来源: https://www.cnblogs.com/jerry-fuyi/p/11317940.html

07-小蜜蜂单片机矩阵键盘

对着背影说爱祢 提交于 2019-11-26 06:29:59
做题之前要先理解一下按键的内部结构。 矩阵键盘中有两个I/O端口,一个作为输入,一个作为输出。 当按键按下时,两个端口相连导通(我是这样认为的),当作为输入的I/O端口输入高电平时,输出就是高电平,反之就是低电平。 矩阵键盘扫描原理 # include "reg52.h" unsigned char code SMG_duanma [ 18 ] = //code 是表格形式 { 0xc0 , 0xf9 , 0xa4 , 0xb0 , 0x99 , 0x92 , 0x82 , 0xf8 , 0x80 , 0x90 , 0x88 , 0x80 , 0xc6 , 0xc0 , 0x86 , 0x8e , 0xbf , 0x7f } ; sfr P4 = 0xC0 ; sbit R1 = P3 ^ 0 ; sbit R2 = P3 ^ 1 ; sbit R3 = P3 ^ 2 ; sbit R4 = P3 ^ 3 ; sbit C4 = P3 ^ 4 ; sbit C3 = P3 ^ 5 ; sbit C2 = P4 ^ 2 ; sbit C1 = P4 ^ 4 ; void SelectHC573 ( unsigned char channel ) //锁存器选通 { switch ( channel ) { case 4 : P2 = ( P2 & 0x1f ) | 0x80 ;

用arduino做一个智能垃圾桶

百般思念 提交于 2019-11-26 01:51:28
这几天工作忙得差不多了,有点时间继续折腾我的arduino,上次从TB买的arduino 套件中有一个人体热能感应模块,就是用来感应人体接近信号的。今天我们用这个东东来做一个简易的智能垃圾桶。要实现的功用是:当有人接近时,垃圾能用自动打开盖子,人离开时,盖子能自动关闭。 一、所需材料和工具: 1 Arduino单片机 我用的是Arduino Nano 2 人体热能感应模块 我用的是一个杂牌的,但接线和使用方式和HC-SR501一样 3 舵机 SG90 4 翻盖式垃圾桶 最好是小一点的。 5 手机充电头和mini USB电源线 直接给单片机供电用的,不是我们手机个常用的microUSB接口或TYPE C接口。 6 导线 7 热熔胶枪 8 电烙铁 9 刀片及其它工具 说明: 1、因为SG90舵机的扭矩很小(可以理解为这个舵机没多大劲),只能推动小垃圾桶的盖子,如果垃圾桶过大,我们就需要扭矩更大的舵机,并需要给舵机单独供电。 2、我的arduiono套件随机赠送的人体热能感应模块是一个杂牌的东东,但接线和使用方法与HC-SR501相同。 二、程序代码 代码很简单,只有几行。 #include <Servo.h>//舵机所需类的头文件 /* * 本例结合人体红外感应模块和舵机实现对垃圾桶的自动控制。 * 当人接近或离开垃圾桶时,单片机根据信号强度的变化,操作舵机旋转到指度角度

对于FSMC的理解,基于32单片机TFTLCD实验

[亡魂溺海] 提交于 2019-11-25 23:54:27
正点原子32单片机上的TFTLCD实验是基于FSMC来控制的,对于之前从未接触过FSMC的我来说,感觉理解起来有点吃力,通过查找资料,也有了自己的理解,如有不对,还请斧正。 对于LCD和FSMC的控制线连接有以下关系 : FSMC_NOE —> LCD_RD FSMC_A10 —> LCD_RS FSMC_NE4 —> LCD_CS FSMC->NWE —> LCD_WR FSMC_RESET —> LCD_RST 对照一下这两张时序图可以清楚的发现通过改变时间可以达到用FSMC控制LCD的时序,唯一不同的是FSMC没有RS,也就是读写命令,还是读写数据,而这个我们可以 通过FSMC的地址线也就是A[0:25]进行控制 。 在32单片机实验例程中有如下定义: #define LCD_BASE ((u32)(0x6C000000 | 0x000007FE)) #define LCD ((LCD_TypeDef *) LCD_BASE) typedef struct { vu16 LCD_REG; vu16 LCD_RAM; } LCD_TypeDef; 通过C语言的学习可以知道,两个define将地址6c0007FE作为该结构体的地址,而 0x7FE,其实就是二进制码 111 11111110,通过手册可知,单片机是以字节进行对齐操作的,而一字节是8位,现在要以字(16位)进行操作

【C51单片机】PC机控制单片机(仿真)

倾然丶 夕夏残阳落幕 提交于 2019-11-25 23:19:32
1、功能描述 1.单片机与PC机通过RS232相连,编写一个异步串行口通信程序,实现单片机与PC机上的串口助手之间的通信。具体功能如下: ①PC机向单片机发送命令打开或关闭指定LED灯 ②PC机向单片机发送命令启动或停止蜂鸣器播放音乐 ③PC机向单片机发送字符并显示在1602液晶显示器上,也可发命令删除字符、换行、清除显示 ④在单片机一端,点击矩阵按键,并将按键序号发送给PC机 2、PROTEUS中设计的电路图 3、源代码 #include<reg52.h> #include<intrins.h> #include <stdio.h> sbit LCDEN=P3^4; sbit RS=P3^5; sbit RW=P3^6; sbit BF=P1^7; sbit FM=P3^2; unsigned char code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; //生日快乐歌节拍表,节拍决定每个音符的演奏长短 unsigned char code SONG_LONG[]= {9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12

AVR单片机教程——开发板介绍

萝らか妹 提交于 2019-11-25 16:57:50
本教程使用EasyElectronics开发板。 EasyElectronics基于AVR单片机,拥有丰富的板载资源。 核心部分 ATmega324PA单片机 25MHz晶振 0.5A自恢复保险丝 5V供电,有3.3V输出 绿色电源指示灯 2个黄色串口指示灯 输出设备 红、黄、绿、蓝4个独立LED RGBW全彩LED 2位7段数码管 蜂鸣器 输入设备 4个独立按键 4个拨码开关 旋转编码器 电位器 光敏电阻 模拟扩展 10位DAC 数字扩展 74HC595扩展输出 74HC165扩展输入 1602 LCD接口 12864 OLED显示屏接口 模拟资源 2个NPN三极管 2个N沟道MOS管 2个低压轨至轨运算放大器 555定时器 数字资源 2个与非门 2个或非门 其他 面包板 在这样的设计下,这款开发板: 使用安全——0.5A自恢复保险丝,如有短路自动断电,保护电脑USB接口; 性能强大——单片机超频到25MHz,再加上GCC优化的代码,运行足够快速; 可玩性强——连接12864 OLED,可显示复杂图像; 可扩展性强——预留SPI、I²C、UART接口,可连接其他模块;板载面包板,可搭建简单电路; 足够简单——一些常用设备已经连接到单片机上,无需用杜邦线连接排针就能使用; 也可以很复杂——DAC、运放、定时器、逻辑门,有无数种组合。 除了开发板以外,前期实验还需要以下工具: