不改变硬件电路能不能够用stc15代替stc89的stc单片机复位电路?

基于stc89c52单片机的多功能数字钟的设计_张开碧
科技信息SCIENCE &TECHNOLOGY INFORMATION2010年第35期0前言钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种, 可用中小规模集成电路组成电子钟;也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟;还可以利用单片机来实现电子钟。1功能本设计中选择STC89C52单片机来进行设计,主要由于其体积小、成本低,功能丰富并且实用方便。配合时钟芯片来实现时钟、跑表、闹铃、日历能功能,用温湿度传感器分别检测工作环境的温度和湿度,通过按不同的键在1602液晶显示器上显示对应的数值。数字钟的基本功能如下:1.1计时及校时:数字钟的最基本功能既是显示和调整时间,本设计可以让数字钟24小时制或12小时制显示,可以通过设置进行转换等。1.2跑表:本数字钟还具备跑表的功能,跑表功能包括跑表的启动、停止、保持显示、清除等。1.3闹钟:可以通过键盘设定闹钟时间,在设置的时间进行闹钟提示,每一次响5秒,每隔5秒响一次,如果不人为的进行干涉闹钟会一直响60分钟。1.4日历:让数字钟可以显示日期(包括年、月、日) ,并且可以显示星期几。1.5温度、湿度等的显示:通过传感器等相关硬件配合相应的电路将测试到的温度和湿度数据转换为数字在时钟液晶显示屏上显出来。2系统硬件的设计2.1硬件的选择本设计选ATC89C52单片机作为主芯片以外,还要用的其他各种元件来实现相应的功能,因此还要对其他电子元件做一个合理的选择和安排。在设计过程中结合实际情况对相关硬件做了如下选择:时钟电路中将用到DS12C887时钟芯片,温度检测电路用的是温度传感器DS18B20,湿度检测电路用到的是HS1101湿度传感器,闹钟以及按键提示均用到蜂鸣器。这样的硬件选择既可以实现数字钟的一系列功能,又是一个简洁的选择结果,而且成本低,较容易入手。2.2硬件的电路设计2.2.1ATC89C52芯片STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。根据实际搭建电路图画出芯片的电路图如图1所示,端口接的其他设备在后面分别介绍[4]。图1ATC89C52芯片2.2.2时钟电路DS12C887时钟芯片的电路图如图2所示,它是通过对应的端口与单片机相连接的。图2DS12C887时钟芯片DS12C887实时时钟芯片功能丰富,可以用来直接代替IBM PC 上的时钟日历芯片DS12887,同时它的管脚也和MC146818B 、DS12887相兼容。2.2.3液晶显示电路液晶1602与单片机的电路图如图3,它是通过对应的端口与单片机的连接的。其中:①1,2端为电源;15,16为背光电源;为防止直接加5V 电压烧坏背光灯,在15脚串接一个10Ω电阻用于限流。②液晶3端为液晶对比度调节端,通过一个10k Ω电位器接地来调节液晶显示对比度。首次使用时,在液晶上电状态下,调节至液晶上面一行显示出黑色小格为止。③液晶4端为向液晶控制器写数据/写命令选择端,接单片机的P1.3口。④液晶5端为读/写选择端,因为我们不从液晶读取任何数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。基于STC89C52单片机的多功能数字钟的设计张开碧王浩曾勇斌(重庆邮电大学自动化学院中国重庆400065)【摘要】本文主要介绍了数字钟的功能以及相应的硬件电路的设计,并且用C 语言编写了相应的程序下载到单片机上进行调试,让其结合硬件电路实现对应的功能:时间显示、日期显示、跑表、闹铃、温度显示和湿度显示。本文着重地介绍了多功能数字钟的硬件制作。【关键词】数字钟;STC89C52单片机;硬件设计Design of Multifunctional Digita Digital Clock Based on STC89C52ZHANG Kai-bi WANG Hao ZENG Yong-bin(Collegeof Automation ,Chongqing University of Posts and Telecommunications ,Chongqing ,400065,China)【Abstract 】This article paper describes the function of the digital clock and the design of the corresponding hardware circuit.At the same time, the corresponding program is preparated with the C language which is downloaded to the MCU on the debugging hardware to combine the functions of the corresponding circuit. These functions include the time display, date display, stopwatch, alarm, temperature display and humidity display. In this paper, the multi-function digital clock hardware production is introduced emphatically.【Key words 】Digital Clock ;STC89C52;Hardwaredesign○本刊重稿○121/3
下载文档到电脑
本文标题:基于stc89c52单片机的多功能数字钟的设计_张开碧 搜寻更多关于“”
链接地址:
& 果果文本库所有资源均来源于互联网,仅供网友学习交流,若侵犯了您的权益,请联系我们予以删除。
5409&&人浏览
1952&&人浏览
6647&&人浏览
4275&&人浏览
7065&&人浏览
15405&&人浏览
5814&&人浏览
7467&&人浏览
2714&&人浏览
18769&&人浏览
7995&&人浏览
17987&&人浏览
1412&&人浏览
14079&&人浏览
16247&&人浏览
copyright@
GGdoc.com Inc. All Rights Reserved 果果文本库 版权所有 联系站长:ggdocadmin@163. 经营许可证编号:浙ICP备号后使用快捷导航没有帐号?
来自ValentinRuhry的创意,这哥们用整整500
STC15系列程序怎么不能通用?需要改哪里?
本帖最后由 七彩的梦想 于
07:53 编辑
大家好!下面这个程序在STC15F104E单片机内能正常运
行,为什么下载到STC15F104W和STC15W104单片机内
运行,能正常学习,就是发射不了红外信号?(以上3个
型号单片机,都是DIP8封装,STC15F104E中断有BUG,有
定时器T0 T1 /STC15F104W中断可以正常使用,有定时
器T0 T2/ STC15W104,是低压供电版本,2.4V——5.5V)
这是4键学习型遥控代码
//内部振荡12M
#include &STC15.h&
#include &intrins.h&
#define uchar unsigned char
#define uint&&unsigned int
#define delaytime 0x83
#define&&QDDM 0x5a;
#define FOSC UL//12M晶振
sbit led=P3^3;
sbit K1=P3^0;
sbit K2=P3^2;
sbit K3=P3^3;
sbit K4=P3^4;
sbit IR=P3^1;//红外接收头
sbit P3_5=P3^5;//红外发射管
//EPPROM地址
//掉电计数
//掉电标志位
void BCSC(uint addr);//存电平时长
void ffss();//红外发射
void Read_Key();
void xiexi();
void ddjs();
void byte_write(uint addr, uchar dat);
void SectorErase(uint sector_addr);
uchar byte_read(uint addr);
//************************************
void Delay(uchar t)& && && & //tMs
uchar a,b;
for(;t&0;t--)& && &
for(b=222;b&0;b--)
for(a=12;a&0;a--);
void Init()
TH1=(65536-FOSC/2/38400/12)&&8;//38K方波定时T1
TL1=(65536-FOSC/2/38400/12);
EA=ET0=TR0=TR1=IT0=IT1=1;
//************************************
void Int0() interrupt 0//外中断0
EX0 = EX1 =IE0 = IE1 =INT_CLKO=0;}
//************************************
void Int1() interrupt 2//外中断1
EX0 = EX1 =IE0 = IE1 =INT_CLKO=0;}
//************************************
void Int2() interrupt 10& && &&&//外中断2
EX0 = EX1 =IE0 = IE1 =INT_CLKO=0;}
//***************************************
void Int4() interrupt 16& && &&&//外中断4
EX0 = EX1 =IE0 = IE1 =INT_CLKO=0;}
//***************************************
void Timer0() interrupt 1 using 1 //定时器0中断
if(++diaodian&80)//70MS*80=5.6秒后进入掉电模式
diaodian=0;
EX0=1;//进入掉电模式前开外中断0
EX1=1;//进入掉电模式前开外中断1
INT_CLKO|=0x50;//进入掉电模式前开外中断2,中断4
flag=1;//打开掉电标志位
void GRDS(uint addr)//装入定时器
TR0=0;//停止计数
TF0=0;//清溢出位
TH0=byte_read(addr);//读出定时时长装入定时器
TL0=byte_read(addr+1);//读低位数据
TR0=1;//;开始计时
//---------------------------------------------------
void ffss()//红外发射
led=1;//开灯
dps=byte_read(addr);//读出电平个数
addr++;//地址+1
INT_CLKO=0x02;//发射38K
GRDS(addr);//时长装入定时器,开始计时
addr+=2;//下2地址
while (!TF0);//等待溢出
if(dps--==0)//电平数是否完毕
INT_CLKO=03_5=1;//停止发射
GRDS(addr);//时长装入定时器,开始计时
addr+=2;//下2地址
while (!TF0);//等待溢出
if(dps--==0)//电平数是否完毕
INT_CLKO=03_5=1;//停止发射
//---------------------------------------------------
void BCSC(uint addr)//存电平时长
TR0=0;//停止计数,存高电平时长
byte_write(addr, ~TH0);
byte_write(addr+1, ~TL0);
TH0=0;//定时器初值归0
TL0=0x6d;//补偿110US
TR0=1;//开始计数
void xiexi()
uchar i,cou,
for (i=0;i&250;i++)//判断扇区的250个字节
dat=byte_read(addr+i);
if (dat!=0xff){SectorErase(addr);}//判断扇区是否为
addrtmp=//暂存第1个地址
addr++;//从扇区第2地址开始写,第1地址用来写电平数
led=0;//亮灯,等待学习
TR0=0;//停止计数
while (IR);//等待学习
TH0=0;//定时器初值归0
TR0=1;//计时
while (!IR)
{if (TF0){}//等待高电平,等待超时;超过70MS退出
BCSC(addr);//存低电平时长
cou++;//电平个数加1
addr+=2;//下2地址
while (IR)
{if (TF0){}//等待低电平,等待超时;超过70MS退出
BCSC(addr);//存高电平时长
cou++;//电平个数加1
addr+=2;//下2地址
TR0=0;//停止计数
byte_write(addrtmp,cou);//电平个数写入扇区第1个地址
void ddjs()
key=P3&0x1d;
while (key!=0x1d &&cou&30)//是否放开按键
TF0=0;//30*70=2100MS
key=P3&0x1d;
if(cou&30)
ffss();//短按,红外发射
xiexi();//长按跳转到学习功能
led=1;//学习完毕关灯
TH0=0;//定时器初值归0
diaodian=0;//掉电计数
TR0=1;ET0=1;//开定时器0中断,判断掉电
EA=1;//开总中断
//**************************************
void Read_Key()//按键
key=P3&0x1d;
if (key==0x1d)
Delay(20);//消抖
key=P3&0x1d;
if (key==0x1d)//判断是否有按键按下
EA=0;//关中断
cou=0;//计数清0
TR0=1;//开定时器0
if(key==0x1c)
addr=0;//按键1Epprom的首地址
else if(key==0x19)
addr=0x100;//按键2Epprom的首地址
else if(key==0x15)
addr=0x200;//按键3Epprom的首地址
else if(key==0x0d)
addr=0x300;//按键4Epprom的首地址
/******************************************
******************************
函数名称:字节写
全局变量:无
参数说明:addr:写入地址, dat:写入数据
******************************************
******************************/
void byte_write(uint addr, uchar dat)
IAP_CONTR =
IAP_ADDRH =& & addr &&8;& && && && && && &&&/* 取地址& &&&*/
IAP_ADDRL =& &
IAP_CMD&&= 0x02;& && && && && && && && &/* 写命令2& & */
IAP_DATA =& && && && && && && && && & /* 写入数据准备& & */
IAP_TRIG& & =QDDM ;& && &&&/* 触发IAP_IAP命令字节1& & */
IAP_TRIG& & =~QDDM;& && &&&/* 触发IAP_IAP命令字节2& & */
_nop_();_nop_();
_nop_();& & _nop_();
/******************************************
******************************
函数名称:扇区擦除
全局变量:无
参数说明:sector_addr:扇区地址
******************************************
******************************/
void SectorErase(uint sector_addr)
IAP_CONTR =
IAP_ADDRH = (sector_addr & 0xfe00)&&8;
IAP_ADDRL = sector_
IAP_CMD& & = 0x03;& & /* 擦除命令3& &&&*/
IAP_TRIG& & =QDDM ;& && &&&/* 触发IAP_IAP命令字节1& & */
IAP_TRIG& & =~QDDM;& && &&&/* 触发IAP_IAP命令字节2& & */
_nop_();_nop_();
_nop_();& & _nop_();
/******************************************
******************************
函数名称:字节读函数
全局变量:无
参数说明:addr:所要读取的地址
返回说明:读取到的数据
******************************************
******************************/
uchar byte_read(uint addr)
IAP_CONTR =
IAP_ADDRH = addr && 8;& & /* 地址赋值& & */
IAP_ADDRL =
IAP_CMD& &= 0x01;& && && && &/* 写入读命令& & */
IAP_TRIG& & =QDDM ;& && &&&/* 触发IAP_IAP命令字节1& & */
IAP_TRIG& & =~QDDM;& && &&&/* 触发IAP_IAP命令字节2& & */
_nop_();& & _nop_();& & _nop_();
return (IAP_DATA);/* 返回读到的数据& & */
/*****************************
******************************/
void main()& && &&&
{flag=0CON=2;_nop_();_nop_();_nop_();_nop_();
}//是否掉电
Read_Key();//检测按键
//*******************
把程序下载到15F104W和15W104单片机内,能正常学
习,就是不能发出红外信号。
请问哪位高手知道,还需要改哪里?
头文件确定都是一样的话,那就不是程序问题。头文件一样说明内部的寄存器使用和配置都一样的,那么实现相同的功能软件程序也是一样的。
1、重点检查外围的硬件电路2、可以重新编一个小程序,测试你所用的IO口是否能正常使用,可以驱动小灯试试。
不知道楼主这三个单片机是不是同个时间段买的呀。
刚去官网查了一下,104E已经停产了的。。
另外两个104 104W是同一个系列,的,应该是通用,跟104E应该会有道别的。。
104 104W 的说明PDF文件太大就不上传了,你可以在选型软件里或官网上下载。。
QQ图片50.jpg (23.26 KB, 下载次数: 0)
11:08 上传
(5.52 MB, 下载次数: 9)
11:06 上传
点击文件名下载附件
下载积分: 下载币 -5
yyz228 发表于
头文件确定都是一样的话,那就不是程序问题。头文件一样说明内部的寄存器使用和配置都一样的,那么实现相同 ...
硬件电路没问题,可能是单片机内部功能调用的区别
宅男公子 发表于
不知道楼主这三个单片机是不是同个时间段买的呀。
刚去官网查了一下,104E已经停产了的。。
我也是这么认为的,15W104和15F104W都是之后的版本,应该更加兼容前面的15F104E
七彩的梦想 发表于
我也是这么认为的,15W104和15F104W都是之后的版本,应该更加兼容前面的15F104E
仔细对比下说明PDF文件吧。。
我最近刚买了12C5A60S2。接LCD1602。。
用P0做数据P2.5 2.6 2.7做RS.RW.E 很正常。。。
换成P2做数据 P0.5 0.6 0.7做RS.RW.E就不正常了。。
查来查去不知道什么原因还以为是自己的电路有问题。。
昨晚重新看了一遍说明PDF文件。。
把P0 P2的IO模式改了一下,正常了。。。运行一个晚上都没问题了。。。
我想你的也许也是配置的问题吧。。。
宅男公子 发表于
仔细对比下说明PDF文件吧。。
我最近刚买了12C5A60S2。接LCD1602。。
用P0做数据P2.5 2.6 2.7做RS.RW.E ...
嗯,有这种可能。我有时间试一试你说的方法。谢谢了!
七彩的梦想 发表于
嗯,有这种可能。我有时间试一试你说的方法。谢谢了!
客气了,我也是刚好碰到类似的。。AT89C52可以用。
放到STC的就不能用了,该改的改了,加了延时了。就是不行,时好时坏。。
纠结了我一两天。。。
我改的是原来是弱上拉模式改成了强挽推出。。。
Copyright &
Powered by基于单片机STC89C51的电子琴电路设计
> 基于单片机STC89C51的电子琴电路设计
基于单片机STC89C51的电子琴电路设计
引言本文引用地址:  随着计算机在社会各领域的渗透,的应用正在不断地走向深入,同时带动着工业、农业、商业、家电以及玩具的日新月异更新,极大地提高了电子电路及系统设计质量和效率。本文中所设计的具有存储功能的是由、小键盘、LCD以及音频功放电路和扬声器组成的。利用该电路,用户可以自由地输入音符,利用单片机产生不同频率来获得我们要求的音阶,使扬声器发出悦耳的音乐,最终可随意弹奏想要表达的音乐。同时详细论述了该系统的设计过程及关键技术。 1 系统硬件组成 的控制电路分为单片机、工作指示LED、LCD显示器、按键输入、喇叭接口等几部分。其硬件电路结构框图如图1所示。 1.1 单片机简介 STC单片机是一款增强型5l单片机,完全兼容MCS-51。STC89C51可以代替AT89C51,而且功能更强,速度更快,寿命更长,价格更低。该单片机具有40个引脚,采用双列直插DIP-40封装。STC89C51可以完成ISP在线编程功能,而AT89C51则不能。因此,将AT89C51中的程序直接烧录到STC89C51中后,STC89C5l就可以代替AT89C51直接工作。STC推出的系列51单片机芯片全面兼容其它51单片机。STC89C51内部有E2PROM,可以在程序中修改,而且断电不丢失数据。此外,还增加了两级中断优先级等等,STC89系列单片机的基本特性如图2所示。 通常电子琴所输入的音阶值都先存入变量数组中,演奏时才逐一取出来播放单音。程序中的变量使用的是内部存储器RAM,范围为空间30H~7FH,因此,其程序内存规划是:RAM地址30H~70H存放音阶值,最大内存空间为64字节;RAM地址71H~7FH存放程序其他变量。程序执行后,工作指示LED闪动,表示程序开始执行。当按下键盘组中的相对按键时,压电喇叭会发出相对音阶单音,全系统共有2个8度音阶,DO~SI,HI DO~HI SI,14个音阶,所输入的单音会存入89C5l内,至多可以输入64个单音,并可以一起演奏出来,同时还有清除存储功能,可将原数据清除后再重新输入。 1.2 LCD硬件接口 本设计所用LCD的引脚如图3所示,其中,DO~D7为双向数据总线,LCD数据读写方式可以分为8位及4位两种。若以8位数据进行读写,则DO~D7皆有效,若以4位方式进行读写,则只用到D7~D4。RS为寄存器选择控制线,当RS为O且做写入操作时,可以写指令寄存器;若RS为l,则用于读写数据寄存器。P/W为LCD读写控制线,R/W为0,LCD执行写作,R/W为1时,则做读操作。VO为亮度调整电压输入控制引脚,输入0V时,字符显示最亮。 LCD可以实时显示目前演奏的单音码,可以实时显示所存储的单音计数。按键9是清除键,可将存储的单音计数清0;按键8是放音键,可将内存中的单音逐一演奏出来,演奏中可以按K4键来中断。本设计使用一般的LCD显示器来显示音乐演奏的消息及单音码。按下键盘组按键,喇叭就会发出相对音阶。将这些音阶存储起来然后放音,就可成为自动演奏电子琴。 1.3 键盘扫描  键盘上的每一个键都有两个唯一的数值进行标志。为什么要用两个数值而不是一个数值呢?这是因为一个键可以被按下,也可以被释放。当一个键按下时,它们产生一个唯一的数值,当一个键被释放时,它也会产生一个唯一的数值,我们把这些数值都保存在一张表里面,到时候通过查表就可以知道是哪一个键被敲击,并且可以知道是它是被按下还是被释放了。 整个4x4键盘按键的分配及配置原理图如图4所示。图4中为16键的控制电路,使用AT89S51端口2的8条I/O线做16个按键的键盘扫描,并由P2.0~P2.3送出扫描信号,而由P2.4~P2.7读取按键数据返回码。表l所列是4x4按键与音阶的对应表。
分享给小伙伴们:
我来说两句……
最新技术贴
微信公众号二
微信公众号一不改变硬件电路能不能够用stc15代替stc89的单片机?_百度知道
不改变硬件电路能不能够用stc15代替stc89的单片机?
我有更好的答案
虽然二者指令大部分相同,但管脚不兼容,所以不能替代
采纳率:88%
来自团队:
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 stc15w201s 外围电路 的文章

 

随机推荐