⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main_b.c

📁 IC卡购电软件实现
💻 C
字号:
/*******************************************************************************
*  标题:  北京蓝海微芯LJD-SY-5200单片机开发系统演示程序                        *
*  文件:  MAIN.C                                                               *
*  日期:  2006-8-9                                                             *
*  版本:  1.0                                                                  *
*  作者:  蓝海微芯                                                             *
*  网站: http://www.ljd-2008.com                                              *
********************************************************************************
*  描述:                                                                       *
*           模拟房间购电,把IC卡内的金额写到24C02中                            *        
*                                                                              *
*                                                                              *
********************************************************************************
* 【版权】 Copyright(C)微芯科技 http://www.bluemcu.com    All Rights Reserved  *          
* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!                  *
*******************************************************************************/
#include  <reg51.h>                         /*=== 头文件包含 ===*/
#include  <absacc.h>
#include  <intrins.h>
#include  <IC_CARD_B.h>

#define  uchar  unsigned  char
#define  uint   unsigned  int
  
uchar pdata hz_ts1[14]="电量不足请购电";
uchar pdata hz_ts2[15]="剩余电量:XXX度";
uchar pdata hz_ts3[28]="购电金额超过卡内余额无法购电";
uchar pdata hz_ts4[8 ]="购电成功";
uchar pdata hz_ts5[13]="购电量:XXXX度";
uchar pdata hz_ts6[15]="卡内余额:XXXX元";
uchar pdata hz_ts7[12]="  插卡有误  ";
uchar pdata hz_ts8[14]="  请重新插卡  ";
uchar pdata hz_ts9[15]="请输入购电金额:";
uchar pdata hz_ts10[23]="输入金额太大 请重新输入";

uchar count;
bit   flag_count;
uint  K;
uchar i;
uint  N;
uchar k0;
uchar k1;
uchar k2;
uchar n0;
uchar n1;
uchar n2;
uchar EOC;

uchar read_num[2];  
uchar RST_CODE[4]={0xA2,0x13,0x10,0x91};
/********************************************************************
函 数 名:delay_1s()
功    能:延时1s
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void delay_1s(void)
{
  uint p;
  uint r;

  for(r=0;r<100;r++)
  for(p=0;p<1500;p++);
}
/********************************************************************
函 数 名:buy_power()
功    能:购买电量调用子程序模块
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void buy_power(void)
{
  EOC=rdsm_ec();                     /*读错误计数器*/
  EOC=verifi();                      /*校验密码*/
  EOC=rdsm_ec();
  ICDATA[0]=N;
  wrmm();                            /*把余额写入到IC卡*/
  read_num[0]=K+M;                          
  write_iic_data(read_num,0,1);      /*把剩余电量写入到24C02中*/
  initial_GLCD();
  command_GLCD(0x80);
  for(i=0;i<8;i++)
  {
    write_GLCD(hz_ts4[i]);           /*显示购电成功*/
  }
  delay_1s();
  delay_1s();
  initial_GLCD();
  command_GLCD(0x80);
  for(i=0;i<7;i++)
  {
    write_GLCD(hz_ts5[i]);           /*显示购电量*/
  }
  m1=M/100;
  m2=M%100/10;
  m3=M%100%10;
  M=0;
  write_GLCD(ds_num[m1]);
  write_GLCD(ds_num[m2]);
  write_GLCD(ds_num[m3]);
  write_GLCD(hz_ts5[11]);
  write_GLCD(hz_ts5[12]);
  delay_1s();
  delay_1s();
  initial_GLCD();
  command_GLCD(0x80);
  for(i=0;i<9;i++)
  {
    write_GLCD(hz_ts6[i]);          /*显示卡内余额*/
  }
  n0=N/100;
  n1=N%100/10;
  n2=N%100%10;
  write_GLCD(ds_num[n0]);
  write_GLCD(ds_num[n1]);
  write_GLCD(ds_num[n2]);
  write_GLCD(hz_ts6[13]);
  write_GLCD(hz_ts6[14]);
}
/********************************************************************
函 数 名:no_enough()
功    能:提示卡内余额不足
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void no_enough(void)
{
  initial_GLCD();
  command_GLCD(0x80);
  for(i=0;i<14;i++)
  {
    write_GLCD(hz_ts3[i]);       /*提示卡内余额不足*/
  }
  command_GLCD(0x90);
  for(i=14;i<28;i++)
  {
    write_GLCD(hz_ts3[i]);
  }
}
/********************************************************************
函 数 名:IC_right()
功    能:判断插卡正确后调用子程序模块
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void IC_right(void)
{
  initial_GLCD();
  command_GLCD(0x80);
  for(i=0;i<15;i++)
  {
    write_GLCD(hz_ts9[i]);           /*提示输入购电金额*/
  }
  command_GLCD(0x90);
  while(flag_enter==0);              /*等待确认按键按下*/
  input_money();                     /*获取由键盘输入的购电金额*/
  flag_cnt=0;
  flag_enter=0;                      /*读主存储区*/
  N=ICDATA[0];
  while(M>255)                       /*当购电金额超过255时提示,输入购电金额太大*/
  {
    initial_GLCD();
    command_GLCD(0x80);
    for(i=0;i<13;i++)
    {
      write_GLCD(hz_ts10[i]);
    }
    command_GLCD(0x90);
    for(i=13;i<23;i++)
    {
      write_GLCD(hz_ts10[i]);
    }
    delay_1s();
    delay_1s();
    initial_GLCD();
    command_GLCD(0x80);
    for(i=0;i<15;i++)
    {
      write_GLCD(hz_ts9[i]);
    }
    command_GLCD(0x90);
    while(flag_enter==0);            /*等待确认按键按下*/
    input_money();                   /*获取由键盘输入的购电金额*/
    flag_enter=0;
    flag_cnt=0;    
  }
  N=N-M;                 
  if(N>0)                           /*若余额足够多,则允许购电*/
  {
    buy_power();
  }
  else                              /*否则提示卡内余额不足*/
  {
    no_enough();
  }
  delay_1s();
  delay_1s();
  initial_GLCD();
}
/********************************************************************
函 数 名:IC_wrong()
功    能:提示插卡有误
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void IC_wrong(void)
{
  initial_GLCD();
  command_GLCD(0x80);
  for(i=0;i<12;i++)
  {
    write_GLCD(hz_ts7[i]);
  }
  command_GLCD(0x90);
  for(i=0;i<14;i++)
  {
    write_GLCD(hz_ts8[i]);
  }
  delay_1s();
  delay_1s();
  initial_GLCD();
}
/********************************************************************
函 数 名:isr_time0()
功    能:定时器0中断服务子程序
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void isr_time0(void) interrupt 1 using 3
{
  TH0=0x4b;
  TL0=0xff;
   
  if(count==40)
  {
    count=0;
    flag_count=1;
  }
  else
  {
    count++;
  }
}
/********************************************************************
函 数 名:system_init()
功    能:初始化子程序
说    明:
调    用:
入口参数:
出口参数:
***********************************************************************/
void system_init(void)
{
  //TMOD=0x01;
  //TH0=0x4b;
  //TL0=0xff;
  EX1=1;
  PX1=1;
  //ET0=0;
  EA=1;
  //TR0=1;
  P1_4=1;
  P1_4=0;
  P1_5=1;
  P1_3=1;
  ch451_init();
  ch451_write(0x402);   /*开键盘,关看门狗、显示*/
  initial_GLCD();
}
/********************************************************************
函 数 名:main()
功    能:主程序
说    明:
***********************************************************************/
main()
{
  system_init();
  while(1)
  {
    read_iic_data(read_num,0,1);        /*首先获取剩余电量*/
    K=read_num[0];
    k0=K/100;
    k1=K%100/10;
    k2=K%100%10;
    /*while(flag_count)
    {
      flag_count=0;
      if(K!=0)
      {
        K--;
        read_num[0]=K;
        write_iic_data(read_num,0,1);
      }
    }*/
    if(K==0)                        /*若剩余电量为零则提示电量不足*/
    {
      command_GLCD(0x80);
      for(i=0;i<14;i++)
      {
        write_GLCD(hz_ts1[i]);
      } 
    }
    else                           /*若剩余电量不为零则对剩余电量进行显示*/
    {
      command_GLCD(0x80);
      for(i=0;i<9;i++)
      {
        write_GLCD(hz_ts2[i]);
      }
      write_GLCD(ds_num[k0]);
      write_GLCD(ds_num[k1]);
      write_GLCD(ds_num[k2]);
      write_GLCD(hz_ts2[12]);
      write_GLCD(hz_ts2[13]);
    }
    while(flag_enter==1)         /*首次按下确认键进入购电界面*/
    {
      initial_GLCD();
      flag_cnt=0;
      flag_enter=0;
      rdmm();
      i=0;
      while(RSTANSER[i]==RST_CODE[i])      /*判断插卡是否正确*/
      {
        i++;
        if(i==4)
        break;
      }
      if(i==4)          
      {
        IC_right();   /*插卡正确则提示输入购电金额*/
      }
      else
      {
        IC_wrong();   /*否则提示插卡有误*/
      }
    }
  }
}
/*-------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -