找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 102|回复: 0
收起左侧

停车场240329

[复制链接]
ID:918728 发表于 2024-3-29 15:35 | 显示全部楼层 |阅读模式
#include "oled.h"
#include <intrins.h>
//按钮
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;


sbit speaker1=P1^7;
sbit speaker2=P2^0;
sbit speaker3=P2^1;
sbit speaker4=P2^2;

sbit beep=P3^7;

#define uchar unsigned char
#define uint unsigned int
//==========================================================
uchar sec=0;//定时
uchar sec2=0;
uchar mode=0;//模式
uchar flag=0;
uchar time_err=60,error=0;
uchar kahao=0;//号
uchar point=0;
uchar beep_time=0;

uchar nian=24,yue=4,ri=1,shi=12,fen=24,miao=00;
uchar flag1,flag2;
uchar danjia=10,dangqianchewei=0,shengyu=0,zongchewei=8,shijian,shijian2,jiage,jiage2;
//==========================================================
uchar *p,*q;
//==========================================================
//号显示
void ka_disp()
{
    if(kahao==1)//C1
    {
                                OLED_ShowString(48,2,"C111");
                                
    }
    if(kahao==2)//C2
    {
                                OLED_ShowString(48,2,"C222");
    }        
}
void main()
{
                OLED_Init();                        //初始化OLED  
                OLED_Clear()          ;
    // 初始化12864
                OLED_ShowCHinese(0,0,0);//
                OLED_ShowCHinese(18,0,1);//
                OLED_ShowCHinese(36,0,2);//
                OLED_ShowCHinese(54,0,3);//
                OLED_ShowCHinese(72,0,4);//
                OLED_ShowCHinese(90,0,5);//
                OLED_ShowCHinese(108,0,6);//
                OLED_ShowCHinese(0,2,7);//zong
                OLED_ShowCHinese(18,2,8);//:               
                OLED_ShowCHinese(0,4,9);//sheng
                OLED_ShowCHinese(18,4,8);//:
    //定时器初始化
    TMOD|=0X01;
    TH0=0X3C;
    TL0=0XB0;
    ET0=1;//打开定时器0中断允许
    EA=1;//打开总中断
    TR0=1;//打开定时器
    while (1)
    {
        if(P1!=0xff)//蜂鸣器响
            beep_time=10;
        //错误检测
        if(time_err>0)
        {
            if(!k4)
            {
                time_err=60;
                mode=1;
                error=1;
                kahao=1;
            }
            if(!k5)
            {
                time_err=60;
                mode=1;
                error=1;
                kahao=2;
            }
            if(!k6)
            {
                time_err=60;
                mode=1;
                error=1;
                kahao=3;
            }
        }
                                if(shengyu<1)
                                {
                                         beep=0;
                                }  
        //按键检测
        if((mode<20)&&(time_err==0))
        {
            if(!k4)//1
            {
                mode=2;
                kahao=1;
                while(!k4);
            }
            if(!k5)//2
            {
                mode=3;
                kahao=2;
                while(!k5);
            }
            if(!k1)//设置
            {
                mode=4;
                if(point<8)
                    point++;
                else
                {
                    point=0;
                    mode=0;
                }
                while(!k1);
            }
            if(mode==4)
            {
                if(!k2)//加
                {
                    switch(point)
                    {
                    case 1://年
                                                                                        nian++;
                                                                                
                                if(nian>99){nian=0;}//年
                        break;
                    case 2://月
                                                                                        yue++;
                                if(yue>12){yue=1;}//
                          break;
                    case 3://日
                                                                                        ri++;
                                if(ri>31){ri=1;}//
                        break;
                    case 4://时
                                                                                        shi++;
                                if(shi>23){shi=0;}//
                        break;
                    case 5://分
                                                                                        fen++;
                                if(fen>59){fen=0;}//
                        break;

                    case 6://秒
                                                                                        miao++;
                                if(miao>59){miao=0;}//
                        break;
                    case 7://单价
                        if(danjia<200)
                            danjia++;
                        break;
                    case 8://车位
                        if(zongchewei<10)
                            zongchewei++;
                    }
                    while(!k2);
                }

if(!k3)//减
{
switch(point)
{
case 1://年
nian--;
if(nian>0){nian=99;}//
break;
case 2://月
yue--;
if(yue>0){yue=12;}//
break;
case 3://日
ri--;
if(ri>0){ri=31;}//
break;
case 4://时
shi--;
if(shi>0){shi=23;}//
break;
case 5://分
fen--;
if(fen>0){fen=59;}//
break;
case 6://秒
miao--;
if(miao>0){miao=59;}//
break;
case 7://单价
if(danjia>0)
danjia--;
break;
case 8://车位
if(zongchewei>0)
{
zongchewei--;
}

}
while(!k3);
}
}
}
}
}

//========================================================
//定时器中断
void Timer0() interrupt 1
{
    uchar i,j;
    uchar k,k1;
          uchar m,m1,m2,m3;
    if(beep_time>0)        //蜂鸣器控制
    {
        beep_time--;
        beep=0;
    }
    else
        beep=1;
    if(time_err>0) //启动倒计时
        time_err--;
    else
    {
        if(error==1)
        {
            mode=0;
            error=0;
        }
        if(mode==20)
            mode=0;
    }

                if(sec2++>19)//1s
                {        
                        sec2=0;
                        miao++;
                        if(miao>59)
                        {
                          miao=0;
                                fen++;
                                if(fen>60)
                                {
                                  fen=0;
                                        shi++;
                                        if(shi>23)
                                        {
                                          shi=0;
                                                ri++;
                                                if(ri>30)
                                                {
                                                        ri=1;
                                                  yue++;
                                                        if(yue>12)
                                                        {
                                                           yue=1;
                                                                 nian++;
                                                                if(nian>99)        
                {
                                                                  nian=0;
                                                                }
                                                        }
                                                }
                                        }
                                
                                }
                        }
                        
                }

                if(sec<10)//0.5s
                {               
                sec++;flag1++;
                }
    else
    {
        sec=0;
        flag=!flag;
        //初始界面
        if(mode==0)
        {
                                        if(flag1>50)
                                        {
                                                flag1=0;
                                          OLED_Clear();
                                        }
                                                speaker1=1;
                                                speaker2=1;
                                                speaker3=1;
                                                speaker4=1;        

                                                OLED_ShowCHinese(0,0,0);//
                                                OLED_ShowCHinese(18,0,1);//
                                                OLED_ShowCHinese(36,0,2);//
                                                OLED_ShowCHinese(54,0,3);//
                                                OLED_ShowCHinese(72,0,4);//
                                                OLED_ShowCHinese(90,0,5);//
                                                OLED_ShowCHinese(108,0,6);//
                                                OLED_ShowCHinese(0,2,7);//zong
                                                OLED_ShowCHinese(18,2,8);//:               
                                                OLED_ShowCHinese(0,4,9);//sheng
                                                OLED_ShowCHinese(18,4,8);//:                                                               
                                                OLED_ShowNum(42,2,zongchewei,3,16);                        
            shengyu=zongchewei-dangqianchewei;               
OLED_ShowNum(42,4,shengyu,3,16);        
//            //------------------------------时间
OLED_ShowNum(0,6,20,2,16);
OLED_ShowNum(16,6,nian,2,16);        
OLED_ShowString(32,6,"-");
if(yue<10)
{OLED_ShowNum(40,6,0,1,16);
OLED_ShowNum(48,6,yue%10,1,16);
}
else{OLED_ShowNum(40,6,yue,2,16);                                                        }
OLED_ShowString(56,6,"-");
if(ri<10){OLED_ShowNum(64,6,0,1,16);        
OLED_ShowNum(72,6,ri%10,1,16);                                                                }
else{                                                        OLED_ShowNum(64,6,ri,2,16);        }
if(shi<10)
{                                                  OLED_ShowNum(88,6,0,1,16);
OLED_ShowNum(96,6,shi%10,1,16);                                                                                                                        }
else                                                {                                                        OLED_ShowNum(88,6,shi,2,16);                                                                                                        }        
OLED_ShowString(104,6,":");
if(fen<10)
{                                                  OLED_ShowNum(108,6,0,1,16);
OLED_ShowNum(116,6,shi%10,1,16);                                                                                                        }
else                                                {                                                OLED_ShowNum(108,6,fen,2,16);                                                        }                                                                                        }               

        //错误界面
        if(mode==1)
        {
            OLED_Clear();               // 清屏
                                                OLED_ShowCHinese(0,0,0);//
                                                OLED_ShowCHinese(18,0,1);//
                                                OLED_ShowCHinese(36,0,2);//
                                                OLED_ShowCHinese(54,0,3);//
                                                OLED_ShowCHinese(72,0,4);//
                                                OLED_ShowCHinese(90,0,5);//
                                                OLED_ShowCHinese(108,0,6);//           
                                                OLED_ShowCHinese(0,2,10);//
                                                OLED_ShowCHinese(16,2,11);//
            OLED_ShowString(32,2,":");                                       
            ka_disp();//显示号
//请重刷!
OLED_ShowCHinese(0,4,12);//
OLED_ShowCHinese(18,4,13);//
OLED_ShowCHinese(36,4,14);//
OLED_ShowString(54,4,"!");                                                        
}
if((mode>1)&&(mode<4))
{
OLED_Clear();               // 清屏
OLED_ShowCHinese(0,0,0);//
OLED_ShowCHinese(18,0,1);//
OLED_ShowCHinese(36,0,2);//
OLED_ShowCHinese(54,0,3);//
OLED_ShowCHinese(72,0,4);//
OLED_ShowCHinese(90,0,5);//
OLED_ShowCHinese(108,0,6);//           
OLED_ShowCHinese(0,2,10);//
OLED_ShowCHinese(18,2,11);//
OLED_ShowString(36,2,":");
ka_disp();//显示号        
}
//1记录、结算
if(mode==2)
{
//判断进出
if(k>0)//结算
{
k=0;
speaker1=1;
speaker2=1;
speaker3=1;
speaker4=0;        
dangqianchewei=dangqianchewei-1;        
i=shi;
j=fen;
m1=shi*60+j;
shijian=m1-m;        
OLED_ShowCHinese(0,4,15);//计时
OLED_ShowCHinese(16,4,16);//
OLED_ShowString(36,4,":");        
OLED_ShowNum(48,4,shijian%1000/100,1,16);
OLED_ShowNum(56,4,shijian%100/10,1,16);        
OLED_ShowNum(64,4,shijian%10,1,16);        
OLED_ShowCHinese(72,4,30);    //分
OLED_ShowCHinese(0,6,31);    //共计
OLED_ShowString(36,6,":");        
jiage=shijian*danjia;//价格
OLED_ShowNum(48,6,jiage%1000/100,1,16);
OLED_ShowNum(56,6,jiage%100/10,1,16);               
OLED_ShowString(64,6,".");                                                        
OLED_ShowNum(72,6,jiage%10,1,16);                                       
OLED_ShowCHinese(88,6,29);//元
            }        
else//记录
{
k=1;                                                                speaker1=0;                                                                speaker2=1;                                                                speaker3=1;                                                                speaker4=1;
dangqianchewei=dangqianchewei+1;
i=shi;
j=fen;
m=shi*60+j;        
OLED_ShowCHinese(0,4,25);//单价
OLED_ShowCHinese(16,4,26);
OLED_ShowString(32,4,":");        
OLED_ShowNum(40,4,danjia%100/10,2,16);        
OLED_ShowString(56,4,".");        
OLED_ShowNum(64,4,danjia%10,1,16);
OLED_ShowCHinese(80,4,29);//元
OLED_ShowString(96,4,"/min");                        //请停车!
OLED_ShowCHinese(8,6,12);
OLED_ShowCHinese(24,6,0);
OLED_ShowCHinese(43,6,1);           }
            time_err=100;
            mode=20;
        }
//2记录、结算
if(mode==3)
{        //判断进出
if(k1>0)//结算
{        k1=0;
speaker1=1;
speaker2=1;
speaker3=1;
speaker4=0;        
dangqianchewei=dangqianchewei-1;        
i=shi;
j=fen;
m2=i*60+j;
shijian2=m2-m3;
OLED_ShowCHinese(0,4,15);//计时
OLED_ShowCHinese(16,4,16);//
OLED_ShowString(36,4,":");        
OLED_ShowNum(48,4,shijian2%1000/100,1,16);
OLED_ShowNum(56,4,shijian2%100/10,1,16);        
OLED_ShowNum(64,4,shijian2%10,1,16);        
OLED_ShowCHinese(72,4,30);    //分
OLED_ShowCHinese(0,6,31);    //共计
OLED_ShowString(36,6,":");        
jiage2=shijian2*danjia;//价格
OLED_ShowNum(48,6,jiage2%1000/100,1,16);
OLED_ShowNum(56,6,jiage2%100/10,1,16);               
OLED_ShowString(64,6,".");                                                        
OLED_ShowNum(72,6,jiage2%10,1,16);                                                        
OLED_ShowCHinese(88,6,29);//元
}        
else//记录
{
         k1=1;
                speaker1=1;
                speaker2=0;
                speaker3=1;
                speaker4=1;        
                dangqianchewei=dangqianchewei+1;                                                               
                i=shi;
                j=fen;
                m3=i*60+j;
                 OLED_ShowCHinese(0,4,25);//单价
                OLED_ShowCHinese(16,4,26);
                OLED_ShowString(32,4,":");        
                OLED_ShowNum(40,4,danjia%100/10,2,16);        
                OLED_ShowString(56,4,".");                                                        
                OLED_ShowNum(64,4,danjia%10,1,16);
                OLED_ShowCHinese(80,4,29);//元
                OLED_ShowString(96,4,"/min");        
                //请停车!
                OLED_ShowCHinese(8,6,12);
                OLED_ShowCHinese(24,6,0);
                OLED_ShowCHinese(43,6,1);
                k=j*256+i-1;
}
            time_err=100;
            mode=20;
        }
        //==============================================设置
        if(mode==4)
        {
            if(point<7)
            {
                OLED_ShowCHinese(0,2,17);//日期
                OLED_ShowCHinese(16,2,18);//
                OLED_ShowCHinese(0,4,19);//时间
                OLED_ShowCHinese(16,4,20);//
                OLED_ShowString(40,2,":");
                OLED_ShowString(40,4,":");
                OLED_ShowString(64,2,"-");        
                OLED_ShowString(64,4,":");                                                               
                OLED_ShowString(88,2,"-");        
                OLED_ShowString(88,4,":");
}


else
{                                       
                OLED_ShowCHinese(18,0,21);//设置参数
                OLED_ShowCHinese(36,0,22);
                OLED_ShowCHinese(54,0,23);
                OLED_ShowCHinese(72,0,24);
                OLED_ShowCHinese(0,2,25);//单价
                OLED_ShowCHinese(18,2,26);
                OLED_ShowString(36,2,":");
                OLED_ShowCHinese(0,4,1);//车位
                OLED_ShowCHinese(18,4,27);
                OLED_ShowString(36,4,":");
                OLED_ShowCHinese(80,2,29);//元
                OLED_ShowString(96,2,"/min");                                                        
                OLED_ShowCHinese(80,4,27);//位
                                                                        
}

if(point<7)
{
                if(point==1)//年
                {
                                if(flag)
                                {
                                                OLED_ShowNum(48,2,nian,2,16);        
                                }
                                else
                                {
                                                OLED_ShowString(48,2,"__");                                                                  
                                
                                }
                }
                else
                {
                                OLED_ShowNum(48,2,nian,2,16);                                                               
                }

if(point==2)//月
{
                if(flag)
                {
                                OLED_ShowNum(72,2,yue,2,16);        
                }
                else
                {
                                OLED_ShowString(72,2,"__");                                                                  
               
                }
}
else
{
                OLED_ShowNum(72,2,yue,2,16);                                                               
}
if(point==3)//日
{
                if(flag)
                {
                                OLED_ShowNum(96,2,ri,2,16);        
                }
                else
                {
                                OLED_ShowString(96,2,"__");                                                                  
               
                }
}
else
{
                OLED_ShowNum(96,2,ri,2,16);                                                               
}

if(point==4)//时
{
                if(flag)
                {
                                OLED_ShowNum(48,4,shi,2,16);        
                }
                else
                {
                                OLED_ShowString(48,4,"__");                                                                  
               
                }
}
else
{
                OLED_ShowNum(48,4,shi,2,16);                                                               
}
if(point==5)//分
{
                if(flag)
                {
                                OLED_ShowNum(72,4,fen,2,16);        
                }
                else
                {
                                OLED_ShowString(72,4,"__");                                                                  
               
                }
}
else
{
                OLED_ShowNum(72,4,fen,2,16);                                                               
}                                                               

if(point==6)//秒
{
        if(flag)
        {
                        OLED_ShowNum(96,4,miao,2,16);        
        }
        else
        {
                        OLED_ShowString(96,4,"__");                                                                  
        
        }
}
else
{
        OLED_ShowNum(96,4,miao,2,16);                                                               
}                                                               
}

else
{
if(point==7)//单价
{
        if(flag)
        {
                        OLED_ShowNum(48,2,danjia/100,1,16);
                        OLED_ShowNum(56,2,danjia%100/10,1,16);
                        OLED_ShowString(64,2,".");                                                                                       
                        OLED_ShowNum(72,2,danjia%10,1,16);                                                                                       
        }
        else
        {
                        OLED_ShowString(48,2,"__");
                        OLED_ShowString(72,2,"_");                                                                                         
        }
}

else
{
                OLED_ShowNum(48,2,danjia/100,1,16);
                OLED_ShowNum(56,2,danjia%100/10,1,16);
                OLED_ShowString(64,2,".");                                                                                       
                OLED_ShowNum(72,2,danjia%10,1,16);               
}
if(point==8)//车位
{
                if(flag)
                {
                                OLED_ShowNum(48,4,zongchewei%1000/100,1,16);
                                OLED_ShowNum(56,4,zongchewei%100/10,1,16);                                                                                       
                                OLED_ShowNum(64,4,zongchewei%10,1,16);        
                }
                else
                {
                                OLED_ShowString(48,4,"___");         
                }
}

                                                else
                                                {
                                                                k=j*256+i;
                                                                OLED_ShowNum(48,4,zongchewei%1000/100,1,16);
                                                                OLED_ShowNum(56,4,zongchewei%100/10,1,16);                                                                                       
                                                                OLED_ShowNum(64,4,zongchewei%10,1,16);                        
                                                }
                                                
                                }
                        if(flag1>10)
                        {
                                flag1=0;
                                OLED_Clear();
                        }                                                        
                }
}

    TH0=0X3C; //重装定时器
    TL0=0XB0;
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表