出租车计费器 - 图文(5)

2019-04-09 09:22

当IT0(IT1)=0 电平方式(低电平有效)此位由软件置1或清0。 TF0(TF1)——计数溢出标志位

当计数器产生计数溢出时,此位由硬件置1。当转向中断服务时,再有硬件自动清0。计数溢出的标志位的使用有两种情况:采用中断方式时,作中断请求标志位来使用;采用查询方式时,作查询状态位来使用。

3.3 各模块子程序

3.3.1 初始化程序

初始化程序中,我们设计包括变量定义、函数声明、延时子程序等等。 #include

#define uint unsigned int #define uchar unsigned char #define T0 300 sbit K0=P1^0; sbit c0=P1^1; sbit c1=P1^2; sbit c2=P1^3; sbit c3=P1^4;

sbit LedForward=P1^5; sbit LedBack=P1^7; sbit LedStop=P1^6;

char table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67}; //数码管编码

unsigned char code

DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char Disp_Buffer[]={0,0,0,0,0,0,0,0}; unsigned char Disp_Buffer_M[]={0,0,0,0,0,0,0,0};

unsigned char code DSY_BIT[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char i,j,buzy; unsigned char t1,minute=0;

unsigned int count=0,KmCount=0,Money2=0,Money1=5,Money0=0; void chaxun(void); void TimerInit();

void delay(unsigned char x);

18

void dspzheng(void); void dspfan(void); void sspzheng(void); void sspfan(void); void bpzheng(void); void bpfan(void); void display(); void display2();

void delay(unsigned char x) //延时子程序延时约0.5Xms

{ }

int i; while(x--)

for(i=1;i<60;i++);

3.3.2 数码管选择程序

void choose(uchar i) { switch(i) {

case 4:c0=0;c1=1;c2=1;c3=1;break; case 5:c0=1;c1=0;c2=1;c3=1;break; case 6:c0=1;c1=1;c2=0;c3=1;break; case 7:c0=1;c1=1;c2=1;c3=0;break; } }

3.3.3 定时器初始化程序

首先设计一子程序用于显示7位数字,主程序先完成初始化,接着进入无限循环,检测等待计时变量和路程变量,计算费用后调用子程序在数码管中显示,计时中断时变量增加,来

19

模拟汽车的行进和等待。

void TimerInit() { IE=0X8A; TMOD=0x11;

//设置定时器工作方式

TH0=(65536-T0)/256; //送初值 TL0=(65536-T0)%6; ET0=1; //TR0=1;

//TH1=(65536-50000)/256; //TL1=(65536-50000)%6; ET1=1; //TR1=1; //EA=1;

//}

3.3.4 TIME0中断程序

void timer0() interrupt 1 //{ unsigned int temp; TH0=(65536-T0)/256; TL0=(65536-T0)%6; temp=count; //minute=56;

}

3.3.5 主程序

main() //{

//TimerInit();

开定时/计数器0中断 定时/计数器开始工作

送初值 开定时/计数器0中断 定时/计数器开始工作 开总中断

定时/计数器中断程序 主程序 20

while(1) { chaxun(); display();

// display2();

} }

3.3.6 数码管显示程序

void display() //{ Disp_Buffer[7]=minute/10; Disp_Buffer[6]=minute; Disp_Buffer[5]=KmCount/10; Disp_Buffer[4]=KmCount; Disp_Buffer_M[7]=0; Disp_Buffer_M[6]=Money2; Disp_Buffer_M[5]=Money1; Disp_Buffer_M[4]=Money0;

for(i=4;i<8;i++) {

P2=DSY_BIT[i];

P0=DSY_CODE[Disp_Buffer[i]]; choose(i);

P3=DSY_CODE[Disp_Buffer_M[i]]; delay(10);

}

}

数码管动态显示子程序21

3.3.7 计程、计费、计时程序

系统采用两个开关控制汽车运行计费,等待计时,通过扫描单片机的接口判断此时状态并计时。计时采用定时器0计时,当计数到时把路程和等待计时变量加1,最后通过相关运算得到费用,显示在数码管上。

void chaxun() { #if(1) if(K0==0) {

//ET1=0; ////TR1=0;

//KmCount++; // delay(10); if(KmCount>3) { Money1++; }

if(Money1==10) { Money1=0; Money2++; if(Money2==10) { Money2=0; // Money1=0; } }

if(KmCount==100)KmCount=0; }

else if(K0==1) {

//ET1=1; ////TR1=1;

//

关定时/计数器0中断 定时/计数器停止工作

开定时/计数器0中断 定时/计数器开始工作

22


出租车计费器 - 图文(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:冀教版小学科学四年级下册第九课《雨的形成》说课稿

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: