1.单片机AT89C52电子时钟课程设计
参考:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT89C2051时钟程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 定时器T0、T1溢出周期为50MS,T0为秒计数用, T1为调整时闪烁用,; P3.7为调整按钮,P1口 为字符输出口,采用共阳显示管。
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000H ;程序执行开始地址 LJMP START ;跳到标号START执行 ORG 0003H ;外中断0中断程序入口 RETI ;外中断0中断返回 ORG 000BH ;定时器T0中断程序入口 LJMP INTT0 ;跳至INTTO执行 ORG 0013H ;外中断1中断程序入口 RETI ;外中断1中断返回 ORG 001BH ;定时器T1中断程序入口 LJMP INTT1 ;跳至INTT1执行 ORG 0023H ;串行中断程序入口地址 RETI ;串行中断程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 主 程 序 ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START: MOV R0,#70H ;清70H-7AH共11个内存单元 MOV R7,#0BH ;CLEARDISP: MOV @R0,#00H ; INC R0 ; DJNZ R7,CLEARDISP ; MOV 20H,#00H ;清20H(标志用) MOV 7AH,#0AH ;放入"熄灭符"数据 MOV TMOD,#11H ;设T0、T1为16位定时器 MOV TL0,#0B0H ;50MS定时初值(T0计时用) MOV TH0,#3CH ;50MS定时初值 MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用) MOV TH1,#3CH ;50MS定时初值 SETB EA ;总中断开放 SETB ET0 ;允许T0中断 SETB TR0 ;开启T0定时器 MOV R4,#14H ;1秒定时用初值(50MS*20) START1: LCALL DISPLAY ;调用显示子程序 JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序 SJMP START1 ;P3.7口为1时跳回START1SETMM1: LJMP SETMM ;转到时间调整程序SETMM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1秒计时程序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序 INTT0: PUSH ACC ;累加器入栈保护 PUSH PSW ;状态字入栈保护 CLR ET0 ;关T0中断允许 CLR TR0 ;关闭定时器T0 MOV A,#0B7H ;中断响应时间同步修正 ADD A,TL0 ;低8位初值修正 MOV TL0,A ;重装初值(低8位修正值) MOV A,#3CH ;高8位初值修正 ADDC A,TH0 ; MOV TH0,A ;重装初值(高8位修正值) SETB TR0 ;开启定时器T0 DJNZ R4, OUTT0 ;20次中断未到中断退出 ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值 MOV R0,#71H ;指向秒计时单元(71H-72H) ACALL ADD1 ;调用加1程序(加1秒操作) MOV A,R3 ;秒数据放入A(R3为2位十进制数组合) CLR C ;清进位标志 CJNE A,#60H,ADDMM ; ADDMM: JC OUTT0 ;小于60秒时中断退出 ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H) ACALL ADD1 ;分计时单元加1分钟 MOV A,R3 ;分数据放入A CLR C ;清进位标志 CJNE A,#60H,ADDHH ; ADDHH: JC OUTT0 ;小于60分时中断退出 ACALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#79H ;指向小时计时单元(78H-79H) ACALL ADD1 ;小时计时单元加1小时 MOV A,R3 ;时数据放入A CLR C ;清进位标志 CJNE A,#24H,HOUR ; HOUR: JC OUTT0 ;小于24小时中断退出 ACALL CLR0 ;大于或等于24小时小时计时单元清0 OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移 MOV 73H,77H ;入对应显示单元 MOV 74H,78H ; MOV 75H,79H ; POP PSW ;恢复状态字(出栈) POP ACC ;恢复累加器 SETB ET0 ;开放T0中断 RETI ;中断返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 闪动调时 程 序 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护 PUSH PSW ; MOV TL1, #0B0H ;装定时器T1定时初值 MOV TH1, #3CH ; DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次) MOV R2,#06H ;重装0.3秒定时用初值 CPL 02H ;0.3秒定时到对闪烁标志取反 JB 02H,FLASH1 ;02H位为1时显示单元"熄灭" MOV 72H,76H ;02H位为0时正常显示 MOV 73H,77H ; MOV 74H,78H ; MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场 POP ACC ; RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制 MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分 MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据 MOV 74H,78H ; MOV 75H,79H ; AJMP INTT1OUT ;转中。
2.定时插座 文献综述:(300字左右)
定时插座能根据用户设定时间,自动打开和关闭各种电器设备的电源。广泛用于路灯、霓虹灯、广告灯、电饭煲、增氧机、喷灌机、预热预冷装置等领域用电设备的编程定时自动控制。
定时插座电动自行车的充电控制:一般电动自行车充满电需要8个小时,充电器在前5个小时用大电流充电(一般为红指批示灯),后3个小时在电瓶充至75%时,跳转为小电流充电(一般显示绿色指示灯),期间的总用电量相当于100W的白炽灯泡开8个小时,我们一般在下班后回到车库就开始为自行车充电,这样充电大头用的是日电(晚9点以前),小头用的是夜电。对分时电表的用户来说可不合算,快用它吧,不管大小头都用夜电,每天能为您赚几毛钱,而且可以防止过充电,延长电池寿命。洗衣机、电热水器等等同样能为您省钱。
3.本人现在急求一篇关于单片机的论文,利用AT89S51芯片来实现定时
《科技传播》杂志给您推荐整理 国家级科技学术期刊 中英文目录 知网 万方全文收录 编辑部直接收稿 百度空间有详细信息 以下论文仅供参考不是很详细,具体论文还需要自己撰写,目前学术不端系统检测系统上线,在参考别人论文的时候一定要用自己的语言进行表述,避免抄袭嫌疑 摘 要 本系统能够产生正弦波、方波、三角波。
同时还可以作为频率计测频率。函数信号的产生由MAX038和外围电路完成,能产生1Hz—20MHz的波形。
波形选择由单片机完成。输出或输入频率经74HC390分频后,由单片机完成自动频率检测显示。
关键词:波形产生器、频率计、MAX038、74HC390、AT89S51。 前言 在现代电子学的各个领域,常常需要高精度且频率可方便调节的信号发生器。
各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。
函数信号发生器在电路实验和设备检测中具有十分广泛的用途。函数信号发生器的实现方法通常有以下几种: (1)用分立元件组成的函数发生器:通常是单函数发生器且频率不高,其工作不很稳定,不易调试。
(2)可以由晶体管、运放IC等通用器件制作,更多的则是用专门的函数信号发 生器IC产生。早期的函数信号发生器IC,如L8038、BA205、XR2207/2209等,它们的功能较少,精度不高,频率上限只有300kHz,无法产生更高频率的信号,调节方式也不够灵活,频率和占空比不能独立调节,二者互相影响。
(3)利用单片集成芯片的函数发生器:能产生多种波形,达到较高的频率,且易于调试。鉴于此,美国马克西姆公司开发了新一代函数信号发生器ICMAX038,它克服了(2)中芯片的缺点,可以达到更高的技术指标,是上述芯片望尘莫及的。
MAX038频率高、精度好,因此它被称为高频精密函数信号发生器IC。在锁相环、压控振荡器、频率合成器、脉宽调制器等电路的设计上,MAX038都是优选的器件。
(4)利用专用直接数字合成DDS芯片的函数发生器:能产生任意波形并达到很高的频率。但成本较高。
综合分析以上四种实现方法的性价比,我们决定采用单片集成芯片AX038来设计函数发生器。频率越高、产生波形种类越多的发生器性能越好,但器件成本和技术要求也大大提高,因此在满足工作要求的前提下,性价比高的发生器是我们的首选。
一、整体设计思路 本函数信号发生器是主要是由MAX038芯片产生我们希望输出的正弦波、方波、三角波。它是本制作的核心,当然随带的频率计用于显示输出频率,它是由单片机AT89S51控制的,由于用单片机所能测的频率范围有限,直接所计数的频率最大只能达到500KHz,为了能够测得更高的频率,所以加上分频器进行分频后再加到AT89S51的外部中断入口。
考虑到小信号时,所以必须加放大,然后整形才能达到分频器的输入要求。至于显示部分就用74LS164移位寄存器来驱动数码管显示。
整体原理框架图如下: 图1 一:硬件设计: 1.信号发生部分: 接通电源控制在输出状态,此时波形产生电路工作,它产生我们所选择的波形并输出到外部电路,另一部分则送入计数器。波形发生器的这部分电路是由MAX038及其外围电路完成的。
MAX038是一个精密高频波形产生器。它能产生频率高达20MHz的正弦波、三角波、方波等脉冲信号,其压控振荡器的频率分粗调和细调两层控制。
另外MAX038还包括占空比调整电路、波形同步电路、相位检测电路、波形切换开关和电压基准源等电路,所需外部元件少,使用很方便。这部分电路框图如下图2: 波形产生原理框图(图2) 波形产生电路(图3) 本系统采用MAX038设计了输出三角波、方波和正弦波的函数信号发生器,频率范围为10Hz~1MHz,能够满足大多数实验与检测的需求。
整机电路由信号产生级、电压放大级、功率输出级和电源四部分组成。信号产生级的核心器件为MAX038,它的输出波形有三种,由波形设定端A0(3),A1(4)控制,其编码如表2所示。
其中x表示任意状态。1为高电平,0为低电平。
MAX038的输出频率f0由Iin,FADJ端电压和主振荡器COSC的外接电容器CF三者共同确定。当UFADJ=0V时,输出频率f0=Iin/CF,Iin=Uin/Rin=2.5/Rin。
当UFADJ≠0V时,输出频率f0=f(1-0.2915UFADJ)。由波段开关SA2选择不同的CF值,将整个输出信号分为五个频段。
1)1Hz-- 10Hz 2)10Hz ---100Hz 3)100Hz---10K 4)1K ----20MHz 每频段频率的调节由电位器RP1和RP2完成。RP1为粗调电位器,改变RP1数值,使振荡电容器CF的充电电流Iin改变,从而使频率改变。
RP2为细调电位器,它通过改变UFADJ的数值,使输出频率变化,它的变化范围较小,起微调作用。为简化电路,各种波形的占空比固定为50%,这已能满足多数场合的使用要求。
为此将MAX038的脚7DADJ端接地。MAX038的各种输出波形的幅度均为2V(P-P)。
2.频率计数器部分: 1.)AT89S51介绍 美国MEL公司的AT89S系列51单片机支持ISP功能,给单片机应用开发带来了极大方便。现介绍一款简易型开发板的使用方法。
将该板插入DIP40封装的8051单片机插座处,通过廉价的ISP即可编程AT89。
4.哪位朋友可以告诉我一篇关于多功能电子定时器的毕业论文
你这个论文我会写
给你提供以下参考资料参考
方案论证
2.1方案一
定时器电路如图2.1所示,由RS触发器、可控振荡器及12级二进制计数器组成。与非门1.2组成的RS触发器可启动定时器并可实现中断定时;与非门3.4组成的可控振荡器输出占空比50%的定时脉冲;12级二进制计数器4040输入定时脉冲进行二进制计数。Q1~Q12为计数器计数输出,所计的脉冲数可用2*n来表达(n为计数器的级数,n=1~ 12)。若选择第8级(QS)输出,则输人27个脉冲时QS输出高电平。此高电平经VT组成的反相器反相后输人RS触发器使触发器翻转并结束定时。可根据定时的长短来选择计数器的级数。
图2.1 简单定时器电路
2.2方案二
利用单片机AT89C2051作为主控制元件,如图2.2,通过外围电路控制用电设备的电源,以达到定时的目的。AT89C2051具有体积小、功能强大、运行速度快、价格低廉等优点,非常适合制作集成度较高的控制电路。主板电路包括MCU AT89C2051、键盘与显示、输入与输出口、复位和电源滤波等电路组成。
图2.2 由AT89C2051构成的定时电路
3 电源电路设计和论证
3.1方案一
MIC2194 是MICREL 公司生产的一种高效PWM触发式电源控制器。利用它可将2. 9V~14V电压范围内的输入电压变换成3. 3V、5V 或12V 的电压输出, 因而可广泛应用于需要3. 3V、5V或12V以及采用1~2 节锂离子电池供电的电源电路中。MIC2194设计简单, 结构灵活, 因而可配置成多种电源转换器。MIC2194 采用小体积封装, 因此其体积很小, 重量很轻, 可有效节约宝贵的印制板空间。另外, MIC2194 还具有外围元件少的特点。在400kHz 的PWM操作时, 电路输出中的电感和电容都不需要太大,因而可降低应用电路的实际成本。电源电路图如图3.1所示。
图3.1 触发式电源控制器
3.2方案二
78系列为 3 端正稳压电路,TO-220 封装,能提供多 种固定的输出电压,应用范围广,内含过流、过热和过载保护电路。带散热片时,输出电流可达 1A。虽然是固定稳压电 路,但使用外接元件,可获得不同的电压和电流,如图3.21所示。此电路简单而且原件很少,所以选择第二种电源方案。
5.基于at89C52单片机倒计时器C语言
/*************************************要求是能进行9999秒倒计时 用C语言实现*************************************/#include#define uchar unsigned char#define uint unsigned intuchar num_qian,num_bai,num_shi,num_ge;//定义千位,百位,十位,个位。
uint time;//要显示的时间0~9999uint tcnt;//计时单元//*****************////以下是端口定义//*****************//sbit key_qian=P1^0;//按键"千加1"sbit key_bai =P1^2;//按键"百加1"sbit key_shi =P1^4;//按键"十加1"sbit key_ge =P1^6;//按键"个加1"sbit laba =P3^1;//喇叭void delay(unsigned int z)//1毫秒延时子函数{ unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}//*****************////以下是七段数码管驱动程序//*****************///**************************************************** 功能描述: 中断接受字符串驱动程序**占用引脚资源 P30**占用系统资源 串口中断;中断向量4***************************************************/#define DUAN P0#define WEI P2unsigned char code dispcode[]={ 0x3F,/*0*/ 0x06,/*1*/ 0x5B,/*2*/ 0x4F,/*3*/ 0x66,/*4*/ 0x6D,/*5*/ 0x7D,/*6*/ 0x07,/*7*/ 0x7F,/*8*/ 0x6F,/*9*/}; //共阴段码表//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-uchar code dispbitcode[]={0xef,0xdf,0xbf,0x7f}; //共阴位码表 uchar dispbuf[4],dispcount;//开辟四个显示缓冲区void ledinit()/***初始化子函数,定时器0刷新显示内容***/{ TMOD|=0x01; // 定时器0方式1 TH0=(65536-5000)/256; //定时器16位模式 TL0=(65536-5000)%256; //溢出时间:5ms TR0=1; //开启定时器0 ET0=1; //使能定时器0 EA=1; //系统使能 }void leddisp()//固定显示某些数字{ dispbuf[0]=time/1000; dispbuf[1]=time%1000/100; dispbuf[2]=time%100/10; dispbuf[3]=time%10;}void keytest()//按键检测程序{ if(!key_qian)//如果千位按键 { delay(5);//5毫秒延时去抖 if(!key_qian)//如果千位按键的确按下了 { num_qian++;//千位数字加一 while(!key_qian);//等待按键松开 } time+=num_qian*1000;//千位数字加1 } if(!key_bai)//如果百位按键 { delay(5);//5毫秒延时去抖 if(!key_bai)//如果百位按键的确按下了 { num_bai++;//百位数字加一 while(!key_bai);//等待按键松开 } time+=num_bai*100;//百位数字加1 } if(!key_shi)//如果十位按键 { delay(5);//5毫秒延时去抖 if(!key_shi)//如果十位按键的确按下了 { num_shi++;//千位数字加一 while(!key_shi);//等待按键松开 } time+=num_shi*10;//十位数字加1 } if(!key_ge)//如果千位按键 { delay(5);//5毫秒延时去抖 if(!key_ge)//如果个位按键的确按下了 { num_qian++;//千位数字加一 while(!key_ge);//等待按键松开 } time+=num_ge;//个位数字加1 }}void main()//主程序{ ledinit();//数码管中断初始化,定时器0刷新显示内容 while(1)//大循环 { if((!key_qian)||(!key_bai)||(!key_shi)||(!key_ge))//如果四个按键中的任何一个被按下 keytest();//执行按键检测程序 leddisp();//不断的刷新显示内容 }}//*************************************************//以下是定时器0刷新数码管显示内容驱动程序//*************************************************/**************************************************** 功能描述: 七段数码管驱动程序**占用引脚资源: 数码管段选,数码管位选**占用系统资源T0***************************************************/void t0(void) interrupt 1 //using 0 { TH0=(65536-5000)/256; //5ms中断 TL0=(65536-5000)%256; //16位定时器模式 WEI=0xff;//关位选 DUAN=dispcode[dispbuf[dispcount]]; //段选 WEI=dispbitcode[dispcount]; //开位选 dispcount++; if(dispcount==5) dispcount=0; tcnt++; //计数个数加一 if(tcnt==5*200)//满足1S了 { tcnt=0;//计数个数归零 time--;//时间减一 if(time==0)//时间 while(1); } if(time<10)//时间小于10 laba=~laba;//声音报警} 这个应该可以。
转载请注明出处众文网 » 智能定时插座毕业论文at89c52