一、功能介绍
用数码管显示按键的次数随之增加。
二、程序
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit C1 = P2^7;
sbit C2 = P2^6;
sbit C3 = P2^5;
sbit C4 = P2^4;
sbit D1 = P1^0;
sbit D2 = P1^1;
sbit D3 = P1^2;
sbit D4 = P1^3;
sbit D5 = P1^4;
sbit D6 = P1^5;
sbit D7 = P1^6;
sbit D8 = P1^7;
sbit SW1 = P3^4;
sbit SW2 = P3^3;
sbit SW3 = P2^1;
//¶¨ÒåÒ»¸ö±íʾSW2°´¼ü°´ÏÂ״̬µÄ±êÖ¾±äÁ¿
unsigned char Stat_SW3 = 0;
//¶¨Òå¹²ÑôÊýÂë¹ÜÎÞСÊýµãµÄÊý×Ö¶ÎÂëÖµ
unsigned char SMGNoDot_CA[9] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80};
unsigned char s1 = 0, s2 = 0;
unsigned char i;
void delay(uint ms)
{
uchar i;
uint j;
for(j=0;j<ms;j++)
{
for(i=0;i<125;i++)
{;}
}
}
/*==================ÊýÂë¹Ü¶¯Ì¬ÏÔʾרÓÃÑÓʱº¯Êý==================*/
void DelaySMG(unsigned int t)
{
while(t--);
}
/*=====================µ¥¸öÊýÂë¹ÜÏÔʾº¯Êý=======================*/
void DisPlaySMG_Bit(unsigned char pos, unsigned char dat)
{
P0 = 0xff; //ÏûÒþ
switch(pos) //Ñ¡ÔñÊýÂë¹ÜλÖÃ
{
case 1:
C1 = 1; C2 = 0; C3 = 0; C4 = 0;
break;
case 2:
C1 = 0; C2 = 1; C3 = 0; C4 = 0;
break;
case 3:
C1 = 0; C2 = 0; C3 = 1; C4 = 0;
break;
case 4:
C1 = 0; C2 = 0; C3 = 0; C4 = 1;
break;
}
P0 = dat; //Êä³öÊýÂë¹ÜÏÔʾµÄÄÚÈÝ
}
/*====================4¸öÊýÂë¹Ü¶¯Ì¬ÏÔʾº¯Êý======================*/
void DisPlaySMG()
{
DisPlaySMG_Bit(1, SMGNoDot_CA[s1]);
DelaySMG(100);
DisPlaySMG_Bit(2, 0xbf);
DelaySMG(100);
DisPlaySMG_Bit(3, 0xbf);
DelaySMG(100);
DisPlaySMG_Bit(4, SMGNoDot_CA[s2]);
DelaySMG(100);
}
/*======================°´¼üɨÃè´¦Àíº¯Êý=======================*/
void Scan_Keys()
{
//SW1°´¼üɨÃè´¦Àí
if(SW1 == 0)
{
DelaySMG(200);
if(SW1 == 0)
{
while(SW1 == 0)
{
DisPlaySMG();
}
s1++;
if(s1 == 9)
{
s1 = 0;
}
}
}
//SW2°´¼üɨÃè´¦Àí
if(SW2 == 0)
{
DelaySMG(200);
if(SW2 == 0)
{
while(SW2 == 0)
{
DisPlaySMG();
}
s2++;
if(s2 == 9)
{
s2 = 0;
}
}
}
//SW3°´¼üɨÃè´¦Àí
if(SW3 == 0) //ɨÃèSW1°´¼üÊäÈëÐźÅ
{
delay(200); //È¥¶¶¶¯´¦Àí
if(SW3 == 0) //È·ÈÏSW1°´¼ü°´ÏÂÐźÅ
{
while(SW3 == 0); //µÈ´ý°´¼üËÉ¿ª
{
D1=0;
delay(1000);
D2=0;
delay(1000);
D3=0;
delay(1000);
D4=0;
delay(1000);
D5=0;
delay(1000);
D6=0;
delay(1000);
D7=0;
delay(1000);
D8=0;
delay(1000);
Stat_SW3 = 0;
}
}
}
}
/*==========================Ö÷º¯Êý============================*/
void main()
{
while(1)
{
DisPlaySMG();
Scan_Keys();
}
}
三、结构图
四、流程图
五、小结
这次让我们自由设计程序,实现不同的功能,我想设计第三个按键控制灯光闪烁。