当前位置:首页 > 单片机 > 单片机
[导读] 这汇编的程序,编写的很复杂,实现的功能却还是很简陋。在硬件方面,显示金额的位数也不足。做而论道用 C 重新编写了一个程序,如下:#include#include#define BAITIAN 10 //白天价格/km#define YEJIA

这汇编的程序,编写的很复杂,实现的功能却还是很简陋。


在硬件方面,显示金额的位数也不足。


做而论道用 C 重新编写了一个程序,如下:


#include

#include


#define BAITIAN 10 //白天价格/km

#define YEJIAN 14 //夜间价格/km

#define DENGREN 1 //停车等人价格/30s


sbit QD = P3^4;

sbit RY = P3^7;


unsigned char danjia, jvli, n_X0, mode;

unsigned int jinee, n_50ms;


bit ye; //1夜间/0白天


//---------------------------------------

void delay(unsigned int time)

{

unsigned int i, j;

for(i = 0; i < time; i++) for (j = 0; j < 50; j++);

}

//---------------------------------------

void display(char k) //k=0时关闭显示

{

unsigned char code DIG_SEG[] = {

0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, //01234567

0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//89ABCDEF

unsigned char i, j = 0xfe;

unsigned char buff[8] = 0;

buff[0] = DIG_SEG[danjia / 10];

buff[1] = DIG_SEG[danjia % 10];

buff[2] = DIG_SEG[jvli / 10];

buff[3] = DIG_SEG[jvli % 10];

buff[4] = DIG_SEG[jinee / 1000];

buff[5] = DIG_SEG[jinee % 1000 / 100];

buff[6] = DIG_SEG[jinee % 100 / 10];

buff[7] = DIG_SEG[jinee % 10];

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

P2 = 255;

if (k > 0) { P0 = buff[i]; P2 = j;}

delay(1); j = _crol_(j, 1);

}

}

//---------------------------------------

void key(void)

{

if (!QD) {

display(mode);

if (!QD) {

while(!QD) display(mode);

mode++;

if (mode > 2) mode = 0; //mode=0,1,2

} }

if (!RY) {

display(mode);

if (!RY) {

while(!RY) display(mode);

ye = ~ye;

if (ye) danjia = YEJIAN;

else danjia = BAITIAN;

} }

}

//---------------------------------------

main()

{

TMOD = 0x01;

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

ET0 = 1;


EX0 = 1;

IT0 = 1;

EA = 1;


TR0 = 0; //先不启动


ye = 1; //此时是夜间

if (ye) danjia = YEJIAN;

else danjia = BAITIAN;


mode = 0; //等客状态


for(;;) {


while (mode == 0) {display(mode); key();}//等客


//开始行驶, 各项初始值皆设为零


n_50ms = 0; n_X0 = 0; //时间, 外部中断次数

jvli = 0; jinee = 0; //距离, 金额


EX0 = 1; TR0 = 1; //开始统计里程, 计算等车时间


while (mode == 1) {display(mode); key();}//等待下车


EX0 = 0; TR0 = 0; //停止统计


//数据停止变化, 停车结算

while (mode == 2) {display(mode); key();}//等待清零

}

}

//---------------------------------------

void X0_INT() interrupt 0

{

n_50ms = 0;

n_X0++;

if(n_X0 == 6) { //中断6次, 假设就是1km

n_X0 = 0;

jvli++; //里程加一

jinee += danjia; //加上单价/km

}

}

//---------------------------------------

void T0_INT() interrupt 1

{

TH0 = (65536 - 50000) / 256;

TL0 = (65536 - 50000) % 256;

n_50ms++;

if(n_50ms == 600) { //到了30s

n_50ms = 0;

jinee += DENGREN; //加上停车等人的价格/30s

}

}

//---------------------------------------


仿真后的截图如下:


功能说明:


出租车在白天、晚上,每公里的价格是不同的,都要在程序的开始处进行定义。


同时还定义了停车等人的价格,每当等待 30s,即要总金额中,加上“等人价”。


用一个按键 QD 切换等人/行驶/清零三个状态。


用一个按键 RY 切换白天/夜间两个价格。


功能还是很简陋,缺少“起步价”、“打印”等等。


原程序的要求,也没有这许多,做而论道也就不添加这些了。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

8位单片机在嵌入式设计领域已经成为半个多世纪以来的主流选择。尽管嵌入式系统市场日益复杂,8位单片机依然不断发展,积极应对新的挑战和系统需求。如今,Microchip推出的8位PIC®和AVR®单片机系列,配备了先进的独立...

关键字: 单片机 嵌入式 CPU

在嵌入式系统开发中,程序烧录是连接软件设计与硬件实现的关键环节。当前主流的单片机烧录技术已形成ICP(在电路编程)、ISP(在系统编程)、IAP(在应用编程)三大技术体系,分别对应开发调试、量产烧录、远程升级等不同场景。...

关键字: 单片机 ISP ICP IAP 嵌入式系统开发

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

本文中,小编将对单片机予以介绍,如果你想对它的详细情况有所认识,或者想要增进对它的了解程度,不妨请看以下内容哦。

关键字: 单片机 开发板 Keil

随着单片机系统越来越广泛地应用于消费类电子、医疗、工业自动化、智能化仪器仪表、航空航天等各领域,单片机系统面临着电磁干扰(EMI)日益严重的威胁。电磁兼容性(EMC)包含系统的发射和敏感度两方面的问题。

关键字: 单片机 电磁兼容

以下内容中,小编将对单片机的相关内容进行着重介绍和阐述,希望本文能帮您增进对单片机的了解,和小编一起来看看吧。

关键字: 单片机 复位电路

在这篇文章中,小编将为大家带来单片机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 单片机 异常复位

今天,小编将在这篇文章中为大家带来单片机的有关报道,通过阅读这篇文章,大家可以对它具备清晰的认识,主要内容如下。

关键字: 单片机 仿真器

单片机将是下述内容的主要介绍对象,通过这篇文章,小编希望大家可以对它的相关情况以及信息有所认识和了解,详细内容如下。

关键字: 单片机 中断 boot

一直以来,单片机都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来单片机的相关介绍,详细内容请看下文。

关键字: 单片机 数字信号 模拟信号
关闭