标题:
单片机出租车计价器设计
[打印本页]
作者:
decade-1
时间:
2019-6-13 12:41
标题:
单片机出租车计价器设计
#include<reg52.h> //库文件
#define uchar unsigned char//宏定义无符号字符型
#define uint unsigned int //宏定义无符号整型
/********************************************************************
初始定义
*********************************************************************/
code uchar seg7code[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //显示段码 数码管字跟
uchar wei[4]={0XFB,0XF7,0XEF,0XdF};
sbit zjwd=P3^6; //增加温度
sbit jswd=P3^7; //减少温度
uchar a=0;
uchar b=0;
uchar f=2;
uchar g=1;
uchar a1=0;
uchar a2=0; //位的控制端
uchar c=0;
uint CLK;
uint d=0;
uint e=0;
/********************************************************************
延时函数
*********************************************************************/
void delay()//延时3ms
{
uchar i,j;
for(i=0;i<80;i++)
{
for(j=13;j>0;j--);
{ ;
}
}
}
void timer0( ) interrupt 1 //定时器0工作方式1
{
TH0=(65536-50000)/256; //重装计数初值
TL0=(65536-50000)%256; //重装计数初值
if(CLK==15)
{
CLK=0;
d=d+1;
}
else
{
CLK=CLK+1; //取反
}
}
void tingzhi() //降温按健是否按下
{
if(jswd)
{
a2=1;
}
if(a2)
{
if(!jswd)
{
a2=0;
}
}
}
void kaishi()
{
if(zjwd)
{
a1=1;
}
if(a1)
{
if(!zjwd)
{
a1=0;//标志位
d=0; //公里数设为0
f=1; //将开始标志位设1
EA=1;
ET0=1;
while(f==1)
{
P3=0XFF;//全部不显示
b=d/1000;
P0=seg7code[b];
P3=wei[0];//第一个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
b=d%1000/100;
P0=seg7code[b];
P3=wei[1];//第二个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
b=d%100/10;
P0=seg7code[b];
P3=wei[2];//第三个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
b=d%10;
P0=seg7code[b];
P3=wei[3];//第四个数码管阳极高电平点亮
delay(); //延时3ms
tingzhi();
if(a2==0)//如果停止键按下。退出显示循环
{f=0;}
}
}
}
}
void xianshichushi()
{
while(1)
{
P3=0XFF;//全部不显示
P0=seg7code[0];
P3=wei[0];//第一个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
P0=seg7code[0];
P3=wei[1];//第二个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
P0=seg7code[0];
P3=wei[2];//第三个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
P0=seg7code[0];
P3=wei[3];//第四个数码管阳极高电平点亮
delay(); //延时3ms
kaishi() ;
if(!a1)
break;
}
}
/********************************************************************
主函数
*********************************************************************/
void main()
{
TMOD=0X01; //定时器中断0
CLK=0; //脉冲信号初始值为0
TH0=(65536-50000)/256; //定时时间高八位初值
TL0=(65536-50000)%256; //定时时间低八位初值
EA=1; //开CPU中断
ET0=1; //开T/C0中断
TR0=1;
xianshichushi(); //数码管显示初始化
while(1)
{
kaishi();//开始计费键是否按下
if(f==0)//是否按下停止按键
{
CLK=0; //脉冲信号初始值为0
TH0=(65536-50000)/256; //定时时间高八位初值
TL0=(65536-50000)%256; //定时时间低八位初值
EA=0; //关CPU中断
ET0=0; //关T/C0中断
if(d==1||d==0)//是否为一公里以内
{
e=3;//收费7元
}
else
{
e=(d-1)*5+3;
}
while(f==0)
{
P3=0XFF;//全部不显示
b=e/1000;
P0=seg7code[b];
P3=wei[0];//第一个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
b=e%1000/100;
P0=seg7code[b];
P3=wei[1];//第二个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
b=e%100/10;
P0=seg7code[b];
P3=wei[2];//第三个数码管阳极高电平点亮
delay();//延时3ms
P3=0XFF; //全部不显示
b=e%10;
P0=seg7code[b];
P3=wei[3];//第四个数码管阳极高电平点亮
delay(); //延时3ms
if(zjwd)
{
a1=1;
}
if(a1)
{
if(!zjwd)
{
a1=0;//标志位
f=1; //将开始标志位设1
P0=seg7code[0]; //数码管清零
}
}
}
}
}
}
复制代码
QQ图片20190613123942.png
(241 KB, 下载次数: 48)
下载附件
2019-6-13 12:40 上传
isis图片
作者:
ztlmzt
时间:
2019-12-20 08:34
可以发一下文件吗
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1