资源简介

基于唐都微机实验箱 利用8255a led数码管 4*4键盘实现加减乘除

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

void dis(void);
void key(void);
void clear(void);
void ccscan(void);
void putbuf(void);
void getkey(void);
void TheFirstOptr(void);
void TheSecondOptr(void);
void initial(void);
int  reset(void);
void dierr(void);
void Operate(void);
void proceed(void);
void Output(void);
void delay(int time);

//****************根据查看配置信息修改下列符号值*******************
#define  IOY0         0x3000
//****************小数点标志位*************************************
#define  SIXTH     0x20
#define  FIFTH     0x10
#define  FOURTH     0x08
#define  THIRD        0x04
#define  SECOND       0x02
#define  FIRST        0x01
//*****************运算符定义**************************************
#define  DDIV       0x03
#define  DMUL   0x07
#define  DSUB         0x0B
#define  DADD         0x0F
#define  EQUAL        0x0E
#define  DOT          0x0D
//*****************************************************************
#define  MY8255_A     IOY0 + 0x00*4
#define  MY8255_B     IOY0 + 0x01*4
#define  MY8255_C     IOY0 + 0x02*4
#define  MY8255_MODE  IOY0 + 0x03*4
//*****************************************************************
//*****************************************************************
char a[] = {0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x07 0x7f 0x6f 0x77 0x7c 0x39 0x5e 0x79 0x71};
char b[] = {0x00 0x00 0x00 0x00 0x00 0x00};
char c[] = {0x40 0x79 0x40}; //-E-错误标志

char Reset; //AC键
char ERR; //错误标志
char op; //运算符
char op1; //第一次输入的运算符
char op2; //第二次输入的运算符
char yiWan; //第一个操作数处理完
char erWan; //第二个操作数处理完
char minor; //结果为负数
int  cc; //没有任何按键按下时cc全0
int  b_n; //当前输入数字个数
int  n; //按下键的位置0-15
unsigned short int flag = 0;    //小数点标志
double exp1;
double exp2;
double result;
int  xiao[6] = {FIRSTSECONDTHIRDFOURTHFIFTHSIXTH};
//*****************************************************************

void key(void)
{
if (bioskey(1) != 0)
{
exit(0);
}
}

//*****************************************************************

void clear(void)
{
outp(MY8255_B 0x00);
}

//*****************************************************************

void ccscan(void)
{
outp(MY8255_A 0x00);
cc = inp(MY8255_C);
cc = (~cc) & 0x0F; //00001111取反屏蔽高位没有任何按键按下时cc全0
}

//*****************************************************************

void delay(int time)
{
int i;
int j;
for(i=0;i<=time;i++)
{
for(j=0;j<=0x100;j++)
{   }
}
return;
}

//*****************************************************************

void dis(void)
{
int i;
int j = 0xdf; //11011111选通位数从右往左第一位
int k = b_n;
char tmp[6] = {0};

if(minor == 1)
{
tmp[0] = 0x40; //负号

for(i=0;i<=b_n;i++)
{
tmp[i+1] = a[b[i]];
}

b_n++; //多了负号e.g. -123
k = b_n;
}

else

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      15335  2011-01-04 14:26  3.c

----------- ---------  ---------- -----  ----

                15553                    2


评论

共有 条评论