首页 > 期刊投稿知识库 > 51单片机交通灯设计毕业论文

51单片机交通灯设计毕业论文

发布时间:

51单片机交通灯设计毕业论文

#include#define uchar unsigned char#define uint unsigned intsbit RED_A=P0^0; //东西向灯sbit YELLOW_A=P0^1;sbit GREEN_A=P0^2;sbit RED_B=P0^3; //南北向灯sbit YELLOW_B=P0^4;sbit GREEN_B=P0^5;uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量《单片机C语言程序设计实训100例---基于8051和PROTEUS仿真》案例5上海师范大学信息与机电工程学院—倪继锋//延时void DelayMS(uint x){uchar i;while(x--) for(i=0;i<120;i++);}//交通灯切换void Traffic_Light(){switch(Operation_Type){case 1: //东西向绿灯与南北向红灯亮RED_A=1;YELLOW_A=1;GREEN_A=0;RED_B=0;YELLOW_B=1;GREEN_B=1;DelayMS(2000);Operation_Type=2;break;case 2: //东西向黄灯闪烁,绿灯关闭DelayMS(300);YELLOW_A=~YELLOW_A;GREEN_A=1;if(++Flash_Count!=10) return; //闪烁5 次Flash_Count=0;Operation_Type=3;break;case 3: //东西向红灯,南北向绿灯亮RED_A=0;YELLOW_A=1;GREEN_A=1;RED_B=1;YELLOW_B=1;GREEN_B=0;DelayMS(2000);Operation_Type=4;break;case 4: //南北向黄灯闪烁5 次DelayMS(300);YELLOW_B=~YELLOW_B;GREEN_B=1;if(++Flash_Count!=10) return;Flash_Count=0;Operation_Type=1;}}//主程序void main(){while(1) Traffic_Light();}

单片机交通灯毕业设计

在日常生活中,交通灯是一项必不可少的公共设施,可以维护道路的畅通和交通的秩序。如若交通灯发生故障,那么后果可想而知。因此,交通灯的正常工作就显得尤为重要。由于交通灯对于公共安全的重要性,本文基于51单片机模拟双向交通灯的设计。下面是我整理的单片机交通灯毕业设计,欢迎来参考!

一、交通灯的设计要求

双向交通灯红、黄、绿灯对应相同,红灯5s,黄灯1s,绿灯5s。当有急救车到达时,双向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10s,急救车通过后,交通灯恢复中断前状态。

二、AT89C51单片机的中断系统介绍

计算机系统中止当前的正常工作,转入处理突发事件,等到突发事件处理完毕之后,再回到原来被中断的地方,继续原来的工作,这样的整个过程称为中断。能够实现这种功能的.部件称为中断系统。产生中断请求的事件称为中断源。其中AT89C51单片机具有5个中断源,在本次设计中我们采用的是外部事情中断请求源0,以及T1计数溢出事情中断请求这两个中断源。

三、AT89C51单片机的定时/计数器介绍

在单片机中,通常计数器和定时器设计成一个部件――计数器,当计数脉冲的周期一定时,计数器就作为定时器,定时时间就是计数器计数次数和计数脉冲周期的乘积。在此我们采用的就是计数器的这个定时功能。

四、交通灯的硬件电路搭建

本次设计的硬件电路搭建如图1。两路交通灯的6个灯依次接在51单片机P1口的P1.0到P1.5,另外在单片机的P3.2口接一个按压式开关作为救护车到来时的中断源。

五、交通灯的软件编程设计

中断部分的程序设计。首先,应将51单片机中中断允许寄存器IE的EA位设为1,这代表允许中断源向CPU申请中断,即CPU开放中断。同时将IE的EX0位设为1,这代表允许外中断0向CPU申请中断。这样的话,当救护车来的时候,可以借此发出中断请求。接下来,应将定时器控制寄存器TCON的IT0位设为1,这代表外部中断0的触发方式选择为边沿触发方式。由于笔者采用了按压式的开关作为中断的发出方式,这样会产生一个脉冲,因此应当选择边沿触发方式。定时部分的程序设计。首先,应将控制寄存器TCON的TR1位置1,启动定时器T1计数。接下来,应将方式寄存器TMOD的值设为0x01,使得定时器T1工作在方式1,即16位定时/计数方式。然后,由于计时器的定时周期是1s,笔者使用定时/计数器T1精确定时50ms,则20次50ms中断时,定时时间就是1s。在定时器中断部分,笔者采用的是查询方式,即CPU不断查询TF1的状态,当TF1为1时,表示50ms定时已到,在主程序中判断是否20次50ms定时已到,如是,则时间恰好为1s。同时TF1位软件清0。根据公式,当定时时间为50ms时,计数初值应为15536,换算成十六进制是3CB0H,即计数器T1中TL1的初值为B0H;TH0的初值为3CH。当救护车到来时,双向交通灯置红,即将双向交通灯的红灯所对应的P1口位置1,其他位清0即可。时间长短的设置方法同上。最后,由于双向交通灯红灯5s,黄灯1s,绿灯5s,共11个状态,我们利用switch语句为这11个状态分别设置相应P1口的值,再利用一个循环即可。

六、结语

在机动车数量激增的今天,车辆拥堵、交通崩溃的现象还是时有发生的。其原因多半是交通灯时长设置的不合理,抑或无法根据一天之内不同时间的车流状况,对交通灯的状态进行调整。因此,合理地设计交通系统,同时对于交通灯的适当调试无疑将会派上很大用场。

很简单,你把微机原理、计算机系统看一遍就会了。

不就是控制灯的亮跟灭嘛简单得要死

51单片机流水灯毕业论文

什么样的流水灯,要实现什么效果?

流水灯也能做毕业论文吗 太简单咯

日你大爷的,这么简单的题目也做毕业设计,这么简单的毕业设计都不会做,学什么去了。百度谷歌一大堆流水灯,还跑这里丢人显眼。

单片机流水灯C语言程序的源代码如下:

#include //51系列单片机定义文件

#define uchar unsigned char //定义无符号字符

#define uint unsigned int //定义无符号整数

void delay(uint); //声明延时函数

void main(void)

{

uint i;

uchar temp;

while(1)

{

temp=0x01;

for(i=0;i<8;i++) //8个流水灯逐个闪动

{

P1=~temp;

delay(100); //调用延时函数

temp<<=1;

}

temp=0x80;

for(i=0;i<8;i++) //8个流水灯反向逐个闪动

{

P1=~temp;

delay(100); //调用延时函数

temp>>=1;

}

temp=0xFE;

for(i=0;i<8;i++) //8个流水灯依次全部点亮

{

P1=temp;

delay(100); //调用延时函数

temp<<=1;

}

temp=0x7F;

for(i=0;i<8;i++) //8个流水灯依次反向全部点亮

{

P1=temp;

delay(100); //调用延时函数

temp>>=1;

}

void delay(uint t) //定义延时函数

{

register uint bt;

for(;t;t--)

for(bt=0;bt<255;bt++);

}

扩展资料

51单片机流水灯的源代码如下

#include

#include

void delay(int a)

{

int i;

while(a--)for(i=0;i<110;i++);

}

main()

{

int i;

while(1)

{

P0=0xfe;

for(i=0;i<8;i++)

{

P0=_crol_(P0,1);

delay(500);

}

}

}

单片机交通灯论文范文

交通灯智能控制系统设计1.概述 当前,在世界范围内,一个以微电子技术,计算机和通信技术为先导的,以信息技术和信息产业为中心的信息革命方兴未艾。而计算机技术怎样与实际应用更有效的结合并有效的发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。本文主要从单片机的应用上来实现十字路口交通灯智能化的管理,用以控制过往车辆的正常运作。2.过程分析 图1是一个十字路口示意图。分别用1、2、3、4表明四个流向的主车道,用A、B、C、P分别表示各主车道的左行车道、直行车道、右行车道以及人行道。用a、b、c、p分别表示左转、直行、右转和人行道的交通信号灯,如图2所示。交通灯闪亮的过程:路口1的车直行时的所有指示灯情况为:3a3b2p绿3c红+4a4b4c 3p全红+1c 绿1a1b4p红+2c绿2a2b1p红路口2的车直行时的所有指示灯情况为:4a4b3p绿4c红+ 1a1b1c 4p全红+ 2c绿2a2b1p红+3c绿3a3b2p红故路口3的车直行时的所有指示灯情况为:1a1b4p绿1c红+ 2a2b2c 1p全红+3c绿 3a3b2p红+4c 绿4a4b3p红故路口4的车直行时的所有指示灯情况为:2a2b1p绿2c红+3c3a3b2p全红+4c绿4a4b3p红+1c绿1a1b4p红 图1:十字路口交通示意图 图2:十字路口通行顺序示意图 图3:十字路口交通指示灯示意图 图4:交通灯控制系统硬件框图 3、硬件设计 本系统硬件上采用AT89C52单片机和可编程并行接口芯片8155,分别控制图2所示的四个组合。AT89C52单片机具有MCS-51内核,片内有8KB Flash、256字节RAM、6个中断源、1个串行口、最高工作频率可达24MHz,完全可以满足本系统的需要 ;与其他控制方法相比,所用器件可以说是比较简单经济的。硬件框图如下: 电路原理图 [PDF]4、软件流程图 图5:交通灯控制系统流程图 5、交通灯控制系统软件 ORG 0000H LJMP MAIN ORG 0100HMAIN: MOV SP,#60H; LCALL DIR ;调用日期、时间显示子程序LOOP: MOV P1,#0FFH LJMP TEST LCALL ROAD1 ;路口1的车直行时各路口灯亮情况 LCALL DLY30s ;延时30秒 MOV P1,#0FFH ;恢复P1口高电平 LCALL RESET ;恢复8155各口为高电平 LCALL YELLOW1 ;路口1的车直行-->路口2的车直行黄灯亮情况 LCALL DLY5s ;延时5秒 LCALL RESET ;恢复8155各口为高电平 MOV P1,#0FFH ;恢复P1口 LCALL ROAD2 ;路口2的车直行时各路口灯亮情况 LCALL DLY30s ;延时30秒 LCALL RESET ;恢复8155A 、B口为高电? MOV P1,#0FFH ;恢复P1口高电平 LCALL YELLOW2 ;路口2的车直行-->路口3的车直行黄灯亮情况 LCALL DLY5s ;延时5秒 LCALL RESET ;恢复8155A 、B口为高电? MOV P1,#0FFH ;恢复P1口高电平 LCALL ROAD3 ;路口3的车直行时各路口灯亮情况 LCALL DLY30s ;延时30秒 LCALL RESET ;恢复8155A 、B口为高电? MOV P1,#0FFH ;恢复P1口高电平 LCALL YELLOW3 ;路口3的车直行-->路口4的车直行黄灯亮情况 LCALL DLY5s ;延时5秒 LCALL RESET ;恢复8155各口为高电平 MOV P1,#0FFH ;恢复P1口高电平 LJMP TEST LCALL ROAD4 ;路口4的车直行时各路口灯亮情况 LCALL DLY30s ;延时30秒 SETB P1.5 ;恢复P1.5高电平 SETB P1.4 ;恢复P1.4高电平 MOV DPTR,#0FFFFH ;恢复8155各口为高电平 LCALL YELLOW4 ;路口4的车直行-->路口1的车直行黄灯亮情况 LCALL DLY5s ;延时5秒 SETB P1.6 ;恢复P1.6高电平 SETB P1.3 ;恢复P1.3高电平 MOV DPTR,#0FFFFH ;恢复8155各口为高电平 LJMP LOOP;路口1的车直行时各路口灯亮情况3a3b2p绿3c红+4a4b4c3p全红+1c绿1a1b4p红+2c绿2a2b1p红ROAD1: MOV DPTR,#7F00H ;置8155命令口地址;无关位为1) MOV A,#03H ;A口、B口输出,A口、B口为基本输入输出方式 MOVX @DPTR,A ;写入工作方式控制字 INC DPTR ;指向A口 MOV A,#79H ;1a1b4p红1c绿2a2b1p红 MOVX @DPTR,A INC DPTR ;指向B口 MOV A,#0E6H ;3a3b2p绿3c红4a4b3p红 MOVX @DPTR,A MOV P1,#0DEH ;4c红2c绿 RET 6、结语 本系统结构简单,操作方便;可现自动控制,具有一定的智能性;对优化城市交通具有一定的意义。本设计将各任务进行细分包装,使各任务保持相对独立;能有效改善程序结构,便于模块化处理,使程序的可读性、可维护性和可移植性都得到进一步的提高。6、参考资料 [1]韩太林,李红,于林韬;单片机原理及应用(第3版)。电子工业出版社,2005 [2]刘乐善,欧阳星明,刘学清;微型计算机接口技术及应用。华中理工大学出版社,2003 [3]胡汉才;单片机原理及其接口技术。清华大学出版社,2000 返回首页关闭本窗口

开题报告要求不少于3000字。开题报告的主要内容和要求如下:1、说明选题的背景和研究意义。主要说明所选课题的历史背景、国内外研究现状和发展趋势。历史背景部分着重说明本课题前人研究过没有,研究的成果如何。国内外研究现状部分说明本课题目前在国内外的研究状况,介绍各种观点,比较各种观点的异同,着重说明本课题目前存在的争论焦点,说明自己的观点。发展趋势部分说明本课题目前国内外研究已经达到什么水平,还存在什么样的问题,指明研究发向,提出可能解决的方法。2、研究的基本内容和拟解决的主要问题。说明本课题研究的主要课题,研究的重点和方向,明确进一步研究的思路。3、研究方法及措施。选题不同,研究方法也往往不同。在开题报告中,学生要说明自己准备采用的研究方法。写明研究方法和措施,并给予必要的设计方案论证,争取在这些方面得到指导教师的指导或建议。4、研究工作的步骤、进度。毕业设计过程中,材料的搜集、课题的设计制作调试、论文的撰写与修改等,都要分阶段进行。在时间安排上,要充分考虑各个阶段研究内容的相互关联。对于指导教师在任务书中规定的时间安排,学生应在开题报告中给予呼应,并最后得到批准。一般实际操作时间安排要提前一些。5、主要参考文献。在开题报告中,应列出主要参考文献,表明自己已经了解所选课题的相关资料,证明课题是有理论依据的。所列出的参考文献,应有不少于2篇英文文献 (一般指英文原文参考文献) 。

1. 基于FX2N-48MRPLC的交通灯控制2. 西门子PLC控制的四层电梯毕业设计论文3. PLC电梯控制毕业论文4. 基于plc的五层电梯控制5. 松下PLC控制的五层电梯设计6. 基于PLC控制的立体车库系统设计7. PLC控制的花样喷泉8. 三菱PLC控制的花样喷泉系统9. PLC控制的抢答器设计10. 世纪星组态 PLC控制的交通灯系统11. X62W型卧式万能铣床设计12. 四路抢答器PLC控制13. PLC控制类毕业设计论文14. 铁路与公路交叉口护栏自动控制系统15. 基于PLC的机械手自动操作系统16. 三相异步电动机正反转控制17. 基于机械手分选大小球的自动控制18. 基于PLC控制的作息时间控制系统19. 变频恒压供水控制系统20. PLC在电网备用自动投入中的应用21. PLC在变电站变压器自动化中的应用22. FX2系列PCL五层电梯控制系统23. PLC控制的自动售货机毕业设计论文24. 双恒压供水西门子PLC毕业设计25. 交流变频调速PLC控制电梯系统设计毕业论文26. 基于PLC的三层电梯控制系统设计27. PLC控制自动门的课程设计28. PLC控制锅炉输煤系统29. PLC控制变频调速五层电梯系统设计30. 机械手PLC控制设计31. 基于PLC的组合机床控制系统设计32. PLC在改造z-3040型摇臂钻床中的应用33. 超高压水射流机器人切割系统电气控制设计34. PLC在数控技术中进给系统的开发中的应用35. PLC在船用牵引控制系统开发中的应用36. 智能组合秤控制系统设计37. S7-200PLC在数控车床控制系统中的应用38. 自动送料装车系统PLC控制设计39. 三菱PLC在五层电梯控制中的应用40. PLC在交流双速电梯控制系统中的应用41. PLC电梯控制毕业论文42. 基于PLC的电机故障诊断系统设计43. 欧姆龙PLC控制交通灯系统毕业论文44. PLC在配料生产线上的应用毕业论文45. 三菱PLC控制的四层电梯毕业设计论文46. 全自动洗衣机PLC控制毕业设计论文47. 工业洗衣机的PLC控制毕业论文48. 《双恒压无塔供水的PLC电气控制》49. 基于三菱PLC设计的四层电梯控制系统50. 西门子PLC交通灯毕业设计51. 自动铣床PLC控制系统毕业设计52. PLC变频调速恒压供水系统53. PLC控制的行车自动化控制系统54. 基于PLC的自动售货机的设计55. 基于PLC的气动机械手控制系统56. PLC在电梯自动化控制中的应用57. 组态控制交通灯58. PLC控制的升降横移式自动化立体车库59. PLC在电动单梁天车中的应用60. PLC在液体混合控制系统中的应用61. 基于西门子PLC控制的全自动洗衣机仿真设计62. 基于三菱PLC控制的全自动洗衣机63. 基于plc的污水处理系统64. 恒压供水系统的PLC控制设计65. 基于欧姆龙PLC的变频恒压供水系统设计66. 西门子PLC编写的花样喷泉控制程序67. 欧姆龙PLC编写的全自动洗衣机控制程序68 景观温室控制系统的设计69. 贮丝生产线PLC控制的系统70. 基于PLC的霓虹灯控制系统71. PLC在砂光机控制系统上的应用72. 磨石粉生产线控制系统的设计73. 自动药片装瓶机PLC控制设计74. 装卸料小车多方式运行的PLC控制系统设计75. PLC控制的自动罐装机系统76. 基于CPLD的可控硅中频电源77. 西门子PLC编写的花样喷泉控制程序78. 欧姆龙PLC编写的全自动洗衣机控制程序79. PLC在板式过滤器中的应用80. PLC在粮食存储物流控制系统设计中的应用81. 变频调速式疲劳试验装置控制系统设计82. 基于PLC的贮料罐控制系统83. 基于PLC的智能交通灯监控系统设计1.基于labVIEW虚拟滤波器的设计与实现2.双闭环直流调速系统设计3.单片机脉搏测量仪4.单片机控制的全自动洗衣机毕业设计论文5.FPGA电梯控制的设计与实现6.恒温箱单片机控制7.基于单片机的数字电压表8.单片机控制步进电机毕业设计论文9.函数信号发生器设计论文10.110KV变电所一次系统设计11.报警门铃设计论文12.51单片机交通灯控制13.单片机温度控制系统14.CDMA通信系统中的接入信道部分进行仿真与分析15.仓库温湿度的监测系统16.基于单片机的电子密码锁17.单片机控制交通灯系统设计18.基于DSP的IIR数字低通滤波器的设计与实现19.智能抢答器设计20.基于LabVIEW的PC机与单片机串口通信21.DSP设计的IIR数字高通滤波器22.单片机数字钟设计23.自动起闭光控窗帘毕业设计论文24.三容液位远程测控系统毕业论文25.基于Matlab的PWM波形仿真与分析26.集成功率放大电路的设计27.波形发生器、频率计和数字电压表设计28.水位遥测自控系统 毕业论文29.宽带视频放大电路的设计 毕业设计30.简易数字存储示波器设计毕业论文31.球赛计时计分器 毕业设计论文32.IIR数字滤波器的设计毕业论文33.PC机与单片机串行通信毕业论文34.基于CPLD的低频信号发生器设计毕业论文35.110kV变电站电气主接线设计36.m序列在扩频通信中的应用37.正弦信号发生器38.红外报警器设计与实现39.开关稳压电源设计40.基于MCS51单片机温度控制毕业设计论文41.步进电动机竹竿舞健身娱乐器材42.单片机控制步进电机 毕业设计论文43.单片机汽车倒车测距仪44.基于单片机的自行车测速系统设计45.水电站电气一次及发电机保护46.基于单片机的数字显示温度系统毕业设计论文47.语音电子门锁设计与实现48.工厂总降压变电所设计-毕业论文49.单片机无线抢答器设计50.基于单片机控制直流电机调速系统毕业设计论文51.单片机串行通信发射部分毕业设计论文52.基于VHDL语言PLD设计的出租车计费系统毕业设计论文53.超声波测距仪毕业设计论文54.单片机控制的数控电流源毕业设计论文55.声控报警器毕业设计论文56.基于单片机的锁相频率合成器毕业设计论文57.基于Multism/protel的数字抢答器58.单片机智能火灾报警器毕业设计论59.无线多路遥控发射接收系统设计毕业论文60.单片机对玩具小车的智能控制毕业设计论文61.数字频率计毕业设计论文62.基于单片机控制的电机交流调速毕业设计论文63.楼宇自动化--毕业设计论文64.车辆牌照图像识别算法的实现--毕业设计65.超声波测距仪--毕业设计66.工厂变电所一次侧电气设计67.电子测频仪--毕业设计68.点阵电子显示屏--毕业设计69.电子电路的电子仿真实验研究70.基于51单片机的多路温度采集控制系统71.基于单片机的数字钟设计72.小功率不间断电源(UPS)中变换器的原理与设计73.自动存包柜的设计74.空调器微电脑控制系统75.全自动洗衣机控制器76.电力线载波调制解调器毕业设计论文77.图书馆照明控制系统设计78.基于AC3的虚拟环绕声实现79.电视伴音红外转发器的设计80.多传感器障碍物检测系统的软件设计81.基于单片机的电器遥控器设计82.基于单片机的数码录音与播放系统83.单片机控制的霓虹灯控制器84.电阻炉温度控制系统85.智能温度巡检仪的研制86.保险箱遥控密码锁 毕业设计87.10KV变电所的电气部分及继电保护88.年产26000吨乙醇精馏装置设计89.卷扬机自动控制限位控制系统90.铁矿综合自动化调度系统91.磁敏传感器水位控制系统92.继电器控制两段传输带机电系统93.广告灯自动控制系统94.基于CFA的二阶滤波器设计95.霍尔传感器水位控制系统96.全自动车载饮水机97.浮球液位传感器水位控制系统98.干簧继电器水位控制系统99.电接点压力表水位控制系统100.低成本智能住宅监控系统的设计101.大型发电厂的继电保护配置102.直流操作电源监控系统的研究103.悬挂运动控制系统104.气体泄漏超声检测系统的设计105.电压无功补偿综合控制装置106.FC-TCR型无功补偿装置控制器的设计107.DSP电机调速108.150MHz频段窄带调频无线接收机109.电子体温计110.基于单片机的病床呼叫控制系统111.红外测温仪112.基于单片微型计算机的测距仪113.智能数字频率计114.基于单片微型计算机的多路室内火灾报警器115.信号发生器116.基于单片微型计算机的语音播出的作息时间控制器117.交通信号灯控制电路的设计118.基于单片机步进电机控制系统设计119.多路数据采集系统的设计120.电子万年历121.遥控式数控电源设计122.110kV降压变电所一次系统设计123.220kv变电站一次系统设计124.智能数字频率计125.信号发生器126.基于虚拟仪器的电网主要电气参数测试设计127.基于FPGA的电网基本电量数字测量系统的设计128.风力发电电能变换装置的研究与设计129.电流继电器设计130.大功率电器智能识别与用电安全控制器的设计131.交流电机型式试验及计算机软件的研究132.单片机交通灯控制系统的设计133.智能立体仓库系统的设计134.智能火灾报警监测系统135.基于单片机的多点温度检测系统136.单片机定时闹钟设计137.湿度传感器单片机检测电路制作138.智能小车自动寻址设计--小车悬挂运动控制系统139.探讨未来通信技术的发展趋势140.音频多重混响设计141.单片机呼叫系统的设计142.基于FPGA和锁相环4046实现波形发生器143.基于FPGA的数字通信系统144.基于单片机的带智能自动化的红外遥控小车145.基于单片机AT89C51的语音温度计的设计146.智能楼宇设计147.移动电话接收机功能电路148.单片机演奏音乐歌曲装置的设计149.单片机电铃系统设计150.智能电子密码锁设计151.八路智能抢答器设计152.组态控制抢答器系统设计153.组态控制皮带运输机系统设计154..基于单片机控制音乐门铃155.基于单片机控制文字的显示156.基于单片机控制发生的数字音乐盒157.基于单片机控制动态扫描文字显示系统的设计158.基于LMS自适应滤波器的MATLAB实现159.D功率放大器毕业论文160.无线射频识别系统发射接收硬件电路的设计161.基于单片机PIC16F877的环境监测系统的设计162.基于ADE7758的电能监测系统的设计163.智能电话报警器164.数字频率计 课程设计165.多功能数字钟电路设计 课程设计166.基于VHDL数字频率计的设计与仿真167.基于单片机控制的电子秤168.基于单片机的智能电子负载系统设计169.电压比较器的模拟与仿真170.脉冲变压器设计171.MATLAB仿真技术及应用172.基于单片机的水温控制系统173.基于FPGA和单片机的多功能等精度频率计174.发电机-变压器组中微型机保护系统175.基于单片机的鸡雏恒温孵化器的设计176.数字温度计的设计177.生产流水线产品产量统计显示系统178.水位报警显时控制系统的设计179.红外遥控电子密码锁的设计180.基于MCU温控智能风扇控制系统的设计181.数字电容测量仪的设计182.基于单片机的遥控器的设计183.200电话卡代拨器的设计184.数字式心电信号发生器硬件设计及波形输出实现185.电压稳定毕业设计论文186.基于DSP的短波通信系统设计(IIR设计)187.一氧化碳报警器188.网络视频监控系统的设计189.全氢罩式退火炉温度控制系统190.通用串行总线数据采集卡的设计191.单片机控制单闭环直流电动机的调速控制系统192.单片机电加热炉温度控制系统193.单片机大型建筑火灾监控系统194.USB接口设备驱动程序的框架设计195.基于Matlab的多频率FMICW的信号分离及时延信息提取196.正弦信号发生器197.小功率UPS系统设计198.全数字控制SPWM单相变频器199.点阵式汉字电子显示屏的设计与制作200.基于AT89C51的路灯控制系统设计200.基于AT89C51的路灯控制系统设计201.基于AT89C51的宽范围高精度的电机转速测量系统202.开关电源设计203.基于PDIUSBD12和K9F2808简易USB闪存设计204.微型机控制一体化监控系统205.直流电机试验自动采集与控制系统的设计206.新型自动装弹机控制系统的研究与开发207.交流异步电机试验自动采集与控制系统的设计208.转速闭环控制的直流调速系统的仿真与设计209.基于单片机的数字直流调速系统设计210.多功能频率计的设计211.18信息移频信号的频谱分析和识别212.集散管理系统—终端设计213.基于MATLAB的数字滤波器优化设计214.基于AT89C51SND1C的MP3播放器215.基于光纤的汽车CAN总线研究216.汽车倒车雷达217.基于DSP的电机控制218.超媒体技术219.数字电子钟的设计与制作220.温度报警器的电路设计与制作221.数字电子钟的电路设计222.鸡舍电子智能补光器的设计223.高精度超声波传感器信号调理电路的设计224.电子密码锁的电路设计与制作225.单片机控制电梯系统的设计226.常用电器维修方法综述227.控制式智能计热表的设计228.电子指南针设计229.汽车防撞主控系统设计230.单片机的智能电源管理系统231.电力电子技术在绿色照明电路中的应用232.电气火灾自动保护型断路器的设计233.基于单片机的多功能智能小车设计234.对漏电保护器安全性能的剖析235.解析民用建筑的应急照明236.电力拖动控制系统设计237.低频功率放大器设计238.银行自动报警系统

别人是拿RMB换的呀

急救车与交通灯单片机论文

题目 交通灯控制系统的设计 一、课程设计的目的与要求 1、课程设计目的: (1)进一步理解和消化书本知识,运用所学知识和技能进行简单的设计。 (2)通过课程设计提高应用能力,分析问题和解决问题的能力。 (3)培养查阅资料的习惯,训练和提高自学,独立思考的能力。 2、课程设计要求 交通灯控制系统的设计 1) 掌握在单片机系统中扩展简单I/O接口的方法。 2) 掌握数据输出程序的设计方法。 3) 掌握模拟交通灯控制的实现方法。 4) 掌握外部中断技术的基本使用方法。 5) 掌握中断处理程序的编程方法。 从课程设计的目的出发,通过设计工作的各个环节,达到以下要求: (1)能够正确理解课程设计的题目和意义,全面思考问题。 (2)运用科学合理的方法,认真按时完成。 二、课程设计课题的分析 1、电路的设计 1)原理 要完成本实验,首先必须了解交通灯的亮灭规律。本实验需要用到试验箱上八个发光二极管中的六个,即红、绿、黄各两个。将L1(红)、L2(绿)、L3(黄)作为东西方向的指示灯,将L5(红)、L6(绿)、L7(黄)作为南北方向的指示灯。交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后,东西路口绿灯灭,黄灯开始闪烁。闪烁若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。闪烁若干次后,再切换到东西路口方向,重复上述过程。 各发光二极管的阳极通过保护电阻接到+5V的电源上,阴极接到输入端上,因此使其点亮使相应使相应输入端为低电平。 当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假设急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。本程序以单次脉冲为中断申请,表示有急救车通过,单次脉冲输出端P-接CPU板上的INT0。 2)、硬件电路图 图1—1 交通灯控制系统的硬件接线图 74LS273的输出00—07接发光二极管L1—L8,74LS273的片选CS273接片选信号CS2,此时74LS273的片选地址为CFA0—CFA7之间任选。 3)、程序流程图 主程序流程 图1—2 主程序软件流程图 中断程序流程图 三、课程设计的结果 1、程序 NAME JIAOTONGGENG OUTPORT EQU 0CFB0H ;端口地址 SAVE EQU 55H ;SAVE保存从端口CFA0输出的数据 CSEG AT 0000H LJMP START CSEG AT 4003H LJMP INT CSEG AT 4100H START: SETB IT0 ;中断程序初始化 SETB EX0 SETB EA MOV A,#11H ;置首显示码,两红灯全亮 MOV SAVE,A ;保存 ACALL DISP ;显示输出 ACALL DE3S ;延时3秒 LLL: MOV A,#12H ;东西路口绿灯亮,南北路口红灯亮 MOV SAVE,A ACALL DISP ACALL DE10S ;延时10秒 MOV A,#10H ;东西路口绿灯灭 MOV SAVE,A ACALL DISP MOV R2,#05H ;东西路口黄灯闪烁5次 TTT: MOV A,#14H MOV SAVE,A ACALL DISP ACALL DE02S ;延时0.2秒 MOV A,#10H MOV SAVE,A ACALL DISP ACALL DE02S DJNZ R2,TTT MOV A,#11H ;红灯全亮 MOV SAVE,A ACALL DISP ACALL DE02S ;延时0.2秒 MOV A,#21H ;东西路口红灯亮,南北路口绿灯亮 MOV SAVE,A ACALL DISP ACALL DE10S ;延时10秒 MOV A,#01H ;南北路口绿灯灭 MOV SAVE,A ACALL DISP MOV R2,#05H ;南北路口黄灯闪烁5次 KKK: MOV A,#41H MOV SAVE,A ACALL DISP ACALL DE02S ;延时0.2秒 MOV A,#01H MOV SAVE,A ACALL DISP ACALL DE02S DJNZ R2,KKK JMP LLL ;转SSS循环 DE10S: MOV R5,#100 ;延时10秒 JMP DE1 DE3S: MOV R5,#30 ;延时3秒 JMP DE1 DE02S: MOV R5,#02 ;延时0.2秒 DE1: MOV R6,#200 DE2: MOV R7,#126 DE3: DJNZ R7,DE3 DJNZ R6,DE2 DJNZ R5,DE1 RET DISP: MOV DPTR,#OUTPORT CPL A ;取反,点亮发光二极管 MOVX @DPTR,A RET ;中断处理程序 INT: PUSH ACC ;有关寄存器入栈 PUSH PSW MOV A,#11H ;两红灯全亮 ACALL DISP ACALL DELAY MOV A,SAVE ;将主程序中保存的数据再送给A ACALL DISP POP PSW ;有关寄存器出栈 POP ACC RETI DELAY:MOV R1,#100 DEL1 :MOV R2,#200 DEL2 :MOV R3,#126 DEL3 :DJNZ R3,DEL3 DJNZ R2,DEL2 DJNZ R1,DEL1 RET END 2、现象 将程序输入到单片机中,运行程序,可以观察到现象:首先是两个路口的红灯全亮,延时3秒之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时10秒后,东西路口绿灯灭,黄灯开始闪烁。闪烁5次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时10秒后,南北路口的绿灯灭,黄灯开始闪烁。闪烁5次后,再切换到东西路口方向,重复上述过程。 当有中断申请时,两个方向上的红灯亮,经过10秒急救车通过之后,恢复到急救车到来之前的状态继续运行,可有多次的中断申请。 四、课程设计的心得与体会 1.通过试验进一步理解和消化了书本知识,分析每个语句的含义,运用所学知识进行简单的程序设计。 了解了在单片机系统中扩展简单I/O接口的方法. 外部中断技术的基本使用方法,掌握了中断处理程序的编程方法。 2.通过在图书馆查阅各种单片机资料,培养了我自学和独立思考的能力。与同学交流研究,让我懂得了更多以前不明白的知识. 3.在课程设计过程中,不断调试程序和修改程序,提高了对单片机的应用能力,分析问题和解决问题的能力。

ORG 0000HLJMP STARSTAR:MOV P1,#00HMOV P0,#0FFHMOV P3,#00Hsetb p1.6L1:CLR P1.7JB P1.0 , WAN ;;判断方式转换;;MOV P3,#00H ;;P3口清零SETB P3.2 ;;主干绿灯SETB P3.3 ;;次道红灯MOV 31H,#03CH ;;付初值60秒MOV R4,#03CHL2 :CALL DIS1 ;;调用显示CALL YSclr p1.6DEC R4 ;;减一DJNZ 31H,L2 ;;判断是否计数完成CLR P3.2 ;;主黄灯亮CLR P3.3SETB P3.1mov 32H,#05HMOV R4 ,#05HL3:setb p3.3CALL DIS1 ;;调用显示CALL YSDEC R4CLR p3.3DJNZ 32H,L3CLR P3.1CLR P3.4SETB P3.0SETB P3.5mov 33H ,#020H ;;主干红灯 次道绿灯20秒MOV R4,#02DHsetb p1.6L4 :CALL DIS1CALL YSclr p1.6DEC R4DJNZ 33H,L4CLR P3.2 ;;次道黄灯亮5秒钟CLR P3.5setb p3.4mov 34h,#05hMOV R4 ,#05HL8:setb p3.0CALL DIS1CALL YSclr p3.0CALL DIS1CALL YSsetb p3.0clr p3.0DEC R4DJNZ 34H,L8LJMP L1RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wan:SETB P1.7JB P1.0 , L1 ;;判断方式转换MOV P3,#00H ;;P3口清零SETB P3.2 ;;主干绿灯SETB P3.3 ;;次道红灯MOV 31H,#040D ;;付初值60秒MOV R4,#040DL12 :CALL DIS1 ;;调用显示CALL YSDEC R4 ;;减一DJNZ 31H,L12 ;;判断是否计数完成CLR P3.2 ;;主黄灯亮CLR P3.3SETB P3.1mov 32H,#05HMOV R4 ,#05HL13: CALL DIS1CALL YSsetb p3.3CALL DIS1CALL YSDEC R4CLR p3.3DJNZ 32H,L13CLR P3.1CLR P3.4SETB P3.0SETB P3.5mov 33H ,#010H ;;主干红灯 次道绿灯20秒MOV R4,#010HL14 :CALL DIS1CALL YSCALL DIS1DEC R4DJNZ 33H,L14CLR P3.2 ;;次道黄灯亮5秒钟CLR P3.5setb p3.4mov 34h,#05hMOV R4 ,#05HL18:setb p3.0CALL DIS1CALL YSclr p3.0CALL DIS1CALL YSsetb p3.0clr p3.0DEC R4DJNZ 34H,L18LJMP WANRET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YS: MOV 72H,#80DLOOP3:MOV 71H,#100DLOOP1:MOV 70H,#22DLOOP0:DJNZ 70H,LOOP0DJNZ 71H,LOOP1MOV 70H,#46DLOOP2:DJNZ 70H,LOOP2DJNZ 72H,LOOP3MOV 70H,#48DLOOP4:DJNZ 70H,LOOP4RETDis1: mov A,r4mov B,#10Ddiv ABlcall SEG7CLR P2.0mov P0,Alcall DLYmov A,Blcall SEG7SETB P2.0mov P0,Alcall DLYRETSEG7: MOV DPTR,#TABmovc A,@A+DPTRRETTAB:DB 03FH,006H,05BH,04FH,066HDB 06DH,07DH,007H, 07FH,06FhDLY:mov R7,#2DD1: mov R6,#249DDJNZ R6,$DJNZ R7,D1RET

楼主这个设计应该是单片机入门的基本设计,先让程序进入一个大循环,用定时器定时20秒,每20秒触发一次LED灯闪烁移位,每个路口的灯在自己的小循环内部,按键表示救护车就用外部中断,所以资料只用看一本单片机的教材就可以了。而且基本没什么外围电路,如果LED灯接P0口记得加上拉电阻定时器和中断用C语言写的话格式应该是void timer0() interrupt 0 (0-4是分别对应的,不能对错了){}自己动手做一下,可以算单片机初级入门了

单片机交通灯毕业设计

在日常生活中,交通灯是一项必不可少的公共设施,可以维护道路的畅通和交通的秩序。如若交通灯发生故障,那么后果可想而知。因此,交通灯的正常工作就显得尤为重要。由于交通灯对于公共安全的重要性,本文基于51单片机模拟双向交通灯的设计。下面是我整理的单片机交通灯毕业设计,欢迎来参考!

一、交通灯的设计要求

双向交通灯红、黄、绿灯对应相同,红灯5s,黄灯1s,绿灯5s。当有急救车到达时,双向交通信号为全红,以便让急救车通过。假定急救车通过路口时间为10s,急救车通过后,交通灯恢复中断前状态。

二、AT89C51单片机的中断系统介绍

计算机系统中止当前的正常工作,转入处理突发事件,等到突发事件处理完毕之后,再回到原来被中断的地方,继续原来的工作,这样的整个过程称为中断。能够实现这种功能的.部件称为中断系统。产生中断请求的事件称为中断源。其中AT89C51单片机具有5个中断源,在本次设计中我们采用的是外部事情中断请求源0,以及T1计数溢出事情中断请求这两个中断源。

三、AT89C51单片机的定时/计数器介绍

在单片机中,通常计数器和定时器设计成一个部件――计数器,当计数脉冲的周期一定时,计数器就作为定时器,定时时间就是计数器计数次数和计数脉冲周期的乘积。在此我们采用的就是计数器的这个定时功能。

四、交通灯的硬件电路搭建

本次设计的硬件电路搭建如图1。两路交通灯的6个灯依次接在51单片机P1口的P1.0到P1.5,另外在单片机的P3.2口接一个按压式开关作为救护车到来时的中断源。

五、交通灯的软件编程设计

中断部分的程序设计。首先,应将51单片机中中断允许寄存器IE的EA位设为1,这代表允许中断源向CPU申请中断,即CPU开放中断。同时将IE的EX0位设为1,这代表允许外中断0向CPU申请中断。这样的话,当救护车来的时候,可以借此发出中断请求。接下来,应将定时器控制寄存器TCON的IT0位设为1,这代表外部中断0的触发方式选择为边沿触发方式。由于笔者采用了按压式的开关作为中断的发出方式,这样会产生一个脉冲,因此应当选择边沿触发方式。定时部分的程序设计。首先,应将控制寄存器TCON的TR1位置1,启动定时器T1计数。接下来,应将方式寄存器TMOD的值设为0x01,使得定时器T1工作在方式1,即16位定时/计数方式。然后,由于计时器的定时周期是1s,笔者使用定时/计数器T1精确定时50ms,则20次50ms中断时,定时时间就是1s。在定时器中断部分,笔者采用的是查询方式,即CPU不断查询TF1的状态,当TF1为1时,表示50ms定时已到,在主程序中判断是否20次50ms定时已到,如是,则时间恰好为1s。同时TF1位软件清0。根据公式,当定时时间为50ms时,计数初值应为15536,换算成十六进制是3CB0H,即计数器T1中TL1的初值为B0H;TH0的初值为3CH。当救护车到来时,双向交通灯置红,即将双向交通灯的红灯所对应的P1口位置1,其他位清0即可。时间长短的设置方法同上。最后,由于双向交通灯红灯5s,黄灯1s,绿灯5s,共11个状态,我们利用switch语句为这11个状态分别设置相应P1口的值,再利用一个循环即可。

六、结语

在机动车数量激增的今天,车辆拥堵、交通崩溃的现象还是时有发生的。其原因多半是交通灯时长设置的不合理,抑或无法根据一天之内不同时间的车流状况,对交通灯的状态进行调整。因此,合理地设计交通系统,同时对于交通灯的适当调试无疑将会派上很大用场。

51单片机计算器毕业论文

1、硬件仿真图

硬件部分比较简单,当键盘按键按下时它的那一行、那一列的端口为低电平。因此,只要扫描行、列端口是否都为低电平就可以确定是哪个键被按下。

2、主程序流程图

程序的主要思想是:将按键抽象为字符,然后就是对字符的处理。将操作数分别转化为字符串存储,操作符存储为字符形式。然后调用compute()函数进行计算并返回结果。具体程序及看注释还有流程图。

3、Altium Designer画的PCB图

4、程序源代码

#include #include

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar operand1[9], operand2[9];

uchar operator;

void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

uint compute(uint va1,uint va2,uchar optor);

uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,

0x92,0x82,0xf8,0x80,0x90,0xff};

uchar dbuf[8] = {10,10,10,10,10,10,10,10};

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

uchar keyscan()

{

uchar skey;

P1 = 0xfe;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xee: skey = '7'; break;

case 0xde: skey = '8'; break;

case 0xbe: skey = '9'; break;

case 0x7e: skey = '/'; break;

default:   skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

P1 = 0xfd;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xed: skey = '4'; break;

case 0xdd: skey = '5'; break;

case 0xbd: skey = '6'; break;

case 0x7d: skey = '*'; break;

default:   skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

P1 = 0xfb;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xeb: skey = '1'; break;

case 0xdb: skey = '2'; break;

case 0xbb: skey = '3'; break;

case 0x7b: skey = '-'; break;

default: skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

P1 = 0xf7;

while((P1 & 0xf0) != 0xf0)

{

delay(3);

while((P1 & 0xf0) != 0xf0)

{

switch(P1)

{

case 0xe7: skey = '$'; break;

case 0xd7: skey = '0'; break;

case 0xb7: skey = '='; break;

case 0x77: skey = '+'; break;

default:   skey = '#';

}

while((P1 & 0xf0) != 0xf0)

;

}

}

return skey;

}

void main()

{

uint value1, value2, value;

uchar ckey, cut1 = 0, cut2 = 0;

uchar operator;

uchar i, bool = 0;

init:

buf(0);

disp();

value = 0;

cut1 = cut2 = 0;

bool = 0;

for(i = 0;i < 9;i++)

{

operand1[i] = '\0';

operand2[i] = '\0';

}

while(1)

{

ckey = keyscan();

if(ckey != '#')

{

if(isdigit(ckey))

{

switch(bool)

{

case 0:

operand1[cut1] = ckey;

operand1[cut1+1] = '\0';

value1 = atoi(operand1);

cut1++;

buf(value1);

disp();

break;

case 1:

operand2[cut2] = ckey;

operand2[cut2+1] = '\0';

value2 = atoi(operand2);

cut2++;

buf(value2);

disp();

break;

default: break;

}

}

else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/')

{

bool = 1;

operator = ckey;

buf(0);

dbuf[7] = 10;

disp();

}

else if(ckey == '=')

{

value = compute(value1,value2,operator);

buf(value);

disp();

while(1)

{

ckey = keyscan();

if(ckey == '$')

goto init;

else

{

buf(value);

disp();

}

}

}

else if(ckey == '$')

{    goto init;}

}

disp();

}

}

uint compute(uint va1,uint va2,uchar optor)

{

uint value;

switch(optor)

{

case '+' : value = va1+va2;    break;

case '-' : value = va1-va2;    break;

case '*' : value = va1*va2;    break;

case '/' : value = va1/va2;    break;

default :  break;

}

return value;

}

void buf(uint val)

{

uchar i;

if(val == 0)

{

dbuf[7] = 0;

i = 6;

}

else

for(i = 7; val > 0; i--)

{

dbuf[i] = val % 10;

val /= 10;

}

for( ; i > 0; i--)

dbuf[i] = 10;

}

void disp(void)

{

uchar bsel, n;

bsel=0x01;

for(n=0;n<8;n++)

{

P2=bsel;

P0=table[dbuf[n]];

bsel=_crol_(bsel,1);

delay(3);

P0=0xff;

}

}

扩展资料:

PROTEUS 是单片机课堂教学的先进助手

PROTEUS不仅可将许多单片机实例功能形象化,也可将许多单片机实例运行过程形象化。前者可在相当程度上得到实物演示实验的效果,后者则是实物演示实验难以达到的效果。

它的元器件、连接线路等却和传统的单片机实验硬件高度对应。这在相当程度上替代了传统的单片机实验教学的功能,例:元器件选择、电路连接、电路检测、电路修改、软件调试、运行结果等。

课程设计、毕业设计是学生走向就业的重要实践环节。由于PROTEUS提供了实验室无法相比的大量的元器件库,提供了修改电路设计的灵活性、提供了实验室在数量、质量上难以相比的虚拟仪器、仪表,因而也提供了培养学生实践精神、创造精神的平台

随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程的统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。相信在单片机开发应用中PROTEUS也能茯得愈来愈广泛的应用。

使用Proteus 软件进行单片机系统仿真设计,是虚拟仿真技术和计算机多媒体技术相结合的综合运用,有利于培养学生的电路设计能力及仿真软件的操作能力;

在单片机课程设计和全国大学生电子设计竞赛中,我们使用 Proteus 开发环境对学生进行培训,在不需要硬件投入的条件下,学生普遍反映,对单片机的学习比单纯学习书本知识更容易接受,更容易提高。

实践证明,在使用 Proteus 进行系统仿真开发成功之后再进行实际制作,能极大提高单片机系统设计效率。因此,Proteus 有较高的推广利用价值。

参考资料来源:百度百科-protues

刚做过,发给你参考下

这是原理图

51单片机简易计算器程序:

#include 

#include 

#define uchar unsigned char

#define uint unsigned int

//---------定义引脚--------------------

bit clr=0;

bit ok=0;

bit xiaoshu=0;

bit jiego=0;

bit first_1=1;

bit first_2=1;

sbit dout = P3^2;

sbit load = P2^0;

sbit din  = P2^1;

sbit dclk = P2^2;

sbit beer=P0^1;

sbit LCD1602_RS=P2^3;

sbit LCD1602_RW=P2^4;

sbit LCD1602_E=P2^5;

//---------定义变量--------------------

uchar ch451_key=0xff;

uchar yun_sign;

uchar xiabiao=0;

uchar tab[32];

uchar tab1[]={"welcome to use!"};

uchar tab2[]={" make by JunRu!"};

uchar tab3[]={"ERR0R"};

float opr_1=0,opr_temp=0,end=0,a;

//---------声明函数--------------------

void ch451_init(void);     //CH451初始化

void ch451_write(uint  command);//写命令或数据到ch451

uchar ch451_read(void);        //读按键值

uchar get_char(void);

void LCD_init(void);//初始化;

void delay(unsigned int k);//延时程序

void LCD_inter_command(unsigned char command);//写入控制字

void LCD_inter_dat(unsigned char dat);//写入要显示的数据

void set_xy(unsigned char x,unsigned char y);//找地址

void write(unsigned char date);//写入字符

void lcdbusy();//查忙时

void display(void);

void spec(void);

void get_end(void);

void hun_he(uchar n);

//-------- 主函数----------------------

void main()

{

uchar i;

LCD_init();//LCD初始化;

ch451_init();//CH451初始化

EA = 1;//打开中断

LCD_inter_command(0x01);//清屏

for(i=0;i<=14;i++)

{

LCD_inter_dat(tab1[i]);

beer=0;

delay(4000);//延时

beer=1;

}

LCD_inter_command(0xc0);//从第二行开始显示

for(i=0;i<=14;i++)

{

LCD_inter_dat(tab2[i]);

beer=0;

delay(4000);//延时

beer=1;

}

delay(0xffff);

delay(0xffff);

LCD_inter_command(0x01);

while(1)

{

if(ok)

{

display();

ok=0;clr=1;

}

}

}

//----------子函数--------------------

void hun_he(uchar n)

{int j;

switch(n)

{

case '+':opr_temp=opr_temp+opr_1;break;

case '-':opr_temp=opr_temp-opr_1;break;

case '*':opr_temp=opr_temp*opr_1;break;

case '/':

{

if(a==0)//减数为零显错

{ LCD_inter_command(0xc0);

for(j=0;j<=4;j++)

{

LCD_inter_dat(tab3[j]);

beer=0;

delay(4000);//延时

beer=1;

}

}

else

{opr_temp=opr_temp/opr_1;}

break;

}

default:break;}

}

void ch451_init(void)//CH451初始化

{

EX0 = 1;

din = 0;

din = 1;

ch451_write(0x403);   //开显示

ch451_write(0x580);   //BCD译码方式

}

void ch451_write(uint  command)//写命令或数据到ch451

{  uchar i;

EX0 = 0;

load = 0;

for(i=0;i<12;i++)

{

din = command&1;

dclk = 0;

command>>=1;

dclk = 1;

}

load = 1;

EX0 = 1;

}

uchar ch451_read(void)//读按键值

{ uchar key=0x07;

uchar i;

EX0=0;

load = 0;

for(i=0;i<4;i++)        //将0111读入

{

din = key &1;

dclk = 0;

key>>=1;

dclk =1;

}

load = 1;

key = 0;

for(i=0;i<7;i++)         //从CH451读出按键值

{

key<<=1;

key|= dout;

dclk =0;

dclk =1;

}

EX0 =1;

return key;

}

void EX0_ISR(void)interrupt 0 //中断程序

{

uchar temp;

ch451_key=ch451_read(); //将读出的按键值赋给变量

spec();

if(clr) {LCD_inter_command(0x01);clr=0;}

temp=get_char();

if(temp){tab[xiabiao++]=temp; LCD_inter_dat(temp);}

if(xiabiao>=16)LCD_inter_command(0xc0);//若大于16,则从第2行开始显示

if(ok) get_end();

beer=0;

delay(3000);

beer=1;

}

uchar get_char(void)

{

uchar dis=0;

uint temp=0,temp1=0;

switch(ch451_key)

{

case 0x40:dis='1';break;

case 0x41:dis='2';break;

case 0x42:dis='3';break;

case 0x48:dis='4';break;

case 0x49:dis='5';break;

case 0x4A:dis='6';break;

case 0x50:dis='7';break;

case 0x51:dis='8';break;

case 0x52:dis='9';break;

case 0x58:dis='0';break;

case 0x43:dis='+';break;

case 0x4B:dis='-';break;

case 0x53:dis='x';break;

case 0x5B:dis='/';break;

case 0x44:dis='!';break;

case 0x5A:dis='=';

ok=1;                      //遇到“=”,开始运算

break;

case 0x59:dis='.';break;     //小数点

case 0x5C:                    //删除键

LCD_inter_command(0x01);

xiabiao=0;

break;

default: break;

}

return dis;

}

void spec(void)                   //特殊功能键

{

switch(ch451_key)

{

case 0x4C:LCD_inter_command(0x10);{if(xiabiao>0)xiabiao-=1;}break; //左移

case 0x54:LCD_inter_command(0x14);{xiabiao+=1;}break;  //右移

default:break;

}

}

void delay(unsigned int k)//延时程序

{

while (k--);

}

void LCD_inter_command(unsigned char command)//写入控制字

{

delay(5000);

LCD1602_RS=0;

LCD1602_RW=0;

LCD1602_E=1;

P1=command;

LCD1602_E=0;

lcdbusy();

}

void LCD_init(void)//初始化;

{delay(5000);

LCD_inter_command(0x01);//清屏

delay(5000);

LCD_inter_command(0x38);//设置为8位的数据接口,两行显示,5、7点字符

delay(5000);

LCD_inter_command(0x0E);//显示打开,光标开并闪烁

delay(5000);

}

void LCD_inter_dat(unsigned char dat)//写入要显示的数据

{

delay(5000);

LCD1602_RS=1;

LCD1602_RW=0;

LCD1602_E=1;

P1=dat;

LCD1602_E=0;

lcdbusy();

}

void lcdbusy()//查忙

{

P1=0xFF;

LCD1602_RS=0;

LCD1602_RW=1;

LCD1602_E=1;

while((P1&0x80)==1);

}

void display(void)            //转化在LCD上显示计算结果

{

int temp=end;  //浮点数

int i;

uint xiao_temp;

uint xx; //浮点数的整数部分

if (end>-32769&&end<32768)

{

xx=fabs(end);

xiao_temp=(fabs(end)-xx)*1000;//取出浮点数的小数部分

LCD_inter_command(0xc0);

if(end<0) LCD_inter_dat('-');beer=0;delay(4000); beer=1;//判断是否为负数,若是则显示负号

if(xx>9999) LCD_inter_dat((xx/10000)%10+'0'); beer=0;delay(4000);beer=1;

if(xx>999) LCD_inter_dat((xx/1000)%10+'0');beer=0;delay(4000);beer=1; //在LCD上显示千位的数

if(xx>99)LCD_inter_dat((xx/100)%10+'0');  beer=0;delay(4000);beer=1;//百位

if(xx>9)LCD_inter_dat((xx/10)%10+'0');beer=0;delay(4000); beer=1;//十位

LCD_inter_dat(xx%10+'0');beer=0;delay(4000); beer=1;//个位

if(xiao_temp!=0)  //显示小数部分

{

LCD_inter_dat('.');beer=0;delay(4000);beer=1;

LCD_inter_dat((xiao_temp/100)%10+'0');beer=0;delay(4000);beer=1;

LCD_inter_dat((xiao_temp/10)%10+'0');beer=0;delay(4000);beer=1;

LCD_inter_dat(xiao_temp%10+'0');beer=0;delay(4000);beer=1;

}

}

else {LCD_inter_command(0xc0);//从第二行开始显示

for(i=0;i<=4;i++)

{   LCD_inter_dat(tab3[i]);

beer=0;

delay(4000);//延时

beer=1;

}

}

}

void get_end(void)//计算子程序

{ float xiaoshu=1;

uchar fu_flag=0;

uchar xiao_flag=0;

uchar lianji_sign;

uchar i=0;

uchar j;

uchar n;//正负标记符

while(i<=xiabiao)

{

while(tab[i]<=0x39&&tab[i]>=0x30)

{

n=0;

opr_1*=10;

opr_1+=tab[i++]-0x30;

n='+';

}

switch(tab[i])

{

case '.':  xiao_flag=1;break;//遇到小数点跳到“if(xiao_flag)”里

case '!':  fu_flag=1;break;

case '+':  xiaoshu=1;yun_sign='+';if(opr_temp==0){end=opr_temp=opr_1;}else hun_he(lianji_sign);opr_1=0;lianji_sign='+'; break;

case '-':  xiaoshu=1;yun_sign='-';if(opr_temp==0){end=opr_temp=opr_1;}else hun_he(lianji_sign);opr_1=0;lianji_sign='-'; break;

case 'x':  xiaoshu=1;yun_sign='x';if(opr_temp==0){end=opr_temp=opr_1;}else hun_he(lianji_sign);opr_1=0;lianji_sign='*';break;

case '/':  xiaoshu=1;yun_sign='/';if(opr_temp==0){end=opr_temp=opr_1;}else hun_he(lianji_sign);a=opr_1;opr_1=0;lianji_sign='/';break;

case '=':

switch(yun_sign)//进行运算

{

case '+':end=opr_temp+opr_1;break;

case '-':end=opr_temp-opr_1;break;

case 'x':end=opr_temp*opr_1;break;

case '/':{

if(a==0)//减数为零显错

{ LCD_inter_command(0xc0);

for(j=0;j<=4;j++)

{

LCD_inter_dat(tab3[j]);

beer=0;

delay(4000);//延时

beer=1;

}

}

else

{end=opr_temp/opr_1;}

break;

}

default:break;

}

ok=1;//开始进行显示,标志位置1

xiabiao=0;//小数的标志位清零

break;

default:break;

}

i++;

if(xiao_flag)//表示小数

{

while(tab[i]<=0x39&&tab[i]>=0x30)

{

xiaoshu*=0.1;

switch(n)

{

case '+': opr_1=opr_1+(tab[i++]-0x30)*xiaoshu;break;

case '-':  opr_1=opr_1-(tab[i++]-0x30)*xiaoshu; break ;

default:break; }

xiao_flag=0;

}

}

if(fu_flag)

{

while(tab[i]<=0x39&&tab[i]>=0x30)

{

n=0;

opr_1=-opr_1*10;

opr_1=-(opr_1+(tab[i++]-0x30));

n='-';

fu_flag=0;

}

}

}

opr_1=0;

opr_temp=0;

xiabiao=0;

xiaoshu=1;

}

1、首先第一步就是要进行查找元器件并放入到原理图中,如下图所示。

2、接着就是要进行原理图连接根据网络标签的方式即可。

3、然后就是要进行编写程序,

程序源代码

#include #include

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar operand1[9], operand2[9];

uchar operator;

void delay(uint);

uchar keyscan();

void disp(void);

void buf(uint value);

4、最后一步就是进行验证正确后编译程序在protues中加载HEX观察仿真结果是否正确,如下图所示。

一、毕业设计题目及要求 (2个) 1、基于单片机控制的电动机Y-△启动的设计 要求:1)控制器为单片机,电动机为三相异步电动机;2)启动时间为3秒;3)由按键设置电动机Y-△运行、停止。 2、基于单片机控制的可调直流稳压电源的设计 要求:1)控制器为单片机,电压输出范围为0-10V,电压精度为0.1V;2)通过数码管显示电压值;3)由按键设置电压值。 二、毕业设计用到的主要软件(及功能) 毕业设计用到的主要软件(及功能):Keil 51(源程序编译),Proteus(电路仿真),AutoCAD(绘图), Visio(绘流程图), Protel 99SE(原理图电路设计,PCB板制作) 三、单片机方面毕业设计要求 1、学会编写程序(用C语言或汇编语言),用Keil 51软件对源程序进行编译。 2、学会用Proteus电路仿真软件对所设计的硬件电路进行仿真。 3、在写毕业论文时,学会用Word、AutoCAD, Visio,Protel 99SE等软件对程序流程图、电路原理图等进行绘制。 相关答案 ↓位朋友,以51单片机为例。51现在很多都是用仿真器来进行在线调试的,而每个公司的仿真器都会有自带的编程软件,当然,跟keil是差不了多少的。 步骤大体如下: 1.新建,进行程序的编写 2.连上仿真器或烧写器,这一步有可能要对仿真器或烧写器进行设置,具体可看它们的使用说明 3.对程序进行编译,这一步会自动检测你的程序有没错,如果有错,是不能进入下一步的.如果你用的是仿真器,这一步编译成功后就可以直接运行进行在线调试了。 4.如果用的是烧写器,那就进行烧写 各个软件和调试方法会有些不同,但大体就是这样,一些调试工具的说明书也有很详细的说明。 学参数测量技术涉及范围广,特别是微电压、微电流、高电压以及待测信号强弱相差极大的情况下,既要保证弱信号的测量精度又要兼顾强信号的测量范围,在技术上有一定的难度。传统的低成本仪表在测量电压、电阻时都采用手动选择档位的方法来转换量程。在使用中,当忘记转换档位时,会造成仪表测量精度下降或损坏。 现代电子测量对系统的精度要求越来越高且智能化程度也越来越高。全量程无档自动量程转换电压表和电阻表是在保证测量精度不下降的前提条件下省去手动转换量程的工作,得到了广泛应用。 本文介绍了一种基于AT89S52 单片机 的智能多用表。该表能在单片机的控制下完成直流电压、电阻和直流电流的测量。测量电流部分采用了简单的I/V转换电路完成测试;测量电压部分结合模拟开关CD4051和运算放大器OP07构成程控放大器,实现了自动量程转换;测量电阻部分也由模拟开关CD4051和运算放大器OP07相结合,在单片机控制下完成了自动量程转换。电流、电压和电阻的最终测量信号都在单片机的控制下由12位A/D转换器TLC2543进行采集,采集的信号经单片机数据处理后通过LCD(12864)显示出来,测量结果还可以由带有串行EEPROM的CPU存储器和监控器的X25045进行多个数据保存。 关键词:TLC2543 自动量程转换 程控增益放大器 电压 电阻 电流 目录 摘要1 Abstract 2 第一章 绪论 5 1. 1 概述 5 1. 2 智能仪器/仪表国内外发展概况 5 1. 3 课题研究目的及意义 6 第二章 系统结构及功能介绍 8 2. 1 系统功能和性能指标 8 2. 1. 1 仪表功能 8 2. 1. 2 性能指标 8 2. 1. 3 本机特色 8 2. 1. 4 系统使用说明 9 2. 2 系统工作原理概述 9 第三章 方案设计与论证 11 3. 1 量程选择的设计与论证 11

  • 索引序列
  • 51单片机交通灯设计毕业论文
  • 51单片机流水灯毕业论文
  • 单片机交通灯论文范文
  • 急救车与交通灯单片机论文
  • 51单片机计算器毕业论文
  • 返回顶部