做了个很是简单的计算器
/**************************************************************************************/*************************************************************************************** ¾ØÕó°´¼üʵÑé *
ʵÏÖÏÖÏó£ºÏÂÔسÌÐòºóÊýÂë¹ÜÏÔʾ0£¬°´Ï¾ØÕó°´¼üÉϵİ´¼üÏÔʾ¶ÔÓ¦µÄÊý×Ö
S1-S4£º0-3
S5-S8£º4-7
S9-S12£º8-B
S13-S16£ºC-F¡£
×¢ÒâÊÂÏÈç¹û²»ÏëÈõãÕóÄ£¿éÏÔʾ£¬¿ÉÒÔ½«74HC595Ä£¿éÉϵÄJP595¶Ì½ÓƬ°Îµô¡£
***************************************************************************************/
#include "reg52.h" //´ËÎļþÖж¨ÒåÁ˵¥Æ¬»úµÄһЩÌØÊ⹦ÄܼĴæÆ÷
typedef unsigned int u16; //¶ÔÊý¾ÝÀàÐͽøÐÐÉùÃ÷¶¨Òå
typedef unsigned char u8;
#define GPIO_DIGP0
#define GPIO_KEYP1
#define GPIO_LEDP2
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit s1=P2^0;
sbit s2=P2^1;
sbit s3=P2^5;
sbit s4=P2^6;
sbit s5=P2^7;
sbit k1=P3^1;
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
u8 KeyValue;//ÓÃÀ´´æ·Å¶ÁÈ¡µ½µÄ¼üÖµ
u8 Value1;
u8 Value2;
u8 ge1;
u8 shi1;
u8 ge2;
u8 shi2;
u8 he;
u8 he1;
u8 he2;
u8 he3;
u8 he4;
u8 code smgduan={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//ÏÔʾ0~FµÄÖµ
/*******************************************************************************
* º¯ Êý Ãû : delay
* º¯Êý¹¦ÄÜ : ÑÓʱº¯Êý£¬i=1ʱ£¬´óÔ¼ÑÓʱ10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
* º¯ Êý Ãû : KeyDown
* º¯Êý¹¦ÄÜ : ¼ì²âÓа´¼ü°´Ï²¢¶ÁÈ¡¼üÖµ
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void KeyDown(void)
{
char a=0;
GPIO_KEY=0x0f;
if(GPIO_KEY!=0x0f)//¶ÁÈ¡°´¼üÊÇ·ñ°´ÏÂ
{
delay(1000);//ÑÓʱ10ms½øÐÐÏû¶¶
if(GPIO_KEY!=0x0f)//Ôٴμì²â¼üÅÌÊÇ·ñ°´ÏÂ
{
//²âÊÔÁÐ
GPIO_KEY=0X0F;
switch(GPIO_KEY)
{
case(0X07): KeyValue=0;break;
case(0X0b): KeyValue=1;break;
case(0X0d): KeyValue=2;break;
case(0X0e): KeyValue=3;break;
}
//²âÊÔÐÐ
GPIO_KEY=0XF0;
switch(GPIO_KEY)
{
case(0X70): KeyValue=KeyValue;break;
case(0Xb0): KeyValue=KeyValue+4;break;
case(0Xd0): KeyValue=KeyValue+8;break;
case(0Xe0): KeyValue=KeyValue+12;break;
}
while((a<50)&&(GPIO_KEY!=0xf0)) //¼ì²â°´¼üËÉÊÖ¼ì²â
{
delay(1000);
a++;
}
}
}
}
/*******************************************************************************
* º¯ Êý Ãû : main
* º¯Êý¹¦ÄÜ : Ö÷º¯Êý
* Êä Èë : ÎÞ
* Êä ³ö : ÎÞ
*******************************************************************************/
void main()
{
while(1)
{
KeyDown(); //°´¼üÅжϺ¯Êý
ge1=KeyValue%10;
shi1=KeyValue/10;
if(k1==0)
{
delay(50000);//ÑÓʱX0ms½øÐÐÏû
Value1=Value1+1;
delay(1000);//ÑÓʱX0ms½øÐÐÏû
}
if(k3==0)
{
delay(50000);//ÑÓʱX0ms½øÐÐÏû
Value1=Value1-1;
delay(1000);//ÑÓʱX0ms½øÐÐÏû
}
ge1=Value1%10;
shi1=Value1/10;
if(k2==0)
{
delay(50000);//ÑÓʱX0ms½øÐÐÏû
Value2=Value2+1;
delay(1000);//ÑÓʱX0ms½øÐÐÏû
}
if(k4==0)
{
delay(50000);//ÑÓʱX0ms½øÐÐÏû
Value2=Value2-1;
delay(1000);//ÑÓʱX0ms½øÐÐÏû
}
ge2=Value2%10;
shi2=Value2/10;
he=Value1+Value2;
he1=he%10;
he2=he%100/10;
he3=he/100;
he4=he/1000;
LSA=0; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY0ÏÔʾ
LSB=0;
LSC=0;
GPIO_DIG=smgduan; //
delay(100);//ÑÓʱ10ms½øÐÐÏû
LSA=1; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY1ÏÔʾ
LSB=0;
LSC=0;
GPIO_DIG=smgduan; //
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
he=ge1+shi1;
LSA=0; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY2ÏÔʾ
LSB=1;
LSC=0;
GPIO_DIG=smgduan;
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
LSA=1; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY3ÏÔʾ
LSB=1;
LSC=0;
GPIO_DIG=smgduan;
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
LSA=0; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY4ÏÔʾ
LSB=0;
LSC=1;
GPIO_DIG=smgduan;
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
LSA=1; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY5ÏÔʾ
LSB=0;
LSC=1;
GPIO_DIG=smgduan;
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
LSA=0; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY6ÏÔʾ
LSB=1;
LSC=1;
GPIO_DIG=smgduan;
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
LSA=1; //¸øÒ»¸öÊýÂë¹ÜÌṩλѡY7ÏÔʾ
LSB=1;
LSC=1;
GPIO_DIG=smgduan;
delay(100);//ÑÓʱ10ms½øÐÐÏû¶¶
}
}
页:
[1]