欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機出租車計價器程序
[打印本頁]
作者:
不會吧qaq
時間:
2020-6-20 12:53
標題:
單片機出租車計價器程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/*定義1602讀寫使能端口*/
sbit rw=P2^1;
sbit rs=P2^0;
sbit en=P2^2;
sbit b=P0^7;
sbit gl=P1^0;
void lcd_init(); //lcd設置函數
void wr_com(uchar command); //命令函數
void wr_data(uchar data0); //數據函數
void lcd_clear(); //清屏函數
void lcd_set(); //屏幕設置函數
void busy(); //測忙函數
void display(); //啟動前顯示函數
void printstring(uchar *s);
void display1(); //啟動后顯示函數
void key1(); //啟動前按鍵
sbit K=P3^0;
sbit K1=P3^1;
sbit K2=P3^5; //開始計價
sbit K3=P3^3; //模式選擇(行程/等待)
sbit K4=P3^4; //復位
sbit g=P2^7;
sbit aa=P2^3; //運行
sbit bb=P2^4; //等待
sbit cc=P2^5; //暫停
//sbit led_run=P3^0;
//sbit led_await=P3^1;
//sbit led_stop=P3^2;
bit f_start;
bit jump_in;
bit jump_out;
void key(); //啟動后按鍵
/*定義液晶顯示地址數組*/
uchar codetable[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x70};
uchar dispbuf[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar dispbuf1[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
uchar v,v1;
uchar i,m=0;
void init();
void chuli();
void chuli1();
void delay(uchar t); //延時函數
void clear(); //終止函數
void set(uchar x);
void set1(uchar y);
uchar command;
uchar count,count1;
uchar second,minite,second1,minite1;
unsigned int tt,tt1;
unsigned char value1=70,value2=17,value3=15; //value1=起步價,value2=超出每公里價格,value3=等待價格
unsigned int money;
void main()
{
// Init_Timer1(); //定時器中斷函數
EX0=1;//開外部中斷0
IT0=1;//采用跳變沿觸發方式
init();
lcd_init();
while(1)
{
key1();
chuli();
display();
if(jump_in==1)
{
jump_in=0;
lcd_init();
while(1)
{
key();
chuli1();
display1();
if(jump_out==1)
{
lcd_init();
jump_out=0;
clear();
break;
}
}
}
}
}
void clear(){
TR0=0;
TR1=0;
money=0;
second=0;
second1=0;
minite=0;
minite1=0;
value1=70;
value2=17;
value3=15;
//led_run=1;
//led_await=1;
//led_stop=1;
v=0;
v1=0;
for(i=0;i<15;i++)
{
dispbuf[ i]=0;[ i]
dispbuf1[ i]=0;[ i]
}
m=0;
}
void init() //中斷定時
{
TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
ET0=1;
ET1=1;
EA=1;
TR0=0;
TR1=0;
}
void t0_(void) interrupt 1 using 0 //中斷1模式0 用來計時 秒、分
{
count++;
if(count==20)
{
count=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==99)
{
minite=0;
}
}
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
dispbuf1[0]=m/10;
dispbuf1[1]=m%10;
dispbuf1[2]=second/10;
dispbuf1[3]=second%10;
}
void t1_(void) interrupt 3 using 3 //中斷3模式3用來計時 秒、分
{
count1++;
if(count1==20)
{
count1=0;
second1++;
if(second1==60)
{
second1=0;
minite1++;
if(minite1==99)
{
minite1=0;
}
}
}
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
dispbuf1[4]=minite1/10;
dispbuf1[5]=minite1%10;
dispbuf1[6]=second1/10;
dispbuf1[7]=second1%10;
}
void lcd_init()
{
wr_com(0x3c);
wr_com(0x06);
wr_com(0x0c);
wr_com(0x01);
}
void wr_com(uchar command) //命令
{
busy();
rs=0;
rw=0;
P0=command;
en=1;
en=0;
}
void wr_data(uchar data0) //數據
{
busy();
rs=1;
rw=0;
P0=data0;
en=1;
en=0;
}
void busy() //測忙函數
{
while(1)
{
en=0;
rs=0;
rw=1;
P0=0xff;
en=1;
if(b!=1)break;
}
en=0;
}
void chuli() //分離出百位十位個位
{
dispbuf[0]=value1/100%10;
dispbuf[1]=value1/10%10;
dispbuf[2]=value1%10;
dispbuf[3]=value2/100%10;
dispbuf[4]=value2/10%10;
dispbuf[5]=value2%10;
dispbuf[6]=value3/100%10;
dispbuf[7]=value3/10%10;
dispbuf[8]=value3%10;
}
void display() //初始顯示函數
{
set(0);
printstring("step :");
wr_data(table[dispbuf[0]]);
wr_data(table[dispbuf[1]]);
printstring(".");
wr_data(table[dispbuf[2]]);
set(16);
printstring("mileage :");
wr_data(table[dispbuf[3]]);
wr_data(table[dispbuf[4]]);
printstring(".");
wr_data(table[dispbuf[5]]);
set1(0);
printstring("await:");
wr_data(table[dispbuf[6]]);
wr_data(table[dispbuf[7]]);
printstring(".");
wr_data(table[dispbuf[8]]);
set1(16);
printstring("run : ");
wr_data(table[dispbuf1[0]]);
wr_data(table[dispbuf1[1]]);
printstring(":");
wr_data(table[dispbuf1[2]]);
wr_data(table[dispbuf1[3]]);
}
void chuli1()
{
if(f_start==1)
{
tt=minite*60+second;
tt1=minite1;
if(m<=3)
{money=value1+value3*tt1;}
if(m>3)
{money=value1+value2*(m-3)+value3*tt1;}
}
elseif(f_start==0)
{
money=0;
}
dispbuf1[8]=money/100%10;
dispbuf1[9]=money/10%10;
dispbuf1[10]=money%10;
}
void display1() //運行后顯示函數
{
set(0);
printstring("run: ");
// wr_data(table[m]);
wr_data(table[dispbuf1[0]]);
wr_data(table[dispbuf1[1]]);
// printstring(":");
// wr_data(table[dispbuf1[2]]);
// wr_data(table[dispbuf1[3]]);
set(14);
printstring("await:");
wr_data(table[dispbuf1[4]]);
wr_data(table[dispbuf1[5]]);
printstring(":");
wr_data(table[dispbuf1[6]]);
wr_data(table[dispbuf1[7]]);
set1(0);
printstring("sum is: ");
wr_data(table[dispbuf1[8]]);
wr_data(table[dispbuf1[9]]);
printstring(".");
wr_data(table[dispbuf1[10]]);
}
void printstring(uchar *s) //輸出顯示函數
{
while(*s)
wr_data(*s++);
}
void key() //啟動按鍵
{
if(K3==0)
{
delay(50); //延時消抖動
if(K3==0)
{
while(K3==0);
v1++;
if(v1==4) v1=1;
}
}
switch(v1)
{
case1:f_start=1;TR0=1;TR1=0;/*led_run=0;led_await=1;led_stop=1*/;aa=0;bb=1;cc=1;break; //運行
case2:TR0=0;TR1=1;/*led_run=1;led_await=0;led_stop=1*/;aa=1;bb=0;cc=1;break; //等待
case3:TR0=0;TR1=0;/*led_run=1;led_await=1;led_stop=0*/;aa=1;bb=1;cc=0;break; //暫停
}
if(K4==0) //跳出運行
{
delay(50);
if(K4==0)
{
while(K4==0);
jump_out=1;
}
}
}
void delay(uchar t)
{
while(--t);
}
void set(uchar x)
{
command=0x80+x;
wr_com(command);
}
void set1(uchar y)
{
command=0xc0+y;
wr_com(command);
}
void key1() //初始調節按鍵
{
if(K==0)
{
delay(100);
if(K==0)
{
while(K==0);
v++;
if(v==4) v=0;
}
}
switch(v)
{
case 0:break;
case1:if(K1==0){while(K1==0);value1=value1+10;}break;
case 2:if(K1==0){while(K1==0);value2=value2+5;}break;
case3:if(K1==0){while(K1==0);value3=value3+5;}break; }
if(K2==0)
{
delay(50);
if(K2==0)
{
while(K2==0);
jump_in=1;
}
}
}
void mode( ) interrupt 0 //外部中斷0控制選位
{
m++;
}
復制代碼
《單片微型計算機與接口技術51hei設計任務書》.doc
2020-6-20 12:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
41.5 KB, 下載次數: 4, 下載積分: 黑幣 -5
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1