您的位置: turnitin查重官网> 汉语言文学 >> 语音学 >试谈基于C语言电话计费系统软件设计

试谈基于C语言电话计费系统软件设计

收藏本文 2024-02-23 点赞:21287 浏览:95092 作者:网友投稿原创标记本站原创

摘 要:本文主要实现基于C语言的电话计费系统的软件设计,较好的实现了信息的快速制约与处理,以及信息的显示等功能。
关键词:C语言;计费系统;程序
1674-7712 (2013) 16-0000-01

一、电话计费系统理由的提出

众所周知,目前,拥有电话机的用户数不胜数,计费的根据都是来自电信局交换机给出的清单,而清单的方式是准确的,但绝大多数的电话机用户不能及时方便地看到费用清单,而各类卡式电话机可以实时显示计费,但不能进入家庭,前些年常见的LED公用电话计费器因不能适应电话费率的变化而显得不太适用。因此我们希望能有一台像家庭内的电表、水表、气表一样的电话计费表。

二、电话计费器的软件设计

电话计费器系统有需要实现以下功能:日期和时间的显示;电话接听计时;去电计时计费及显示;挂机时的查询、累计及设置功能。可在主程序中用循环语句,使计费器工作于以上四种功能状态,循环体中用if条件语句来判断是哪个状态的条件发生,则调用该功能状态的执行函数。软件系统的流程图如图1所示。
主程序开始时进行一些初始化,如清除显示器RAM、FIFORAM,设置键盘、显示方式、时钟分频、定时器/计数器初始化等。然后打开中断后便可进入循环体。下面对各程序模块分别加以介绍。

(一)显示设计

可以采用数组diss作为显示缓冲区,存放将要显示的数据。table数组作为段码存放区。通过对专用接口芯片8279的写显示命令,储存显示数据,再从table段码表中取出要显示数据的相应段码送到数据口显示。也可以设计一个显示子函数每次显示时,只需给diss数组重新赋值,便于转变要显示的内容。

(二)计时设计

在来电接听以及拨号去电接通时,均需要计费器有计时显示功能。设计中可以采用复合定时的策略,得到1s的定时中断。可使定时器0工作在定时器方式1,定时50ms,定时时间到后P1.0反相。定时器1则工作在计数器方式2,对T1引脚端输入的脉冲计数,当计数满10次的时候,定时1s时间。当有挂机信号时,INT0端为低电平时,发生外部中断,此时两定时计数器都停止计数。显示数据时只需将计时变量SIN的值赋给diss数组,调用显示函数,并且每一秒diss数组中的内容变化一次,则显示器每秒就刷新一次。
voidtime_control()/*来电计时*/
{ucharidatadiss[16]={10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,};
ucharmin_1,min_0,sn_1,sn_0;sn=0;
P1_0=1;//保证第一次反相后便开始计数
TR0=1;TR1=1;//启动两个定时计数器
for(;;){if(flag){flag=0;break;}
else{if(~flag)
{min_1=sn/60/10;min_0=sn/60%10;
sn_1=sn%60/10;sn_0=sn%60%10;
diss[5]=min_1;diss[6]=min_0;
diss[7]=11;diss[8]=sn_1;
diss[9]=sn_0;disp(diss);
flag=0;}}}}

(三)计费处理

计费处理程序是本文设计的重点。设计中我们只单一地考虑市话和国内长途。依据电信局对固定电话的计费标准:市话前三分钟0.2元,以后的每分钟0.1元;国内长途则以6秒为一个计费单位,0.07元/6秒,但是其存在一个优惠的时段,在0:00—7:00之间可以享受超过6折的优惠,0.04元/6基于C语言的电话计费系统软件设计相关范文由写论文的好帮手www.udooo.com提供,转载请保留.秒,来进行该部分的编程。设置一个长途标志位,通过判断此标志来分别进入市话或长途的相应处理程序中。下面是市话计费的程序,其它计费程序也基本相似。
if(l_flag==0)
{if(sn<=3*60)money=price0_0;//3分钟之内
else//超过3分钟
{time=(sn-3*60)/60;
time0=(sn-3*60)%60;
if(time0!=0)time++;
money=price0_0+time*price0_1;}}

(四)功能键处理

当电话处于挂机状态下,可以通过按键进行查询,累计,设置等功能操作。由if条件语句判断是什么键值,当键值为0x0c时,进入查询的操作,将存储话单信息的结构数组中的数据赋给diss数组,再调用显示函数显示储存的话单信息;当键值为0x0d时,将话费的累计值赋予给diss数组,再调用显示函数显示。当键值为0x0e时,进入设置的操作,若此时再次取得的键值为0x0a,则应进入设置日期时间的状态中,将取得的键值送往时标寄存器中;若为0x0b,则设置费率,将取得的键值赋予给相应的费率变量。若为0x00,则清除费用,给费用累计变量sum赋0。
下面是信息查询功能的程序:
if(keyin()==0x0a)//上翻键,查询上一条的信息
{if(m==0||j==0)m=j;elsem--;gotoloop;}
elseif(keyin()==0x0b)//下翻键,查询下一条的信息
{if(m++>j)m=0;elsej--;gotoloop;}
else{dltime();time_disp();}
三、结论
本系统主要是对基于单片机的电话计费系统的软件进行设计,电话计费器系统是采用层次化、模块化的设计策略来设计的,它具有很高的便利性、可靠性。软件最终实现了友好的人机接口界面,且计费精确,记录的主叫电话信息的条数在100和1000之间。
参考文献:
[1]沈红卫.基于单片机的智能系统设计与实现[M].北京:电子工业出版社,2005,1.
[2]江世明,刘湘涛.基于单片机的智能电话制约系统的研制[J].西安:电子工业出版社,2006.

copyright 2003-2024 Copyright©2020 Powered by 网络信息技术有限公司 备案号: 粤2017400971号