求单片机电路图,用按键模拟单片机外部脉冲计数器,每来4个脉冲,P1口接的8个二极管闪烁十次,然后恢复全亮状态

前辈学51单片机的感悟是怎么样的?说说看 - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。726被浏览<strong class="NumberBoard-itemValue" title="9分享邀请回答22943 条评论分享收藏感谢收起int main(void) //一个main函数 搞定
P0 = 0xxx;
linux:驱动程序:
#include&linux/init.h&
#include&linux/module.h&
#include&linux/fs.h&
//file_operatios
#include&linux/device.h& //class_create/device_create
#include&linux/slab.h&
#include&asm/io.h&
#include&asm/uaccess.h&
#include"led.h"
struct s5pv210_device *s5pv210_dev;
volatile unsigned long *gpc0con = NULL;
volatile unsigned long *gpc0dat = NULL;
static int led_open(struct inode *inode, struct file *file)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
/*初始化GPC0_3,GPC0_4引脚功能为输出功能*/
*gpc0con &= ~((0xf&&12)|(0xf&&16));
*gpc0con |= ((0x1&&12)|(0x1&&16));
static int led_close(struct inode *inode, struct file *file)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
//iounmap(S5PV210_PA_GPC0CON);
static ssize_t led_read(struct file *file, char __user *buf, size_t count, loff_t *offset)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
//write(fd, &val, 4)
static ssize_t led_write(struct file *file, const char __user *buf, size_t count, loff_t *offset)
unsigned int val;
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
/*获取用户空间数据*/
ret = copy_from_user(&val,buf,count);
printk(KERN_ERR"copy data from user failed!\n");
return -ENODATA;
printk(KERN_INFO"copy data from user: val=%d\n",val);
*gpc0dat |= ((0x1&&3)|(0x1&&4));
*gpc0dat &= ~((0x1&&3)|(0x1&&4));
return ret?0:count;
static struct file_operations led_fops={
.owner = THIS_MODULE,
.open = led_open,
.read = led_read,
.write = led_write,
.release = led_close,
static int __init led_init(void)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
s5pv210_dev = kmalloc(sizeof(struct s5pv210_device),GFP_KERNEL);
if(s5pv210_dev==NULL)
printk(KERN_INFO"no memory malloc for s5pv210_dev!\n");
return -ENOMEM;
led_major = register_chrdev(0,"led",&led_fops);
if(led_major&0)
printk(KERN_INFO"register major failed!\n");
ret = -EINVAL;
goto err1;
/*创建设备文件*/
s5pv210_dev-&led_class = class_create(THIS_MODULE,"led_class");
if (IS_ERR(s5pv210_dev-&led_class)) {
printk(KERN_ERR "class_create() failed for led_class\n");
ret = -EINVAL;
goto err2;
s5pv210_dev-&led_device = device_create(s5pv210_dev-&led_class,NULL,MKDEV(led_major,0),NULL,"led");
if (IS_ERR(s5pv210_dev-&led_device)) {
printk(KERN_ERR "device_create failed for led_device\n");
ret = -ENODEV;
goto err3;
/*将物理地址映射为虚拟地址*/
gpc0con = ioremap(S5PV210_PA_GPC0CON,8);
if(gpc0con==NULL)
printk(KERN_INFO"ioremap failed!\n");
ret = -ENOMEM;
goto err4;
gpc0dat = gpc0con + 1;
device_destroy(s5pv210_dev-&led_class,MKDEV(led_major,0));
class_destroy(s5pv210_dev-&led_class);
unregister_chrdev(led_major,"led");
kfree(s5pv210_dev);
return ret;
static void __exit led_exit(void)
printk(KERN_INFO"%s()-%d\n", __func__, __LINE__);
unregister_chrdev(led_major,"led");
device_destroy(s5pv210_dev-&led_class,MKDEV(led_major,0));
class_destroy(s5pv210_dev-&led_class);
iounmap(gpc0con);
kfree(s5pv210_dev);
module_init(led_init);
module_exit(led_exit);
MODULE_LICENSE("GPL");
应用程序:#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &stdio.h&
#include &errno.h&
#include &stdlib.h&
#include &unistd.h&
#include &string.h&
** ./led_test on
** ./led_test off
int main(int argc, char **argv)
int val =0;
fd = open("/dev/led", O_RDWR);
perror("open failed!\n");
if(strcmp(argv[1], "on")==0)
if(write(fd, &val, 4)!=4)
perror("write failed!\n");
close(fd);
android:不知道大家清不清楚android与linux之间的关系。android是基于linux内核的,linux操作系统的5大组件:驱动,内存管理,文件系统,进程管理,网络套接字。android是基于linux kernel上的,大家平时只看到了app。app是java语言的,其实每运行一个java应用程序,实际上是fork一个linux应用程序。android四大组件,activity,service,Broadcast Receiver,Content Provider。这是android的主要框架,java应用开发是基于这开发的。android平台是基于linux 内核的。在linux运行之后才建立起java世界。直接上代码:上面的linux的驱动在android是一样的,适用于android。驱动ok之后是应用层了,也就是应用程序。我下面就是最直接的应用,不包含任何android框架性的东西,大家可以直接看到,应用app-&jni-&linux驱动这三层调用关系。下面是jni代码是c++;#define LOG_TAG "led-jni-log"
#include &utils/Log.h&
#include "jni.h"
#include &sys/types.h&
#include &sys/stat.h&
#include &fcntl.h&
#include &stdio.h&
#include &errno.h&
#include &unistd.h&
#include &stdlib.h&
static int fd = -1;
jint open_led(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
fd = open("/dev/led1", O_RDWR);
if(fd & 0)
LOGE("open : %s\n", strerror(errno));
return -1;
jint led_on(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
int val = 1;
jint ret = 0;
ret = write(fd, &val, 4);
if(ret != 4)
LOGE("write : %s\n", strerror(errno));
return -1;
jint led_off(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
int val = 0;
jint ret = 0;
ret = write(fd, &val, 4);
if(ret != 4)
LOGE("write : %s\n", strerror(errno));
return -1;
jint close_led(JNIEnv *env, jobject thiz)
LOGD("$$$%s\n", __FUNCTION__);
if(fd & 0)
close(fd);
static JNINativeMethod myMethods[] ={
{"openDev", "()I", (void *)open_led},
{"onDev", "()I", (void *)led_on},
{"offDev", "()I", (void *)led_off},
{"closeDev", "()I", (void *)close_led},
jint JNI_OnLoad(JavaVM * vm, void * reserved)
JNIEnv *env = NULL;
jint ret = -1;
ret = vm-&GetEnv((void **)&env, JNI_VERSION_1_4);
if(ret & 0)
LOGE("GetEnv error\n");
return -1;
jclass myclz = env-&FindClass("com/ledtest/LedActivity");
if(myclz == NULL)
LOGE("FindClass error\n");
return -1;
ret = env-&RegisterNatives(myclz, myMethods, sizeof(myMethods)/sizeof(myMethods[0]));
if(ret & 0)
LOGE("RegisterNatives error\n");
return -1;
return JNI_VERSION_1_4;
然后是java app:package com.ledtest;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
public class LedActivity extends Activity {
final String TAG = "LedActivity";
public Button btn_on = null;
public Button btn_off = null;
public void init() {
btn_on = (Button) this.findViewById(R.id.btn1);
btn_on.setOnClickListener(clickListener);
btn_off = (Button) this.findViewById(R.id.btn2);
btn_off.setOnClickListener(clickListener);
OnClickListener clickListener = new OnClickListener() {
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
Log.d(TAG, "led on in app");
case R.id.btn2:
Log.d(TAG, "led off in app");
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_led);
openDev();
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_led, menu);
return true;
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
closeDev();
System.loadLibrary("led_jni");
public native int openDev();
public native int onDev();
public native int offDev();
public native int closeDev();
框架是这样的:最上层是java ,点开app,点击一下一个button,点亮了LED,调用onDev();onDev调用c++的led_on,然后led_on是调用驱动的led_write,明白不?这样说吧:linux 驱动是最下层的,驱动嘛。然后是c++层,c++包装一下是给java调用的,然后到java层。下面是android比价经典的一张框架图。linux在最下面。lib 是动态库。然后是JNI,然后是Framework(android框架),然后是大家喜闻乐见的app。53472 条评论分享收藏感谢收起不知道大家在医院就医的时候是否有这样的体验:做个CT价……
AI芯片之于人工智能的意义,则可以理解为发动机之于汽车……
又是一年六一儿童节,虽然,早就超了过这个节日的年纪,……
2017年底的美国NIPS大会上,特斯拉宣布了正在研制AI芯片……
&一部手机内部大约需要安装12~15块柔性电路板,……
演讲人:曾伟权时间: 10:00:00
演讲人:黄科涛时间: 10:00:00
演讲人:Tracy Ma时间: 10:00:00
预算:¥100000预算:¥100000
广东省广东省
AT89S51的并行I/O口
AT89S51单片机共有4个双向的8位并行I/O口,分别记为PO、Pl、P2和P3,其中输出锁存器属于特殊功能寄存器。端口的每一位均由输出锁存器、输出驱动器和输入缓冲器组成,这4个端口除了按字节输入/输出
AT89S51单片机共有4个双向的8位并行I/O口,分别记为PO、Pl、P2和P3,其中输出锁存器属于特殊功能寄存器。端口的每一位均由输出锁存器、输出驱动器和输入缓冲器组成,这4个端口除了按字节输入/输出外,还可以按位寻址,便于位控功能的实现。    PO口    PO口是一个双功能的8位并行口,字节地址为80H,位地址为80H~87H。端口的各位具有完全相同但又相互独立的电路结构,PO口某一位的位电路结构如图2-8所示。    1.位电路结构本文引用地址:
PO口某一位的电路包括:    (1)一个数据输出的锁存器,用于数据位的锁存。    (2)两个三态的数据输入缓冲器,分别是用于读锁存器数据的输入缓冲器BUF1和读引脚数据的输入缓冲器BUF2。    (3)一个多路转接开关MUX,它的一个输入来自锁存器的Q(的反)端,另一个输入为地址/数据信号的反相输出。MUX由“控制”信号控制,实现锁存器的输出和地址/数据信号之间的转接。    (4)数据输出的控制和驱动电路,由两个场效应管(FET)组成。    2.工作过程分析    (1) PO口用作地址/数据总线 当AT89S51外扩存储器或I/O时,PO口作为单片机系统复用的地址/数据总线使用。    当作为地址或数据输出时,“控制”信号为1,硬件自动使转接开关MUX打向上面,接通反相器的输出,同时使与门处于开启状态。当输出的地址/数据信息为l时,与门输出为1,上方的场效应管导通,下方的场效应管截止,PO.x引脚输出为l;当输出的地址/数据信息为O时,上方的场效应管截止,下方的场效应管导通,PO.x引脚输出为0。这说明PO.x引脚的输出状态随地址/数据状态的变化而变化。输出电路是上、下两个场效应管形成的推拉式结构,大大提高了负载能力,上方的场效应管这时起到内部上拉电阻的作用。    当PO口作为地址/数据输入时,仅从外部存储器(或外部I/O)读入信息,对应的“控制”信号为0,MUX接通锁存器的Q(的反)端。由于PO口作为地址/数据复用方式访问外部存储器时,CPU自动向PO口写入FFH,使下方的场效应管截止,上方的场效应管由于控制信号为O也截止,从而保证数据信息的高阻抗输入,从外部存储器输入的数据信息直接由PO.x引脚通过输入缓冲器BUF2进入内部总线。    具有高阻抗输入的I/O口如果是真正的双向口,它应是具有高电平、低电平和高阻抗3种状态的端口。因此,PO口作为地址/数据总线使用时是一个真正的双向端口,简称双向口。    (2) PO口用作通用I/O口 当PO口不作为系统的地址/数据总线使用时,此时PO口也可作为通用的I/O口使用。    当用作通用的I/O时,对应的“控制”信号为0,MUX打向下面,接通锁存器的Q(的反)端,与门输出为0,上方的场效应管截止,形成的PO口输出电路为漏极开路输出。    PO口用作输出口时,来自CPU的“写”脉冲加在D锁存器的CP端,内部总线上的数据写入D锁存器,并由引脚PO.x输出。当D锁存器为1时,Q端为0,下方场效应管截止,输出为漏极开路,此时,必须外接上拉电阻才能有高电平输出;当D锁存器为0时,下方场效应管导通,PO口输出为低电平。    PO口作为输入口使用时,有两种读入方式:“读锁存器”和“读引脚”。当CPU发出“读锁存器”指令时,锁存器的状态由Q端经上方的三态缓冲器BUF1进入内部总线;当CPU发出“读引脚”指令时,锁存器的输出状态=1(即Q(的反)端为0),从而使下方场效应管截止,引脚的状态经下方的三态缓冲器BUF2进入内部总线。    3.PO口的特点    综上所述,PO口具有如下特点:PO口为双功能口――地址/数据复用口和通用I/O口。    (1)当PO口用作地址/数据复用口时,是一个真正的双向口,用作与外部存储器的连接,输出低8位地址和输出/输入8位数据。    (2)当PO口用作通用I/O口时,由于需要在片外接上拉电阻,端口不存在高阻抗(悬浮)状态,因此是一个准双向口。为保证引脚信号的正确读入,应首先向锁存器写l。单片机复位后,锁存器自动被置1;当PO口由原来的输出状态转变为输入状态时,应首先置锁存器为1,方可执行输入操作。    一般情况下,PO口大多作为地址/数据复用口使用,这时就不能再作为通用I/O口使用。  Pl口    Pl口是单功能的I/O口,字节地址为90H,位地址为90H~97H。Pl口某一位的位电路结构如图2-9所示。    1.位电路结构
P1口位电路结构由以下三部分组成:    (1)一个数据输出锁存器,用于输出数据位的锁存。    (2)两个三态的数据输入缓冲器BUF1和BUF2,分别用于读锁存器数据和读引脚数据的输入缓冲。    (3)数据输出驱动电路,由一个场效应管(FET)和一个片内上拉电阻组成。    2.工作过程分析     P1口只能作为通用的I/O口使用。    (1) P1口作为输出口时,若CPU输出1,Q=1, Q(的反)=0,场效应管截止,Pl口引脚的输出为1;若CPU输出Q=0,Q(的反)=1,场效应管导通,P1口引脚的输出为0。    (2) P1口作为输入口时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,锁存器的输出端Q的状态经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,Pl.x引脚上的电平经输入缓冲器BUF2进入内部总线。    3.P1口的特点    P1口由于有内部上拉电阻,没有高阻抗输入状态,故为准双向口。作为输出口时,不需要在片外接上拉电阻。    P1口“读引脚”输入时,必须先向锁存器写入1。    P2口    P2口是一个双功能口,字节地址为AOH,位地址为AOH~A7H。P2口某一位的位电路结构如图2-10所示。    1.位电路结构    P2口某一位的电路包括:    (1)一个数据输出锁存器,用于输出数据位的锁存。    (2)两个三态数据输入缓冲器BUF1和BUF2,分别用于读锁存器数据和读引脚数据的输入缓冲。    (3)一个多路转接开关MUX,它的一个输入是锁存器的Q端,另一个输入是地址的高8位。    (4)输出驱动电路,由场效应管(FET)和内部上拉电阻组成。    2.工作过程分析    (1) P2口用作地址总线 在内部控制信号作用下,MUX与“地址”接通。当“地址”线为O时,场效应管导通,P2口引脚输出0;当“地址”线为1时,场效应管截止,P2口引脚输出1。(2) P2口用作通用I/O口 在内部控制信号作用下,MUX与锁存器的Q端接通。    CPU输出1时,Q=1,场效应管截止,P2.x引脚输出1;CPU输出0时,Q=0,场效应管导通,P2.x引脚输出0。    输入时,分为“读锁存器”和“读引脚”两种方式。“读锁存器”时,Q端信号经输入缓冲器BUF1进入内部总线;“读引脚”时,先向锁存器写1,使场效应管截止,P2.x引脚上的电平经输入缓冲器BUF2进入内部总线。    3.P2口的特点    作为地址输出线使用时,P2口可以输出外部存储器的高8位地址,与PO口输出的低8位地址一起构成16位地址,可以寻址64 KB的地址空间。当P2口作为高8位地址输出口时,输出锁存器的内容保持不变。    作为通用I/O口使用时,P2口为一个准双向口。功能与Pl口一样。    一般情况下,P2口大多作为高8位地址总线口使用,这时就不能再作为通用I/O口使用。
P3口     由于AT89S51的引脚数目有限,因此在P3口电路中增加了引脚的第二功能。P3口的每一位都可以分别定义为第二输入功能或第二输出功能。P3口的字节地址为BOH,位地址为BOH~B7H。P3口某一位的位电路结构如图2-11所示。    1.位电路结构    P3口某一位的电路包括:    (1)一个数据输出锁存器,用于输出数据位的锁存。    (2)3个三态数据输入缓冲器BUF1、BUF2和BUF3,分别用于读锁存器、读引脚数据和第二功能数据的输入缓冲。     (3)输出驱动电路,由与非门、场效应管(FET)和内部上拉电阻组成。    2.工作过程分析    (1) P3日用作第二输入/输出功能 当选择第二输出功能时,该位的锁存器需要置1,使与非门为开启状态。当第二输出为1时,场效应管截止,P3.x引脚输出为1;当第二输出为0时,场效应管导通,P3.x引脚输出为0。    当选择第二输出功能时,该位的锁存器和第二输出功能端均应置1,保证场效应管截止,P3.x引脚的信息由输入缓冲器BUF3的输出获得。    (2) P3口用作第一功能――通用I/O口 当P3口用作第一功能通用输出时,第二输出功能端应保持高电平,与非门为开启状态。CPU输出1时,Q=l,场效应管截止,P3.x引脚输出为l;CPU输出0时,Q=0,场效应管导通,P3.x引脚输出为0。    当P3口用作第一功能通用输入时,P3.x位的输出锁存器和第二输出功能均应置1,场效应管截止,P3.x引脚信息通过输入BUF3和BUF2进入内部总线,完成“读引脚”操作。  当P3口实现
6月30日晚,俄罗斯世界杯的赛场上上演16强焦点之战,阿根廷对法国。面对拥有身高、年龄、速度等优势,并坚持打高吊、防反的法国队,阿根廷队显得没有什么办法。虽然两次被幸运女神眷顾并一度以2:1领先,但法国队最......关键字:
面试是招聘过程中最重要的部分。在面试中,通常会提出一些问题来缩小应聘者范围。为了帮助您淘汰那些不合格或不符合公司发展的候选人,您需要一系列的面试问题来考察应聘者的职业道德、技能、知识和个性。......关键字:
被问及有关格力的问题,他在回答时,往往会经历&三部曲&。6月30日,朱江洪在广州参加一场活动时,又一次经历了答问&三部曲&:欲言又止:&历史是最好的证明&;骨鲠在喉:......关键字:
Facebook股价今日升至202美元的历史新高。这让Facebook创始人扎克伯格的身价达到了816亿美元,有望成为全球第三富有的人。目前,扎克伯格的身价与巴菲特之间的差距已缩小至2900万美元。Facebook创始人扎克伯格身价周......关键字:
随着小米终于要上市,大家开启了对小米估值的讨论。此前,业内曾给出 700-1100 亿美元的高估值。而招股书表示,目前小米的估值只有 539-698
亿美元。在昨天的投资者推介会上,雷军也被问到了关于估值的问题,他的回......关键字:
手机不离身似乎已经成为当代人的日常状态,如此频繁地使用手机,会十分消耗手机的电量,不经意间,一天充电数次,而且一旦充电方式不正确的话不仅会损伤手机电池,甚至还存在安全隐患。关于手机充电,很多人都忽视了......关键字:
7月1日,中国移动、中国联通和中国电信正式全面取消流量漫游费,原有套餐中的省内通用流量直接升级为国内流量,但并不包含港澳台地区。目前原来的本地流量已经转化为国内流量。对于本地流量转化为国内流量后价格是否......关键字:
一位81年,工作了10年一直从事软件项目开发, 加入过五家公司的软件开发工程师的自述。......关键字:
近日,苹果发布了&Screen time&,帮助人们了解自己在不同Apps上使用的时间,以帮助人们减少智能设备的使用。之前的谷歌也有&Dashboard&、&Shush&rdqu......关键字:
到美国十七年了。我一直比较顺利,中学时就在全国物理还有计算机竞赛中拿过奖,90代初大学还没毕业就拿到美国大学的全奖,毕业时办护照比较麻烦,在国内工作了一年后才出国。这一年在我的家乡成都附近的中国民航飞行学院教了一年普通物理和空气动力学。......关键字:
我 要 评 论
热门关键词有哪些网购能买到的冷门却有趣的东西? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。<strong class="NumberBoard-itemValue" title="1,729被浏览<strong class="NumberBoard-itemValue" title=",578,627分享邀请回答4.5K365 条评论分享收藏感谢收起2K133 条评论分享收藏感谢收起基于STC12型单片机的智能温控调速风扇设计
吴望生摘 要 本文设计了智能温控调速风扇,基于单片机检测和控制技术,将单片机、传感器等智能器件用于风扇设计,可依据检测温度自动调节适宜的风速。关键词 单片机 温度传感器 智能控制 自动调速中图分类号:TP368.1 文献标识码:ATemperature Intelligent Control Speed of Fan Based on STC12-MCUWU Wangsheng(School of physics and Optoelectronic Engineering, Yangtze University, Jingzhou, Hubei 434023)Abstract Temperature intelligent control speed of fan, based on Micro Control Unit(MCU) detection and control technology, using MCU and sensor device design fan, according to the test temperature automatic adjustment appropriate speed of fan.Key words Single-chip microcomputer; temperature sensor; intelligent control; automatic speed regulation0 引言风扇是散热降温的常用电器,如家用的电风扇和电子器件中的散热风扇等。大多数家用风扇只能手动调速和机械定时,各档风速跨度较大,高档风冷噪音大,低档又不解暑;定时设计机械,入夜熟睡后若气温骤变,风速不变则容易着凉。散热风扇通过空气对流控制器件的温度,转速越高散热效果越好,但同时噪音和震动也越大。如何在风扇的散热功效和静音效果之间找到平衡点,随器件工作温度的变化合理调节风速,使之在较低噪音下正常工作显得十分必要。为解决上述问题,我们设计了智能温控调速风扇,基于单片机检测和控制技术,将单片机、传感器等智能器件用于风扇设计,可依据检测温度自动调节适宜的风速。1 系统整体设计系统主要由主控电路模块、稳压电源模块、温度采集模块、功能按键模块、温度显示模块、驱动电路模块和风扇(直流电机)等七个功能模块组成。图1 系统的整体设计结构框图系统总体框架如图1所示,采用STC12C5A60S2单片机作为主要控制芯片,使用温度传感器DS18B20进行温度采集,并直接输出数字温度信号给单片机进行判断,根据判断结果控制相应引脚输出高电平或低电平,控制风扇启动或关闭;在启动状态下,模拟PWM波输出调节风扇转速。1.1 主控电路模块主控电路模块是整体系统设计的核心,控制温度的采集与显示,通过按键输入和软件编程进行温度限值设定与判断,并在其I/O口输出控制信号,对风扇进行开关或调速。本设计选用STC12C5A60S2单片机作为控制器件,采用增强型8051CPU,单时钟机器周期1T,指令代码完全兼容传统8051;内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,25万次/秒)。支持串口程序烧写,配合PC端的控制程序即可将程序代码下载进单片机,无需编程器和仿真器,对开发设备要求低,节省开发时间。1.2 温度采集模块温度采集模块选用数字传感器DS18B20作为核心元件,测温范围[-55,+125]℃。该传感器高度集成化,与传统的热敏电阻等测温元件相比,温度值在器件内部转化成数字量直接输出,测量精度高,测温分辨率高达0.0625℃;被测温度用符号扩展的16位补码形式以“一线总线”串行传送给单片机,实际操作中只须将信号线与单片机I/O口相连,抗干扰性强。1.3 液晶显示模块液晶显示模块选用LCD1602字符型显示器,用于显示温度、风扇档位和工作模式。LCD1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,由若干个5X7点阵字符位组成,每个点阵字符位都可以显示一个字符,可显示ASCII码表中的所有可视字符。1.4 功能按键模块功能按键模块采用独立按键式,每个按键单独占用一根I/O线,每个按键的工作不会影响其它I/O线的状态。本设计包括4个独立式按键:(1)模式切换:按下该键循环切换自动、睡眠、手动三种工作模式。(2)温度设定:自动和睡眠模式下,设置自动开(关)机温度。环境温度高于设定温度自动开机,否则不启动或关机。(3)手动调速:手动模式下,按下该键循环切换三档风速。(4)停止模式,关闭风扇。1.5 驱动电路模块由于STC12系列单片机自带PWM控制器,因此本设计选用桥式驱动电路L298N来驱动5V直流电机风扇,并通过单片机I/O口输出PWM脉冲调节风速。L298N模块属于H桥式专用驱动集成电路,其输入端可与单片机直接连接。采用软件编程实现PWM(脉冲宽度调制)调速,通过控制矩形波PWM信号的占空比来调控电机转速。电机转速与占空比成正比,占空比越大,转速越快,若输出全为高电平则占空比为100%,转速最大。相比于其他如硬件或软硬件结合的调速方式,通过软件编程实现PWM调速,在降低成本的同时,充分发挥了单片机的编译功能。2 系统软件设计本设计主程序流程图如图2所示,单片机向DS18B20传感器发送温度转换命令,读取已转换的温度值,通过按键输入和软件编程进行温度限值设定与判断,并在其I/O口输出控制信号,对风扇进行开关或调速。图2 主程序流程图温度采集程序将DS18B20采集的温度存入寄存器指定数组,将二进制转化为十进制,交给显示程序显示。液晶显示程序用于温度和档位的实时显示。按键扫描程序设定开机温度、运行模式等。温度判断程序根据设定温度和当前环境温度差值设定多个风速档位。电机驱动程序模拟PWM波输出,一次输出多个电平,风速档位与高电平的占空比成正比,根据温度的高低来调节不同档位的风速。3 结束语本设计的特色:可设置自动、手动、睡眠等多种工作模式;启动自动和睡眠模式后,可设置自动开(关)机温度。若检测温度高于设定温度,则风扇自动开启,并能根据实时温度自动调节风速;当低于设定温度时,风扇不工作;启动睡眠模式后,在温度变化范围不大时,将自动循环调节风速大小,以模拟自然风效果。温控调速风扇拥有智能温控、自动调速、工作稳定、成本低廉、节能降耗等特点,经过适当改造可应用于家用电器、厂矿风冷设备以及电子器件的散热器等。本设计能够在保证散热效果的同时,降低风扇运转时的噪音并节约能源,符合人性化设计和绿色节能要求,具有一定的市场前景。参考文献[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004.[2] 蓝厚荣.单片机的PWM控制技术[J].工业控制计算机,2010(23) .[3] 刘进山.基于MCS-51电风扇智能调速器的设计[J].电子质量,2004(10).endprint摘 要 本文设计了智能温控调速风扇,基于单片机检测和控制技术,将单片机、传感器等智能器件用于风扇设计,可依据检测温度自动调节适宜的风速。关键词 单片机 温度传感器 智能控制 自动调速中图分类号:TP368.1 文献标识码:ATemperature Intelligent Control Speed of Fan Based on STC12-MCUWU Wangsheng(School of physics and Optoelectronic Engineering, Yangtze University, Jingzhou, Hubei 434023)Abstract Temperature intelligent control speed of fan, based on Micro Control Unit(MCU) detection and control technology, using MCU and sensor device design fan, according to the test temperature automatic adjustment appropriate speed of fan.Key words Single-chip microcomputer; temperature sensor; intelligent control; automatic speed regulation0 引言风扇是散热降温的常用电器,如家用的电风扇和电子器件中的散热风扇等。大多数家用风扇只能手动调速和机械定时,各档风速跨度较大,高档风冷噪音大,低档又不解暑;定时设计机械,入夜熟睡后若气温骤变,风速不变则容易着凉。散热风扇通过空气对流控制器件的温度,转速越高散热效果越好,但同时噪音和震动也越大。如何在风扇的散热功效和静音效果之间找到平衡点,随器件工作温度的变化合理调节风速,使之在较低噪音下正常工作显得十分必要。为解决上述问题,我们设计了智能温控调速风扇,基于单片机检测和控制技术,将单片机、传感器等智能器件用于风扇设计,可依据检测温度自动调节适宜的风速。1 系统整体设计系统主要由主控电路模块、稳压电源模块、温度采集模块、功能按键模块、温度显示模块、驱动电路模块和风扇(直流电机)等七个功能模块组成。图1 系统的整体设计结构框图系统总体框架如图1所示,采用STC12C5A60S2单片机作为主要控制芯片,使用温度传感器DS18B20进行温度采集,并直接输出数字温度信号给单片机进行判断,根据判断结果控制相应引脚输出高电平或低电平,控制风扇启动或关闭;在启动状态下,模拟PWM波输出调节风扇转速。1.1 主控电路模块主控电路模块是整体系统设计的核心,控制温度的采集与显示,通过按键输入和软件编程进行温度限值设定与判断,并在其I/O口输出控制信号,对风扇进行开关或调速。本设计选用STC12C5A60S2单片机作为控制器件,采用增强型8051CPU,单时钟机器周期1T,指令代码完全兼容传统8051;内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,25万次/秒)。支持串口程序烧写,配合PC端的控制程序即可将程序代码下载进单片机,无需编程器和仿真器,对开发设备要求低,节省开发时间。1.2 温度采集模块温度采集模块选用数字传感器DS18B20作为核心元件,测温范围[-55,+125]℃。该传感器高度集成化,与传统的热敏电阻等测温元件相比,温度值在器件内部转化成数字量直接输出,测量精度高,测温分辨率高达0.0625℃;被测温度用符号扩展的16位补码形式以“一线总线”串行传送给单片机,实际操作中只须将信号线与单片机I/O口相连,抗干扰性强。1.3 液晶显示模块液晶显示模块选用LCD1602字符型显示器,用于显示温度、风扇档位和工作模式。LCD1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,由若干个5X7点阵字符位组成,每个点阵字符位都可以显示一个字符,可显示ASCII码表中的所有可视字符。1.4 功能按键模块功能按键模块采用独立按键式,每个按键单独占用一根I/O线,每个按键的工作不会影响其它I/O线的状态。本设计包括4个独立式按键:(1)模式切换:按下该键循环切换自动、睡眠、手动三种工作模式。(2)温度设定:自动和睡眠模式下,设置自动开(关)机温度。环境温度高于设定温度自动开机,否则不启动或关机。(3)手动调速:手动模式下,按下该键循环切换三档风速。(4)停止模式,关闭风扇。1.5 驱动电路模块由于STC12系列单片机自带PWM控制器,因此本设计选用桥式驱动电路L298N来驱动5V直流电机风扇,并通过单片机I/O口输出PWM脉冲调节风速。L298N模块属于H桥式专用驱动集成电路,其输入端可与单片机直接连接。采用软件编程实现PWM(脉冲宽度调制)调速,通过控制矩形波PWM信号的占空比来调控电机转速。电机转速与占空比成正比,占空比越大,转速越快,若输出全为高电平则占空比为100%,转速最大。相比于其他如硬件或软硬件结合的调速方式,通过软件编程实现PWM调速,在降低成本的同时,充分发挥了单片机的编译功能。2 系统软件设计本设计主程序流程图如图2所示,单片机向DS18B20传感器发送温度转换命令,读取已转换的温度值,通过按键输入和软件编程进行温度限值设定与判断,并在其I/O口输出控制信号,对风扇进行开关或调速。图2 主程序流程图温度采集程序将DS18B20采集的温度存入寄存器指定数组,将二进制转化为十进制,交给显示程序显示。液晶显示程序用于温度和档位的实时显示。按键扫描程序设定开机温度、运行模式等。温度判断程序根据设定温度和当前环境温度差值设定多个风速档位。电机驱动程序模拟PWM波输出,一次输出多个电平,风速档位与高电平的占空比成正比,根据温度的高低来调节不同档位的风速。3 结束语本设计的特色:可设置自动、手动、睡眠等多种工作模式;启动自动和睡眠模式后,可设置自动开(关)机温度。若检测温度高于设定温度,则风扇自动开启,并能根据实时温度自动调节风速;当低于设定温度时,风扇不工作;启动睡眠模式后,在温度变化范围不大时,将自动循环调节风速大小,以模拟自然风效果。温控调速风扇拥有智能温控、自动调速、工作稳定、成本低廉、节能降耗等特点,经过适当改造可应用于家用电器、厂矿风冷设备以及电子器件的散热器等。本设计能够在保证散热效果的同时,降低风扇运转时的噪音并节约能源,符合人性化设计和绿色节能要求,具有一定的市场前景。参考文献[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004.[2] 蓝厚荣.单片机的PWM控制技术[J].工业控制计算机,2010(23) .[3] 刘进山.基于MCS-51电风扇智能调速器的设计[J].电子质量,2004(10).endprint摘 要 本文设计了智能温控调速风扇,基于单片机检测和控制技术,将单片机、传感器等智能器件用于风扇设计,可依据检测温度自动调节适宜的风速。关键词 单片机 温度传感器 智能控制 自动调速中图分类号:TP368.1 文献标识码:ATemperature Intelligent Control Speed of Fan Based on STC12-MCUWU Wangsheng(School of physics and Optoelectronic Engineering, Yangtze University, Jingzhou, Hubei 434023)Abstract Temperature intelligent control speed of fan, based on Micro Control Unit(MCU) detection and control technology, using MCU and sensor device design fan, according to the test temperature automatic adjustment appropriate speed of fan.Key words Single-chip microcomputer; temperature sensor; intelligent control; automatic speed regulation0 引言风扇是散热降温的常用电器,如家用的电风扇和电子器件中的散热风扇等。大多数家用风扇只能手动调速和机械定时,各档风速跨度较大,高档风冷噪音大,低档又不解暑;定时设计机械,入夜熟睡后若气温骤变,风速不变则容易着凉。散热风扇通过空气对流控制器件的温度,转速越高散热效果越好,但同时噪音和震动也越大。如何在风扇的散热功效和静音效果之间找到平衡点,随器件工作温度的变化合理调节风速,使之在较低噪音下正常工作显得十分必要。为解决上述问题,我们设计了智能温控调速风扇,基于单片机检测和控制技术,将单片机、传感器等智能器件用于风扇设计,可依据检测温度自动调节适宜的风速。1 系统整体设计系统主要由主控电路模块、稳压电源模块、温度采集模块、功能按键模块、温度显示模块、驱动电路模块和风扇(直流电机)等七个功能模块组成。图1 系统的整体设计结构框图系统总体框架如图1所示,采用STC12C5A60S2单片机作为主要控制芯片,使用温度传感器DS18B20进行温度采集,并直接输出数字温度信号给单片机进行判断,根据判断结果控制相应引脚输出高电平或低电平,控制风扇启动或关闭;在启动状态下,模拟PWM波输出调节风扇转速。1.1 主控电路模块主控电路模块是整体系统设计的核心,控制温度的采集与显示,通过按键输入和软件编程进行温度限值设定与判断,并在其I/O口输出控制信号,对风扇进行开关或调速。本设计选用STC12C5A60S2单片机作为控制器件,采用增强型8051CPU,单时钟机器周期1T,指令代码完全兼容传统8051;内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S,25万次/秒)。支持串口程序烧写,配合PC端的控制程序即可将程序代码下载进单片机,无需编程器和仿真器,对开发设备要求低,节省开发时间。1.2 温度采集模块温度采集模块选用数字传感器DS18B20作为核心元件,测温范围[-55,+125]℃。该传感器高度集成化,与传统的热敏电阻等测温元件相比,温度值在器件内部转化成数字量直接输出,测量精度高,测温分辨率高达0.0625℃;被测温度用符号扩展的16位补码形式以“一线总线”串行传送给单片机,实际操作中只须将信号线与单片机I/O口相连,抗干扰性强。1.3 液晶显示模块液晶显示模块选用LCD1602字符型显示器,用于显示温度、风扇档位和工作模式。LCD1602是一种专门用来显示字母、数字、符号等的点阵型液晶模块,由若干个5X7点阵字符位组成,每个点阵字符位都可以显示一个字符,可显示ASCII码表中的所有可视字符。1.4 功能按键模块功能按键模块采用独立按键式,每个按键单独占用一根I/O线,每个按键的工作不会影响其它I/O线的状态。本设计包括4个独立式按键:(1)模式切换:按下该键循环切换自动、睡眠、手动三种工作模式。(2)温度设定:自动和睡眠模式下,设置自动开(关)机温度。环境温度高于设定温度自动开机,否则不启动或关机。(3)手动调速:手动模式下,按下该键循环切换三档风速。(4)停止模式,关闭风扇。1.5 驱动电路模块由于STC12系列单片机自带PWM控制器,因此本设计选用桥式驱动电路L298N来驱动5V直流电机风扇,并通过单片机I/O口输出PWM脉冲调节风速。L298N模块属于H桥式专用驱动集成电路,其输入端可与单片机直接连接。采用软件编程实现PWM(脉冲宽度调制)调速,通过控制矩形波PWM信号的占空比来调控电机转速。电机转速与占空比成正比,占空比越大,转速越快,若输出全为高电平则占空比为100%,转速最大。相比于其他如硬件或软硬件结合的调速方式,通过软件编程实现PWM调速,在降低成本的同时,充分发挥了单片机的编译功能。2 系统软件设计本设计主程序流程图如图2所示,单片机向DS18B20传感器发送温度转换命令,读取已转换的温度值,通过按键输入和软件编程进行温度限值设定与判断,并在其I/O口输出控制信号,对风扇进行开关或调速。图2 主程序流程图温度采集程序将DS18B20采集的温度存入寄存器指定数组,将二进制转化为十进制,交给显示程序显示。液晶显示程序用于温度和档位的实时显示。按键扫描程序设定开机温度、运行模式等。温度判断程序根据设定温度和当前环境温度差值设定多个风速档位。电机驱动程序模拟PWM波输出,一次输出多个电平,风速档位与高电平的占空比成正比,根据温度的高低来调节不同档位的风速。3 结束语本设计的特色:可设置自动、手动、睡眠等多种工作模式;启动自动和睡眠模式后,可设置自动开(关)机温度。若检测温度高于设定温度,则风扇自动开启,并能根据实时温度自动调节风速;当低于设定温度时,风扇不工作;启动睡眠模式后,在温度变化范围不大时,将自动循环调节风速大小,以模拟自然风效果。温控调速风扇拥有智能温控、自动调速、工作稳定、成本低廉、节能降耗等特点,经过适当改造可应用于家用电器、厂矿风冷设备以及电子器件的散热器等。本设计能够在保证散热效果的同时,降低风扇运转时的噪音并节约能源,符合人性化设计和绿色节能要求,具有一定的市场前景。参考文献[1] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004.[2] 蓝厚荣.单片机的PWM控制技术[J].工业控制计算机,2010(23) .[3] 刘进山.基于MCS-51电风扇智能调速器的设计[J].电子质量,2004(10).endprint
你该读读这些:一周精选导览}

我要回帖

更多关于 单片机测量脉冲宽度 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信