赞
踩
目录
系统由AT89C52单片机+霍尔传感器模块+LCD1602液晶屏+DS1302时钟模块+AT24C02掉电存储模块+直流电机+按键模块+电源构成。
具体功能:
1、无乘客模式:显示当前时间;
2、切换到乘客模式:可以显示起步价(三公里内)、单价(三公里后)、总价(元)、里程和乘车时间,可以按照里程或计时两种模式收费;
3、里程模式收费:在高速情况下,按照起步价和里程单价收费
4、计时收费模式:在低速情况下,按照计时时间和时间单价收费
5、按清零键,计价器可清除计价。
6、可以设置白天和夜晚的起步价、单价,可以设置计时模式的单价;
7、根据当前时间,白天和夜晚的收费不同。
液晶显示的字母:
D------白天起步价
P------里程单价
PT-----时间单价
N-----夜晚起步价
按键:设置键、增加键、减小键、切换键(切换时间/乘客模式)
51单片是一种低功耗、高性能CMOS-8位微控制器,具有8K可编程Flash存储器,使得其为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
51系列单片机具有以下标准功能:
8k字节Flash,512字节RAM,
32位I/O口线,看门狗定时器,
内置4KB EEPROM,
MAX810复位电路,
三个16位定时器/计数器,
一个6向量2级中断结构,
全双工串行口。
另外, 51系列在空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机停止工作,直到下一个中断或硬件复位为止。本设计所使用的芯片可兼容以下所有的51系列单片机(包括AT系列和STC系列)。
文献研究法:搜集整理相关研究资料,阅读文献,为研究做准备;
调查研究法:通过调查、分析、具体实验等方法,发现相关存在问题和解决办法;
比较分析法:比较不同设计的具体原理,以及同一类传感器性能的区别,分析系统的研究现状与发展前景;
软硬件设计法:通过软硬件设计实现硬件,最后测试各项功能是否满足要求。
本系统原理图设计采用Altium Designer19,具体如图。
本设计利用KEIL5软件实现程序设计,主函数如下:
- //主函数
- void main()
- {
- //初始化
- Ds1302_Init();
- Init_LCD();
- initeeprom();
- //SETS();
- //读取初始参数
- READS();
- //定时器初始化
- InitTimer0();
- //循环
- while(1)
- {
- //时钟模式
- if(Mode==0)
- {
- //读时间
- if(Wei==0)
- {
- Ds1302_Read_Time();
- //显示时间
- display_NYR(time_buf1,Wei,0);
- }
- }
- else if(Mode==1)
- {
- if(time_buf1[4]>=23||time_buf1[4]<7)
- DN=1;
- else
- DN=0;
- //显示计价器信息
-
- display_S(Day,Night,DanJia,ZJ,GL/10,Time,GT,DN);
- }
-
-
- if(K4==0)
- {
- delay(100);
- //调时
- if(Mode==0)
- {
- Wei++;
- if(Wei==1)
- {
- SS=1;
- }
- //闪烁
- display_NYR(time_buf1,Wei,SS);
- if(Wei==7)
- {
- Wei=0;
- //保存时间
- Ds1302_Write_Time();
- Init_LCD();
- }
- }
- else if(Mode==1)
- {
- JGWei++;
- if(JGWei==1)
- {
- Mode=2;
- //显示计价器价格
- Init_LCD_JGTZ();
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- }
- }
- else if(Mode==2)
- {
- JGWei++;
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- if(JGWei==5)
- {
- Mode=1;
- JGWei=0;
- //参数初始化
- //保存
- SETS();
- //读初值
- READS();
-
- ZJ=0;
- GL=0;
- Time=0;
- //开启定时器
- TR0=1;
- //显示计价器
- Init_LCD_JJQ();
- }
- }
- while(K4==0);
- }
- //+
- if(K3==0)
- {
- delay(100);
- //调时
- if(Mode==0)
- {
- //年
- if(Wei==1)
- {
- time_buf1[1]++;
- if(time_buf1[1]>=100)
- time_buf1[1]=0;
- }
- //月
- else if(Wei==2)
- {
- time_buf1[2]++;
- if(time_buf1[2]>=13)
- time_buf1[2]=1;
- }
- //日
- else if(Wei==3)
- {
- time_buf1[3]++;
- if(time_buf1[3]>=YDay(time_buf1[1],time_buf1[2])+1)
- time_buf1[3]=1;
- }
- //时
- else if(Wei==4)
- {
- time_buf1[4]++;
- if(time_buf1[4]>=24)
- time_buf1[4]=0;
- }
- //分
- else if(Wei==5)
- {
- time_buf1[5]++;
- if(time_buf1[5]>=60)
- time_buf1[5]=0;
- }
- //秒
- else if(Wei==6)
- {
- time_buf1[6]++;
- if(time_buf1[6]>=60)
- time_buf1[6]=0;
- }
- //显示
- if(Wei!=0)
- display_NYR(time_buf1,Wei,SS);
- }
- //调价
- else if(Mode==2)
- {
- //单价
- if(JGWei==1)
- {
- DanJia++;
- if(DanJia>999)
- {
- DanJia=1;
- }
- }
- //等待时间单价
- else if(JGWei==2)
- {
- DJ_min++;
- if(DJ_min>999)
- {
- DJ_min=1;
- }
- }
- //夜间
- else if(JGWei==3)
- {
- Night++;
- if(Night>999)
- {
- Night=1;
- }
- }
- //白天
- else if(JGWei==4)
- {
- Day++;
- if(Day>999)
- {
- Day=1;
- }
- }
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- }
-
- while(K3==0);
- }
-
- //-
- if(K2==0)
- {
- delay(100);
- //调时
- if(Mode==0)
- {
- //年
- if(Wei==1)
- {
- time_buf1[1]--;
- if(time_buf1[1]<0)
- time_buf1[1]=99;
- }
- //月
- else if(Wei==2)
- {
- time_buf1[2]--;
- if(time_buf1[2]<=0)
- time_buf1[2]=12;
- }
- //日
- else if(Wei==3)
- {
- time_buf1[3]--;
- if(time_buf1[3]<=0)
- time_buf1[3]=YDay(time_buf1[1],time_buf1[2]);
- }
- //时
- else if(Wei==4)
- {
- time_buf1[4]--;
- if(time_buf1[4]<0)
- time_buf1[4]=23;
- }
- //分
- else if(Wei==5)
- {
- time_buf1[5]--;
- if(time_buf1[5]<0)
- time_buf1[5]=59;
- }
- //秒
- else if(Wei==6)
- {
- time_buf1[6]--;
- if(time_buf1[6]<0)
- time_buf1[6]=59;
- }
- //显示
- if(Wei!=0)
- display_NYR(time_buf1,Wei,SS);
- }
- //调价
- else if(Mode==2)
- {
- //单价
- if(JGWei==1)
- {
- DanJia--;
- if(DanJia==0)
- {
- DanJia=999;
- }
- }
- //等待时间单价
- else if(JGWei==2)
- {
- DJ_min--;
- if(DJ_min==0)
- {
- DJ_min=999;
- }
- }
- //夜间
- else if(JGWei==3)
- {
- Night--;
- if(Night==0)
- {
- Night=999;
- }
- }
- //白天
- else if(JGWei==4)
- {
- Day--;
- if(Day==0)
- {
- Day=999;
- }
- }
- display_D(Day,Night,DanJia,JGWei,DJ_min);
- }
- while(K2==0);
- }
- //切换
- if(K1==0)
- {
- delay(100);
- //计价器模式
- if(Mode==1)
- {
- Mode=0;
- ZJ=0;
- GL=0;
- Time=0;
- //开启定时器
- TR0=0;
- EX0=0;
- //显示计价器
- Init_LCD();
- }
- else if(Mode==0)
- {
- Mode=1;
- //参数初始化
- //读初值
- READS();
- ZJ=0;
- GL=0;
- Time=0;
- //开启定时器
- m=0;
- TR0=1;
- EX0=1;
- //显示计价器
- Init_LCD_JJQ();
- }
- while(K1==0);
- }
- }
- }

代码运行截图:
本设计利用protues8.7软件实现仿真设计。
全部资料包括程序(注释)、AD原理图、protues仿真、参考论文、程序讲解、仿真讲解、仿真视频、原理图讲解、资料使用介绍等,全网最全!!!
资料获取:
https://docs.qq.com/doc/DSWVmZVBOUGlkT01i
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。