• 大小: 463KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-23
  • 语言: 其他
  • 标签: 计算器  

资源简介

可以计算9位数的计算器,程序试过了,没有问题,如果你感兴趣就下载吧.希望能帮助大家学习。。。

资源截图

代码片段和文件信息

#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

//共阳极数码管码表 
unsigned char code mabiao[]=
{
  0xc0  /*0*/
  0xf9  /*1*/
  0xa4  /*2*/
  0xb0  /*3*/
  0x99  /*4*/
  0x92  /*5*/
  0x82  /*6*/
  0xf8  /*7*/
  0x80  /*8*/
  0x90  /*9后面没有逗号的 */
};  //不要忘记这个分号 
//数码管位选 ~0x80是右边第一个数码管位选,~1是左边数码管位选 
unsigned char code weixuan[]={12480x100x200x400x80};
//anjianbiao[]是由原始按键编号通过该表转换获得电路面板的按键编号 
unsigned char code anjianbiao[]={123F1456F2789F3XING0ZHENF4}; 
//shuju[8]是显示缓存区,其中shuju[0]是个位,shuju[1]是十位...
//playindex,在中断里面进行显示一位数码管,playindex是显示序号 
unsigned char shuju[8]playindex;
//lx是计算器输入数据的第一个数据,ly是第二个数据ljieguo是计算器运算的结果
unsigned long int lxlyljieguo;
//s是进行减法运算时候正负标志,s=0表示是正,s=1表示是负数 
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;        //灭数码管,由于是共阳数码管,段码=0xff位选=0xff使得数码管灭掉 
 DEN=0;    //允许段码传输 
 WEN=0;    //允许位选传输 
 maichong();        //在CLK上产生锁存脉冲 
 WEN=1;    //停止位选传输 
 DEN=1;    //停止段码传输 
 
 P0=shuju[playindex];  //输出被显示数据的段码 
 DEN=0;    //允许段码传输 
 maichong();    //在CLK产生锁存脉冲 
 DEN=1;    //停止段码传输 

 P0=~weixuan[playindex]; //输出被显示数据的位选 ,注意前面的取反符号 
 WEN=0;    //允许位选传输 
 maichong();    //在CLK产生锁存脉冲
 WEN=1;    //停止位选传输

 playindex++;    //调整下一位显示数据位置 
 if(playindex==8)    //如果超出范围,则重复 
  playindex=0;    //利用T0每隔5MS产生中断,每次中断显示一位数据,从而实现延迟 
}
/*
//非中断方式实现显示 
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;    //读取按键,注意由于在上面已经行输出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


评论

共有 条评论