////////////////////////////////////////////////////////////
// //
// КОНТРОЛЛЕР PIC12F683 (внутренний генератор 4Mhz) //
// //
////////////////////////////////////////////////////////////
#define REG_PIN_DATA GPIO.F4 // DATA 4094/74xx164
#define REG_PIN_CLK GPIO.F5 // CLK 4094/74xx164
#define sw GPIO.F3 // Button In
#define RESET GPIO.F0
#define REG_DATA_ON REG_PIN_DATA = 1;
#define REG_DATA_OFF REG_PIN_DATA = 0;
#define REG_CLK {REG_PIN_CLK = 1; asm nop; asm nop; REG_PIN_CLK = 0;}
unsigned short zz, oldstate;
// unsigned char digs[5]={0x3F, 0x06, 0x5B, 0x4F, 0x00}; // Общ. катод
unsigned char digs[5]= {0xC0, 0xF9, 0xA4, 0xB0, 0xFF}; // Общ. анод
void Register(char tmp) // Процедура загрузки в регистр
{
char i, dig;
dig = digs[tmp];
for(i=8; i›0; i--)
{
if(dig & 0x80)
{
REG_DATA_ON
}
else
{
REG_DATA_OFF
}
dig ‹‹=1;
REG_CLK
}
}
void Register_init(void) // Процедура иниц. регистра
{
char i;
for(i=0; i‹8; i++)
{
REG_DATA_OFF;
REG_CLK
}
}
void SW(void)
{
// zz++;
// if (zz › 3) zz = 0;
switch (zz) {
case 0:
{
Register(0);
break;
}
case 1:
{
Register(1);
break;
}
case 2:
{
Register(2);
break;
}
case 3:
{
Register(3);
break;
}
default : Register(4);
}
}
void main()
{
GPIO = 0;
CMCON0 = 0b00000111;
ANSEL = 0b00000000;
TRISIO = 0b00001000;
do
{
Register(4);
zz = 0;
if (Button(&GPIO, 3, 10, 0)) oldstate = 1;
if (oldstate && Button(&GPIO, 3, 10, 1))
{
zz++;
if (zz › 3) zz = 0;
SW();
RESET = 1;
Delay_ms(500);
RESET = 0;
oldstate = 0;
}
}
while (1);
} |