資源簡介
可以計算9位數(shù)的計算器,程序試過了,沒有問題,如果你感興趣就下載吧.希望能幫助大家學習。。。

代碼片段和文件信息
#include?
//CLK?74HC377?傳輸鎖存?
#define?CLK?P2_0??
//DEN?段碼允許傳輸控制引腳?
#define?DEN?P2_1
//WEN?位選允許傳輸控制引腳?
#define?WEN?P2_2
#define?maichong()??CLK=0;CLK=1;CLK=1;CLK=0
//功能按鍵起別名,方便使用
#define?F1?10
#define?F2?11
#define?F3?12
#define?F4?13
#define?XING?14
#define?ZHEN?15
//共陽極數(shù)碼管碼表?
unsigned?char?code?mabiao[]=
{
??0xc0??/*0*/
??0xf9??/*1*/
??0xa4??/*2*/
??0xb0??/*3*/
??0x99??/*4*/
??0x92??/*5*/
??0x82??/*6*/
??0xf8??/*7*/
??0x80??/*8*/
??0x90??/*9后面沒有逗號的?*/
}; ?//不要忘記這個分號?
//數(shù)碼管位選?~0x80是右邊第一個數(shù)碼管位選,~1是左邊數(shù)碼管位選?
unsigned?char?code?weixuan[]={12480x100x200x400x80};
//anjianbiao[]是由原始按鍵編號通過該表轉(zhuǎn)換獲得電路面板的按鍵編號?
unsigned?char?code?anjianbiao[]={123F1456F2789F3XING0ZHENF4};?
//shuju[8]是顯示緩存區(qū),其中shuju[0]是個位,shuju[1]是十位...
//playindex,在中斷里面進行顯示一位數(shù)碼管,playindex是顯示序號?
unsigned?char?shuju[8]playindex;
//lx是計算器輸入數(shù)據(jù)的第一個數(shù)據(jù),ly是第二個數(shù)據(jù)ljieguo是計算器運算的結(jié)果
unsigned?long?int?lxlyljieguo;
//s是進行減法運算時候正負標志,s=0表示是正,s=1表示是負數(shù)?
unsigned?char?s;
void?delay(void)
{
??int?i;
??for(i=0;i<500;i++);
}
/////////////////////////////
void?t0isr(void)?interrupt?1
{
?TH0=(65536-5000)/256;?//從新給T0賦予初始值,定時時間為5ms
?TL0=(65536-5000)%256;
?P0=0xff; ???????//滅數(shù)碼管,由于是共陽數(shù)碼管,段碼=0xff位選=0xff使得數(shù)碼管滅掉?
?DEN=0; ???//允許段碼傳輸?
?WEN=0; ???//允許位選傳輸?
?maichong(); ??? ???//在CLK上產(chǎn)生鎖存脈沖?
?WEN=1; ???//停止位選傳輸?
?DEN=1; ???//停止段碼傳輸?
?
?P0=shuju[playindex];??//輸出被顯示數(shù)據(jù)的段碼?
?DEN=0; ???//允許段碼傳輸?
?maichong(); ???//在CLK產(chǎn)生鎖存脈沖?
?DEN=1; ???//停止段碼傳輸?
?P0=~weixuan[playindex];?//輸出被顯示數(shù)據(jù)的位選?,注意前面的取反符號?
?WEN=0; ???//允許位選傳輸?
?maichong(); ???//在CLK產(chǎn)生鎖存脈沖
?WEN=1; ???//停止位選傳輸
?playindex++; ???//調(diào)整下一位顯示數(shù)據(jù)位置?
?if(playindex==8) ???//如果超出范圍,則重復?
??playindex=0; ???//利用T0每隔5MS產(chǎn)生中斷,每次中斷顯示一位數(shù)據(jù),從而實現(xiàn)延遲?
}
/*
//非中斷方式實現(xiàn)顯示?
void?play(void)
{
?char?i;
?for(i=0;i<8;i++)
??{
????P0=0xff;
DEN=0;
WEN=0;
maichong(); ???
WEN=1;
DEN=1;
P0=shuju[i];
DEN=0;
maichong();
DEN=1;
P0=~weixuan[i];
WEN=0;
maichong();
WEN=1;
delay();
??}
}
*/
////////////////////////////////
unsigned?char?getkey(void)
{
??unsigned?char?keyliehangbianhao;
??P1=0xf; ???//行輸出1,列輸出0
??key=P1; ???//讀取行信息?
??key=key?&?0xf;???//保留行信息,去掉列信息?
??if(key==0xf) ???//如果行信息全部是1,表明沒有按鍵按下,則返回0XFF退出
???return?0xff;
??delay();?????????//延遲,然后在讀取按鍵,目的是判斷是不是干擾信號
??key=P1; ???//讀取按鍵,注意由于在上面已經(jīng)行輸出1,列輸出0,所以這里可以省掉?
??key=key?&?0xf;???//保留行信息,去掉列信息
??if(key==0xf) ???//如果行信息全部是1,表明沒有按鍵按下,原來是干擾,返回0XFF退出
???return?0xff;
//如果行信息是0000?1110=0xe,表明按鍵按下在第0行位置?
??if(key==0xe)?//0000?1110
???hang=0;
//如果行信息是0000?1101=0xd,表明按鍵按下在第1行位置?
??if(key==0xd)?//0000?1101
???hang=1;
//如果行信息是0000?1011=0xb,表明按鍵按下在第2行位置?
??if(key==0xb)?//0000?1011
???hang=2;
//如果行信息是0000?0111=0x7,表明按鍵按下在第3行位置?
??if(key==0x7)?//0000?0111
???hang=3;????
??P1=0xf0; ??????//列輸出1,行輸出0
??key=P1; ??//讀取按鍵?
??key=key?&?0xf0;?//保留列信息,去掉行信息?
//如果列信息是1110?0000=0xe0,表明按鍵按下在第0列位置?
??if(key==0xe0)?//1110?0000
???lie=0;
//如果列信息是1101?00
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????10632??2009-12-19?15:38??af091219_計算器\key_led
?????文件?????145486??2013-08-08?08:36??af091219_計算器\key_led.DSN
?????文件???????4005??2009-12-19?15:38??af091219_計算器\key_led.hex
?????文件?????????44??2009-12-19?15:38??af091219_計算器\key_led.lnp
?????文件??????12298??2009-12-19?15:38??af091219_計算器\key_led.M51
?????文件???????1165??2010-04-08?09:20??af091219_計算器\key_led.Opt
?????文件??????????0??2010-04-08?09:19??af091219_計算器\key_led.plg
?????文件????????768??2013-08-08?08:37??af091219_計算器\key_led.PWI
?????文件???????1675??2010-04-08?09:20??af091219_計算器\key_led.Uv2
?????文件???????1161??2010-01-28?20:36??af091219_計算器\key_led_Opt.Bak
?????文件???????1679??2010-01-28?20:36??af091219_計算器\key_led_Uv2.Bak
?????文件?????838014??2003-02-27?09:50??af091219_計算器\Last?Loaded?key_led.DBK
?????文件???????7965??2010-01-28?20:36??af091219_計算器\Text1.c
?????文件??????17569??2010-01-28?20:36??af091219_計算器\Text1.LST
?????文件??????13152??2009-12-19?15:38??af091219_計算器\Text1.OBJ
?????目錄??????????0??2013-08-08?08:37??af091219_計算器
-----------?---------??----------?-----??----
??????????????1055613????????????????????16
評論
共有 條評論