发布时间 : 星期二 文章自行车简易数字里程表设计论文更新完毕开始阅读
3.4 电路仿真
3.4.1 仿真软件简介
Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面, 它也支持IAR、Keil和MPLAB等多种编译器。
3.4.2 仿真结果
仿真结果如图12所示。 LCD1LM016LVSSVDDVEERSRWERS4GND5E620pFX112M19XTAL1C21820pFXTAL2R1C810uF1k9RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617d0d1d2d3d4d5d6d7RSGNDE98765432d0d1d2d3d4d5d6d7U1d07d18d29d310d411d512d613d714C1123D0D1D2D3D4D5D6D7RP1RESPACK-8U281VCC1X1VCC22293031PSENALEEA1576X2RSTSCLKI/ODS1302CRYSTALX2312345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51R210kLS1U3231GNDVIOUTVCCIP+4IP-5SPEAKERR310kACS755XCB-050 图12 仿真结果
第四部分 安装调试与性能测量
电路实物图如图13所示。
图13 电路实物图
第五部分 设计总结
通过本次设计,使我对单片机知识和理解更一步加深了,掌握了简易数字里程表的设计,组装和调试方法。并且使我更加熟练的应用仿真软件,让我学到了如何运用软件测试电路的可行性,并且对电路的调试改进都有一个很大的提高。
这个过程中我遇到了很多困难,比如如何运用仿真软件画图,如何组织一些比较专业的语言,以及上网查阅资料。虽说费劲,但是乐趣也不少。通过这次设计,我们了解到平时知识的积累真的很重要,在遇到困难时一定要向认真思考,查阅相关资料,不可盲目退缩,努力后就一定会有收获。
这次毕业设计收获颇丰,不仅是对自己个人能力的提高,也让我认识到了自己的局限,通过这次的毕业设计为以后的学习奠定了一个更好的基础。
参考文献
[1] 李朝青. 单片机原理及接口技术. 北京航空航天大学出版社, 1994 [2] 张毅刚, 刘杰. MCS-51单片机原理及应用. 哈尔滨工业大学出版社,2004 [3] 楼然苗, 李光飞. 51系列单片机设计实例. 北京航空航天大学出版社, 2006 [4] 松井邦彦, 梁瑞林. 传感器应用技术141例. 科学出版社, 2006 [5] 张洪润, 张亚凡. 传感器技术与应用教程. 清华大学出版社, 2005 [6] 刘灿军. 实用传感器. 国防工业出版社, 2004 [7] 何希才. 传感器及其应用. 国防工业出版社, 2001
[8] 刁文兴. 自行车电子里程表的初步设计. 南京工业职业技术学院学报, 2004, 6: 25-28 [9] 安宗权. 电动电子车速里程表分频电路设计. 自动化与仪器仪表, 2001, 5: 39-44 [10] 阎焕忠, 王长涛, 马斌. 单片机控制里程转速表的设计. 沈阳建筑工程学院学报(自
然科学版),2002, 4: 145-148
[11] 谢自美. 电子线路设计.实验.测试[M].武汉:华中科技大学出版社,2000:212-230 [12] 张福学. 传感器使用电路150例.中国技术出版社.1992
程序
#include
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255
#define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include \
/******************
ds1302 内部RAM RAM0 1100 000R/W 1读 0写
RAM1 1100 001R/W
....... RAM30 1111 110R/W
********************/
sbit clk = P1^3; //ds1302时钟线定义
sbit io = P1^4; //数据线 sbit rst = P1^5; //复位线
//秒 分 时 日 月 年 星期 uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //写地址 uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b}; //读地址 uchar code init_ds[] ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};
uchar miao,fen,shi,ri,yue,week,nian; uchar i;
uchar t1_num,t2_num; //计时间中断的次数
unsigned long speed1,juli,time2; float f_hz ,speed_km,speed_m; //dlaout time1 ,speed_km,speed_m; uchar TH11,TL11;
uchar flag_en; //开始计算速度使能 uchar flag_stop_en; //要确定车子是否停下了
uint juli_s; //每秒走的距离 uint juli_z; //总路程
float zhijing = 0.55; //直径 0.55M bit flag_1s = 1; //1s
uchar menu_1; //菜单设置变量 uchar menu_2; //菜单设置变量
long zong_lc; //总量程
uchar flag_200ms;
uint shudu; //定义速度的变量 uint bj_shudu = 80; //报警速度
//这三个引脚参考资料
sbit rs=P1^0; //寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit rw=P1^1; //寄存器选择信号 H:数据寄存器 L:指令寄存器
sbit e =P1^2; //片选信号 下降沿触发
uchar code table_num[]=%uchar i;
sbit beep = P3^7; //蜂鸣器IO口定义
/******************1ms 延时函数*******************/ void delay_1ms(uint q) {
uint i,j;
for(i=0;i for(j=0;j<120;j++); } /******************把数据保存到单片机内部eepom中******************/ void write_eeprom() { SectorErase(0x2000); byte_write(0x2000, bj_shudu % 256); byte_write(0x2001, bj_shudu / 256); byte_write(0x2002, zong_lc % 256); byte_write(0x2003, zong_lc / 256 % 256); byte_write(0x2004, zong_lc / 256 / 256 % 256); byte_write(0x2055, a_a); } /******************把数据从单片机内部eepom中读出来*****************/ void read_eeprom() { uint value; bj_shudu = byte_read(0x2001); bj_shudu <<= 8; bj_shudu |= byte_read(0x2000); zong_lc = byte_read(0x2004); zong_lc <<= 16; value = byte_read(0x2003); zong_lc |= (value << 8); zong_lc |= byte_read(0x2002); a_a = byte_read(0x2055); } /**************开机初始化保存的数据*****************/ void init_eeprom() //开机初始化保存的数据* { read_eeprom(); //先读 if(a_a != 1) //新的单片机初始单片机内问eeprom { bj_shudu = 50; a_a = 1; write_eeprom(); //保存数据 } } /******************************************************************** * 名称 : delay_uint() * 功能 : 小延时。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void delay_uint(uint q) { while(q--); } /******************************************************************** * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void write_com(uchar com) { i =0; e=0; rs=0; rw=0; P0=com; delay_uint(3); e=1; delay_uint(25); e=0; } /******************************************************************** * 名称 : write_data(uchar dat) * 功能 : 1602写数据函数 * 输入 : 需要写入1602的数据 * 输出 : 无