当前位置:首页 > 单片机 > 单片机
[导读] 这汇编的程序,编写的很复杂,实现的功能却还是很简陋。在硬件方面,显示金额的位数也不足。做而论道用 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 切换白天/夜间两个价格。


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


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


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

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭