自行车简易数字里程表设计毕业设计论文(编辑修改稿)内容摘要:

片机原理及接口技术 . 北京航空航天大学出版社 , 1994 [2] 张毅刚 , 刘杰 . MCS51 单片机原理及应用 . 哈尔滨工业大学出版社 ,2020 [3] 楼然苗 , 李光飞 . 51 系列单片机设计实例 . 北京航空航天大学出版社 , 2020 [4] 松井邦彦 , 梁瑞林 . 传感器应用技术 141 例 . 科学出版社 , 2020 [5] 张洪润 , 张亚凡 . 传感器技术与应用教程 . 清华大学出版社 , 2020 [6] 刘灿军 . 实用传感器 . 国防工业出版社 , 2020 [7] 何希才 . 传感器及其应用 . 国防工业出版社 , 2020 [8] 刁文兴 . 自行车电子里程表的初步设计 . 南京工业职业技术学院学报 , 2020, 6: 2528 [9] 安宗权 . 电动电子车速里程表分频电路设计 . 自动化与仪器仪表 , 2020, 5: 3944 [10] 阎焕忠 , 王长涛 , 马斌 . 单片机控制里程转速表的设计 . 沈 阳建筑工程学院学报(自然科学版) ,2020, 4: 145148 [11] 谢自美 . 电子线路设计 .实验 .测试 [M].武汉:华中科技大学出版社, 2020: 212230 [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 =。 //直径 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[]=0123456789abcdefg。 uchar i。 sbit beep = P3^7。 //蜂鸣器 IO口定义 /******************1ms 延 时 函 数*******************/ void delay_1ms(uint q) { uint i,j。 for(i=0。 iq。 i++) for(j=0。 j120。 j++)。 } /******************把数据保存到单片机内部 eepom中 ******************/ void write_eeprom() { SectorErase(0x2020)。 byte_write(0x2020, bj_shudu % 256)。 byte_write(0x2020, bj_shudu / 256)。 byte_write(0x2020, zong_lc % 256)。 byte_write(0x2020, zong_lc / 256 % 256)。 byte_write(0x2020, zong_lc / 256 / 256 % 256)。 byte_write(0x2055, a_a)。 } /******************把数据从单片机内部 eepom中读出来 *****************/ void read_eeprom() { uint value。 bj_shudu = byte_read(0x2020)。 bj_shudu = 8。 bj_shudu |= byte_read(0x2020)。 zong_lc = byte_read(0x2020)。 zong_lc = 16。 value = byte_read(0x2020)。 zong_lc |= (value 8)。 zong_lc |= byte_read(0x2020)。 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_(uchar ) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void write_(uchar ) { i =0。 e=0。 rs=0。 rw=0。 P0=。 delay_uint(3)。 e=1。 delay_uint(25)。 e=0。 } /******************************************************************** * 名称 : write_data(uchar dat) * 功能 : 1602写数据函数 * 输入 : 需要写入 1602的数据 * 输出 : 无 ***********************************************************************/ void write_data(uchar dat) { i =0。 e=0。 rs=1。 rw=0。 P0=dat。 delay_uint(3)。 e=1。 delay_uint(25)。 e=0。 } /******************************************************************** * 名称 : write_sfm2(uchar hang,uchar add,uchar date) * 功能 : 显示 2位十进制数,如果要让第一行,第五个字符开始显示 23 ,调用该函数如下 write_sfm1(1,5,23) * 输入 : 行,列,需要输入 1602的数据 * 输出 : 无 ***********************************************************************/ void write_sfm2(uchar hang,uchar add,uint date) { if(hang==1) write_(0x80+add)。 else write_(0x80+0x40+add)。 write_data(0x30+date/10%10)。 write_data(0x30+date%10)。 } /******************************************************************** * 名称 : write_sfm4(uchar hang,uchar add,uchar date) * 功能 : 显示 2位十进制数,如果要让第一行,第五个字符开始显示 23 ,调用该函数如下 write_sfm1(1,5,23) * 输入 : 行,列,需要输入 1602的数据 * 输出 : 无 ***********************************************************************/ void write_sfm4(uchar hang,uchar add,uint date) { if(hang==1) write_(0x80+add)。 else write_(0x80+0x40+add)。 write_data(0x30+date/10000%10)。 write_data(0x30+date/1000%10)。 write_data(39。 .39。 )。 write_data(0x30+date/100%10)。 write_data(0x30+date/10%10)。 write_data(0x30+date%10)。 write_data(39。 k39。 )。 write_data(39。 m39。 )。 } void write_sfm7(uchar hang,uchar add,uint date) { if(hang==1) write_(0x80+add)。 else write_(0x80+0x40+add)。 write_data(0x30+date/100000%10)。 write_data(0x30+date/100000%10)。 write_data(0x30+date/10000%10)。 write_data(0x30+date/1000%10)。 write_data(39。 .39。 )。 write_data(0x30+date/100%10)。 write_data(0x30+date/10%10)。 write_data(39。 k39。 )。 write_data(39。 m39。 )。 } /***********************lcd1602 上显示 两 位 十 进 制 数。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。