?? text1.c
字號:
#include <reg52.h>
sbit p30=P3^0;
sbit p31=P3^1;
sbit p32=P3^2;
sbit p33=P3^3;
sbit p34=P3^4;
sbit p35=P3^5;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
int LED[10]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
int temp1=0,temp2=0,rst;
int dat[6]={0},flag=0,flg=0;//dat[0]最低位個位 flag按鍵標志位 flg運算符標志
void delay(int m)//延時程序
{
while(--m);
}
void disp(int key_dat)//按鍵數據顯示函數
{
int i;
if(flag)//標志判斷 如果 flag=1 說明有按下
for(i=5;i>=1;i--)//數組中數據向后移一位
{
dat[i]=dat[i-1];
}
dat[0]=key_dat;//第一位賦值按鍵值
P3=0X01;//p3.0口有效
for(i=0;i<6;i++)
{
P2=LED[dat[i]];//將數據傳送到p2口
delay(50);
P3=P3<<1;//p3口右移一位
}
flag=0;//標志判斷 如果 flag=0 說明沒有按下
}
void clr(void)//清零函數
{
int i;
for(i=0;i<6;i++)
dat[i]=0;
disp(dat[0]);
}
void temp(int f)//運算符號(處理第一個數及運算符)
{
if(flag)
temp1=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
flg=f;//1 add ;2 sub ;3mul ;4 div
flag=0;
clr();//清零
}
void display(int n)//LED顯示
{
char i;
dat[5]=n/100000;//十萬位
dat[4]=n/10000%10;//萬位
dat[3]=n/1000%10;//千位
dat[2]=n/100%10;//百位
dat[1]=n/10%10;//十位
dat[0]=n%10;//個位
delay(20);
P3=0X01;
for(i=0;i<6;i++)
{
P2=LED[dat[i]];
delay(20);
P3=P3<<1;
}
}
void result(void)//運算結果函數
{
if(flag)
temp2=dat[5]*100000+dat[4]*10000+dat[3]*1000+dat[2]*100+dat[1]*10+dat[0];
switch(flg)
{
case 0: temp2=temp1;break;
case 1: rst=temp1+temp2;break;
case 2: rst=temp1-temp2;break;
case 3: rst=temp1*temp2;break;
case 4: rst=temp1/temp2;break;
}
flg=0;
flag=0;//標志判斷 if flag=0 說明沒有鍵按下
display(rst);
}
void keyscan(void)//鍵盤掃描函數
{
P1=0xef;//第一列
if(!p13){flag=1;while(!p13)clr();}//on鍵清零
if(!p12){flag=1;while(!p12)disp(1);}//1
if(!p11){flag=1;while(!p11)disp(4);}//4
if(!p10){flag=1;while(!p10)disp(7);}//7
P1=0xdf;//第二列
if(!p13){flag=1;while(!p13)disp(0);}//0
if(!p12){flag=1;while(!p12)disp(2);}//2
if(!p11){flag=1;while(!p11)disp(5);}//5
if(!p10){flag=1;while(!p10)disp(8);}//8
P1=0xbf;//第三列
if(!p13){flag=1;while(!p13)result();}//等號
if(!p12){flag=1;while(!p12)disp(3);}//3
if(!p11){flag=1;while(!p11)disp(6);}//6
if(!p10){flag=1;while(!p10)disp(9);}//9
P1=0x7f;//第四列
if(!p13){flag=1;while(!p13)temp(1);}//+
if(!p12){flag=1;while(!p12)temp(2);}//-
if(!p11){flag=1;while(!p11)temp(3);}//*
if(!p10){flag=1;while(!p10)temp(4);}///
disp(dat[0]);//如果沒有按鍵 就還顯示原來的數值
}
main()
{
while(1)
{
keyscan();//鍵盤掃描調用
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -