关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > 出租车计价器设计与制作

出租车计价器设计与制作

作者:时间:2011-06-04来源:网络收藏

中断服务程序主要实现计时功能,当启动键按下之后,定时器开始工作,用一个变量对定时器溢出中断的次数进行计数,达到计时功能,该变量在每次脉冲到来时被清零(在主程序中清零),当脉冲长时间没有来,则当该变量计数超过30秒时,总金额按照途中等待计费标准进行计价。中断程序的流程图如图3-13所示。

本文引用地址:http://www.eepw.com.cn/article/161997.htm

图3-13 的中断服务程序流程图

(4)系统软件调试方案、硬件调试方案及软硬件联合调试方案
软件调试方案:伟福软件中,在“文件新建文件”中,新建C语言源程序文件,编写相应的程序。在“文件新建项目”的菜单中,新建项目并将C语言源程序文件包括在项目文件中。
在 “项目编译”菜单中将C源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以 “*.hex”和“*.bin” 后缀的目标文件。
硬件调试方案:在平台中,将单片机的P1.0-P1.2分别与3个独立式键盘通过插线连接起来,将P3.2与脉冲信号源连接起来。
在伟福中将程序文件编译成目标文件后,将下载线安装在实验平台上,运行“MCU下载程序”,选择相应的flash 数据文件,点击“编程”按钮,将程序文件下载到单片机的Flash中。
然后,上电重新启动单片机,检查所编写的程序是否达到题目的要求,是否全面完整地完成试题的内容。

3.4.2 程序
/*晶振:11.0592M T1-250微秒溢出中断一次;P3.2(int0)-中断100次,查询IE0置位,
P1^0为启动键;P1^1为清除键;P1^2为白天/晚上的切换键
变量的定义:
key_val: 返回按键的值 255-无键
T1_cnt: 定时器溢出数计数
cnt_30: 30秒钟的计时
cnt_distance: 计算路程
cnt_cost: 总金额
state_val: 状态:0-白天 1 夜晚
cost_val[3]: 收费标准:白天单价cost_val[0]=1元/公里;晚上单价cost_val[1]=2元/公里;
等待单价cost_val[2]=1元/30s
led_seg_code:数码管7段码 */
//-------------------
#include reg51.h
unsigned char data cnt_30,cnt_distance,cnt_cost;
unsigned int data T1_cnt,D_cnt;
unsigned char data key_val,key_val_old;
unsigned char data state_val;
char code cost_val[3]={1,2,1};
char code led_seg_code[10]={0x3f,0x06,0x05b,0x04f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//led_seg_code[0-9]代表0-9
//-------延时-----------------
void delay(unsigned int i)//延时
{ while(--i); }
//-------初始化变量------------------
void init_variant() //初始化一些变量的内容
{unsigned char i;
cnt_30=0; //30秒的计时
D_cnt=0; //脉冲的个数
cnt_distance=0; //距离的计数
cnt_cost=0; //保存总价格
}
//-------扫描键盘-----------------
unsigned char scan_key()
{ unsigned char i,k;
i=P1;
if (i==0xff)
{ k=255; } //无键按下
else //有键按下
{ delay(10); //延时去抖动
if(i!=P1)
{k=255;}
else
{ switch (i)
{ case 0xfe: k=0; break; //P1.0按下,启动键
case 0xfd: k=1; break; //P1.1按下,清除键
case 0xfb: k=2; break; //P1.2按下,切换键



评论


相关推荐

技术专区

关闭