?? ch451_b.c
字號(hào):
/********************************************************************************
* 描述: *
* CH451程序模塊 *
*******************************************************************************/
#include<reg51.h> /*=== 頭文件包含 ===*/
#include<intrins.h>
#include<absacc.h>
#include <IC_CARD_B.h>
uchar ch451_key;
uchar key_flag;
uint M;
uchar m0;
uchar m1;
uchar m2;
uchar m3;
bit flag_enter;
bit flag_show;
uchar flag_num;
uchar flag_cnt=0;
uchar input_code[4];
uchar pdata ds_num[10]="0123456789";
void decide_num(void);
void input_num(void);
/********************************************************************
函 數(shù) 名:ch451中斷服務(wù)程序
功 能:獲取鍵值
說 明:
調(diào) 用:
入口參數(shù):
返 回 值:ch451_key
***********************************************************************/
void ch451_inter() interrupt 2 using 1
{
unsigned char i; /*定義循環(huán)變量*/
unsigned char command,keycode; /*定義控制字寄存器,和中間變量定時(shí)器*/
command=0x07; /*讀取鍵值命令的高4位0111B*/
EX1 = 0;
ch451_load=0; /*命令開始*/
for(i=0;i<4;i++)
{
ch451_din=command&1; /*低位在前,高位在后*/
ch451_clk=0;
command>>=1; /*右移一位*/
ch451_clk=1; /*產(chǎn)生時(shí)鐘上升沿鎖通知CH451輸入位數(shù)據(jù)*/
}
ch451_load=1; /*產(chǎn)生加載上升沿通知CH451處理命令數(shù)據(jù)*/
keycode=0; /*清除keycode*/
for(i=0;i<7;i++)
{
keycode<<=1; /*數(shù)據(jù)作移一位,高位在前,低位在后*/
keycode|=ch451_dout; /*從高到低讀入451的數(shù)據(jù)*/
ch451_clk=0; /*產(chǎn)生時(shí)鐘下升沿通知CH451輸出下一位*/
ch451_clk=1;
}
ch451_key=keycode; /*保存上次的鍵值*/
decide_num();
input_num();
EX1 = 1;
IE1=0; /*清中斷標(biāo)志*/
}
/********************************************************************
函 數(shù) 名:ch451_init()
功 能:對(duì)ch451芯片進(jìn)行初始化
說 明:
調(diào) 用:
入口參數(shù):
返 回 值:
***********************************************************************/
void ch451_init(void)
{
ch451_din = 0; /*先低后高,選擇4線輸入*/
ch451_din = 1;
ch451_load = 1;
ch451_clk = 1;
_nop_();
}
/********************************************************************
函 數(shù) 名:ch451_write()
功 能:把12位的指令或數(shù)據(jù)寫入ch451
說 明:12位數(shù)據(jù)或指令的寫入順序是低位
調(diào) 用:
入口參數(shù):command
返 回 值:
***********************************************************************/
void ch451_write(uint command)
{
unsigned char i;
EX1=0; /*禁止鍵盤中斷*/
ch451_load=0; /*命令開始*/
for(i=0;i<12;i++)
{ /*送入12位數(shù)據(jù),低位在前*/
ch451_din=command&1;
ch451_clk=0;
command>>=1;
ch451_clk=1; /*上升沿有效*/
}
ch451_load=1; /*加載數(shù)據(jù)*/
EX1=1;
}
/********************************************************************
函 數(shù) 名:input_num()
功 能:獲取由鍵盤輸入的數(shù)值
說 明:將由鍵盤輸入的密碼值存入到數(shù)組input_code[6]中。
調(diào) 用:
入口參數(shù):
返 回 值:
***********************************************************************/
void input_num(void)
{
if(flag_cnt==3)
{
flag_num=0x0a;
}
switch(flag_num){
case 0x00:
flag_num=0x0a;
write_GLCD(ds_num[0]);
input_code[flag_cnt]=0x00;
break;
case 0x01:
flag_num=0x0a;
write_GLCD(ds_num[1]);
input_code[flag_cnt]=0x01;
break;
case 0x02:
flag_num=0x0a;
write_GLCD(ds_num[2]);
input_code[flag_cnt]=0x02;
break;
case 0x03:
flag_num=0x0a;
write_GLCD(ds_num[3]);
input_code[flag_cnt]=0x03;
break;
case 0x04:
flag_num=0x0a;
write_GLCD(ds_num[4]);
input_code[flag_cnt]=0x04;
break;
case 0x05:
flag_num=0x0a;
write_GLCD(ds_num[5]);
input_code[flag_cnt]=0x05;
break;
case 0x06:
flag_num=0x0a;
write_GLCD(ds_num[6]);
input_code[flag_cnt]=0x06;
break;
case 0x07:
flag_num=0x0a;
write_GLCD(ds_num[7]);
input_code[flag_cnt]=0x07;
break;
case 0x08:
flag_num=0x0a;
write_GLCD(ds_num[8]);
input_code[flag_cnt]=0x08;
break;
case 0x09:
flag_num=0x0a;
write_GLCD(ds_num[9]);
input_code[flag_cnt]=0x09;
break;
default:
break;
}
if((flag_cnt!=3)&&(flag_enter==0))
{
flag_cnt++;
}
}
/********************************************************************
函 數(shù) 名:decide_num()
功 能:將相應(yīng)的按鍵識(shí)別成對(duì)應(yīng)的數(shù)值
說 明:
調(diào) 用:
入口參數(shù):
返 回 值:
***********************************************************************/
void decide_num(void)
{
switch(ch451_key){
case 0x40:
flag_num=0x00;
break;
case 0x41:
flag_num=0x01;
break;
case 0x42:
flag_num=0x02;
break;
case 0x43:
flag_num=0x03;
break;
case 0x48:
flag_num=0x04;
break;
case 0x49:
flag_num=0x05;
break;
case 0x4a:
flag_num=0x06;
break;
case 0x4b:
flag_num=0x07;
break;
case 0x50:
flag_num=0x08;
break;
case 0x51:
flag_num=0x09;
break;
case 0x52:
flag_enter=1;
break;
default:
break;
}
ch451_key=0xff;
}
/********************************************************************
函 數(shù) 名:decide_num()
功 能:將相應(yīng)的按鍵識(shí)別成對(duì)應(yīng)的數(shù)值
說 明:
調(diào) 用:
入口參數(shù):
返 回 值:
***********************************************************************/
void input_money(void)
{
if(flag_cnt==3) /*確認(rèn)按鍵按下時(shí)意輸入了3位數(shù)的購(gòu)電金額*/
{
m0=input_code[0];
m1=input_code[1];
m2=input_code[2];
input_code[0]=0x00;
input_code[1]=0x00;
input_code[2]=0x00;
M=m0*100+m1*10+m2;
}
if(flag_cnt==2) /*確認(rèn)按鍵按下時(shí)意輸入了2位數(shù)的購(gòu)電金額*/
{
m0=input_code[0];
m1=input_code[1];
input_code[0]=0x00;
input_code[1]=0x00;
M=m0*10+m1;
}
if(flag_cnt==1) /*確認(rèn)按鍵按下時(shí)意輸入了1位數(shù)的購(gòu)電金額*/
{
M=input_code[0];
input_code[0]=0x00;
}
if(flag_cnt==0) /*確認(rèn)按鍵按下時(shí)意輸入了0位數(shù)的購(gòu)電金額*/
{
M=0;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -