程序是自动停车收费系统的#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(); } }}
此帖出自
小平头技术问答
一周热门 更多>