/************************************************************
制作人:火柴
2011-07-14
************************************************************
************************************************************
计算器 + - × /
使用说明:4×4矩阵键盘 + 数码管
P0 :矩阵键盘 p1:位选 P2:段选
矩阵键盘示意图如下:
1 2 3 +
4 5 6 -
7 8 9 ×
清屏 0 = /
************************************************************/在职研究生怎么报
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
/************************************************************
查表
************************************************************/
uchar code lab[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x80,0x00,0x76,0x3e}; // 点 暗 H U
uchar buffer[4]; // ={}
uchar bufferx[4],buffery[4];
receiptuint x,y,z;
/************************************************************
延时函数
************************************************************/
void delay(uint z)//延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************************************************
************************************************************/
void savex()
{
uint i;
for(i=0;i<4;i++)
{
if(buffer[i]==0x11)
bufferx[i]=0;
el
bufferx[i]=buffer[i];
}
匹克英文}
/************************************************************
************************************************************/
void savey()
{
uint i;
for(i=0;i<4;i++)
{
if(buffer[i]==0x11)
buffery[i]=0;
el
buffery[i]=buffer[i];
}
}
/************************************************************
清零函数 0x11->十进制17,lab[17]=0x00 数码管暗,无显示
************************************************************/
void clr()
{
uint i;
for(i=0;i<4;i++)
{
buffer[i]=0x11;//
}
}
/************************************************************
显示函数
************************************************************/
void display()//显示程序
{
uchar i,temp;
temp =0xef;
for(i=4;i>0;i--)
{
P2=lab[buffer[i-1]];
P1=temp;
temp=(temp<<1)|0x01;
delay(3);
}
}
/************************************************************
是否有键按下 ?
************************************************************/
uchar keyarch()
{
uchar k;
P0=0xf0;
warburg pincus k=P0;
k=~k;
k=k&0xf0;
return k; //k=0x10 , 0x20 ,0x40 ,0x80 列
}
/************************************************************
************************************************************/
void digitin(uchar val) //移动
{
int i;
for(i=3;i>0;i--)
buffer[i]=buffer[i-1];
buffer[0]=val;
}
/************************************************************
tenderheart 按键函数
************************************************************/
uchar keys()
{
uchar a,c,kr,keynumb;
a=keyarch();
if(a==0) //按键检测
return 0xff;
el display();//延时消抖
a=keyarch();
if(a==0) //再次检测
return 0xff;
el
{
a=0xfe;
for(kr=0;kr<4;kr++)
{
P0=a;
c=P0; //得到键值如下:
if((c&0x10)==0) keynumb=kr+0x00; // 0 4 8 c
if((c&0x20)==0) keynumb=kr+0x04; // 1 5 9 d
if((c&0x40)==0) keynumb=kr+0x08; // 2 6 a e
if((c&0x80)==0) keynumb=kr+0x0c; // 3 7 b f
his a=_crol_(a,1);
}
}
do
{
a=keyarch();
display();
}
while(a!=0); //等待按键释放
return keynumb; //0~f
}
/************************************************************
按键处理函数
************************************************************/
void keybranch(uchar k) // k为返回的键值keynumb
{
uchar i,j,flag_add,flag_dec,flag_che,flag_chu;
small是什么意思
switch(k)
{
ca 0x00 : digitin(1); break; // 0 4 8 c
ca 0x04 : digitin(2); break; // 1 5 9 d
ca 0x08 : digitin(3); break; // 2 6 a e
ca 0x01 : digitin(4); break; // 3 7 b f
ca 0x05 : digitin(5); break; //
ca 0x09 : digitin(6); break; // 数码管显示
ca 0x02 : digitin(7); break; // 1 2 3 +
ca 0x06 : digitin(8); break; // 4 5 6 -
ca 0x0a : digitin(9); break; // 7 8 9 ×
ca 0x07 : digitin(0); break; // 0 = /
ca 0x0c : savex(); //加号键
clr();英语小说读后感
flag_add=1;
digitin(0x0a);
digitin(0x0d);
digitin(0x0d);
for(i=0;i<100;i++)
display();
clr();
break;
ca 0x0d : savex(); //减号键
at my most beautiful
clr();
digitin(0x0d);
digitin(0x0e);
digitin(0x0c);
flag_dec=1;
for(i=0;i<100;i++)
display();
clr();
buzzer break;
ca 0x0e : savex(); //乘号键
clr();
digitin(0x0);
digitin(0x12); //对应十进制18,对应显示H
digitin(0x0e);