📄 main_b.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 + -