单片机显示程序是用数码管显示想换成1602程序不知道怎么改啊。。。。

2019-03-24 18:49发布


程序是自动停车收费系统的#include<reg52.h>#define uint unsigned int#define uchar unsigned charint n,z,shou_fei;char shi,fen,miao;sbit P1_0=P1^0;  //进车门红灯sbit P1_1=P1^1;  //进车门绿灯sbit P1_2=P1^2;  //出车门指示灯sbit P1_3=P1^3;  //进车检测位sbit P1_4=P1^4;  //出车检测位sbit P0_1=P0^1;  //收费控制位sbit P0_2=P0^2;  //"+"sbit P0_3=P0^3;  //"-"sbit P0_4=P0^4;  //时控制位sbit P0_5=P0^5;  //分控制位sbit P0_6=P0^6;  //秒控制位sbit P0_7=P0^7;  //功能选择控制位/******************延时函数******************/void delay(uint i){ while(i--);}/****************1ms延时函数*****************/void delay1ms(uint j) {uint a,b; for(a=0;a<j;a++) { for(b=0;b<1000;b++) tingche(); }}/******************按键函数******************/anjian(){if(P0_4==0)       //时调整 {while(1)  {shijian();   if(P0_2==0)   {while(P0_2==0)    shijian();    shi++;    if(shi==24)shi=0;   }  if(P0_3==0)   {while(P0_3==0)    shijian();    shi--;    if(shi<0)shi=23;   }  if(P0_1==0)   {while(P0_1==0)    shijian();    break;   }  } } if(P0_5==0)         //分调整 {while(1) {shijian();  if(P0_2==0)   {while(P0_2==0)    shijian();    fen++;    if(fen==60)fen=0;   }  if(P0_3==0)   {while(P0_3==0)    shijian();    fen--;    if(fen<0)fen=59;   }  if(P0_1==0)  {while(P0_1==0)   shijian();   break;   }  } } if(P0_6==0)         //秒调整 {while(1) {shijian();  if(P0_2==0)   {while(P0_2==0)    shijian();    miao++;    if(miao==60)miao=0;   }  if(P0_3==0)   {while(P0_3==0)    shijian();    miao--;    if(miao<0)miao=59;   }  if(P0_1==0)  {while(P0_1==0)   shijian();   break;   }  } }}/*****************时间显示函数***************/shijian(){ P2=miao%10+0x00+0x80;              //显示秒的个位  P2=miao/10+0x10+0x80;              //显示秒的十位  P2=fen%10+0x20;                    //显示分的个位  P2=fen/10+0x30+0x80;               //显示分的个位  P2=shi%10+0x40;                    //显示时的个位  P2=shi/10+0x50+0x80;               //显示时的个位}/*****************停车显示函数***************/tingche(){ P2=shou_fei/10+0x50+0x80;delay(5);    //显示收费金额的十位 P2=shou_fei%10+0x40;                //显示收费金额的个位 P2=z/10+0x30+0x80;                  //显示停车总数的十位 P2=z%10+0x20;                       //显示停车总数的个位 P2=(4-n)/10+0x10+0x80;              //显示空车位数的十位 P2=(4-n)%10+0x00;                   //显示空车位数的个位}/******************检测函数******************/void jiance(){if(n<4)          { if(P1_3==0)       { while(P1_3==0)    tingche(); P1_1=0;          n++;             z++;             delay1ms(10);      P1_1=1;          } } else P1_0=0;      if(P1_4==0)       { while(P1_4==0)    tingche(); P1_2=0;          n--;             if(n<0)n=0; delay1ms(10);   P1_2=1;       } if(P0_1==0)         {while(1) {tingche();  if(P0_2==0)   {while(P0_2==0)    tingche();    shou_fei++;    if(shou_fei==100)shou_fei=0;   }  if(P0_3==0)   {while(P0_3==0)    tingche();    shou_fei--;    if(shou_fei<0)shou_fei=99;   }  if(P0_5==0)  {while(P0_5==0)   tingche();   break;   }  } }}/****************时钟中断程序***************/void t0() interrupt 1{uint i; TH0=(65535-50000)/256;       TL0=(65535-50000)%256; i++; if(i==20)         {i=0; miao++; } if(miao==60) { miao=0; fen++; } if(fen==60) { fen=0; shi++; } if(shi==24) shi=0;}/******************主函数******************/void main(){shou_fei=20;    //初始的收费值为20 n=0;            //车位初始值为0 z=0;            //停车总数的初始值为0 TMOD=0x01;     //工作方式 TH0=(65535-50000)/256; TL0=(65535-50000)%256; shi=12;           //初始值 fen=30; miao=00; TR0=1; ET0=1; EA=1; while(1) { P0=P1=0xff;        //P1口置高电平 if(P0_7==0) { jiance();          //开始检测进出口的汽车 tingche(); } if(P0_7==1) {anjian(); shijian(); } }} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。