You are on page 1of 3

/*

* 7-seg.c
* Driving 2-digit 7-segment Common Anode LED & keypad
* Copyright (C) 1999 Wichit Sirichote
* compiled with Dunfield Micro-C for 8051 Release 3.2
* c:\mc\cc51 7-seg -i h=c:\mc m=t
*/
#include c:\mc\8051io.h /* include i/o header file */
#include c:\mc\8051reg.h
extern register char cputick; // cputick was incremented every 10ms
register unsigned char flag1;
unsigned register char sec,digit,buffer[2];
register char key;
char convert[10] = {0x3F,0x0c,0x76,0x5e,0x4d,0x5b,0x7b,0x0e,0x7f,0x5f};
// LED pattern for 0
1 2
3
4
5
6
7
8
9
/* my LED's segment pin designation
b
__
a|__| c
f |
| d
---e
*/
#define setValue 99
main()
{
flag1 = 0;
sec = setValue;
timeToBuffer();
serinit(9600); // set timer0 to be 16 bit counter
while(1){
while(cputick < 10)
scanLED();
// execute the following functions every 100ms
cputick = 0;
timeToBuffer();
keyexe();
countdown();
}
}
scanLED() /* scan 2-digit LED and 2-key switch, if key pressed key = 0-1
else key = -1 */
{
int i;
digit = 0x02;
// scan code 00000010
key = -1;
for( i = 0; i < 2; i++) /* 2-DIGIT scanning */
{
P3 = ~digit;
/* send complement[digit] */

P1 = ~buffer[i]; /* send complement[segment] */


delay(1);
/* delay 1ms */
P1 = 0xff;
/* off LED */
if ((P3 & 0x10) == 0) /* if key pressed P3.4 became low */
key = i;
/* save key position to key variable */
digit>>=1;
/* next digit */
}
}
timeToBuffer() // converts binary data in sec to 7-segment pattern
{
buffer[0] = convert[sec%10];
buffer[1] = convert[sec/10];
}
countdown()
{
if ((flag1 & 0x02) != 0)
sec--;
if (sec == 0 )
flag1 &= ~0x02; // clear run bit
}
keyexe()
{
if (key != -1)
{
switch(key){
case (0): /*
reset(); /*
break;
case (1): /*
run();
/*
}

key position 0 */
service key 0 */
key position 1 */
service key 1 */

}
}
reset()
{
sec = setValue; // reload set value
timeToBuffer();
flag1 &= ~0x02; // stop counting down
}
run()
{
if (sec != 0)
flag1 |= 0x02; // start counting down
}

:0300000002000EED
:03000300020028D0
:20000B0002001F75810ED2AFD2A912002B80FE12001B80FB758CDC758A00050832050832F7
:20002B007400F5097463F50A12011D748075F025C0E0C0F012020F15811581E5081202819E
:20004B007B0A12027812031845F070030200601200710200467400F50812011D1201AF120D
:20006B00017A02004622058105817402F50B74FFF50E740075F00078FD12024FF608A6F053
:20008B0078FD12024FE60886F07B027C0012031845F07003020118801678FD12024FE608D4
:2000AB0086F01202FE18F608A6F012030780D1E50BF4F5B078FD12024FE60886F0790C7AD0
:2000CB0000120271E7F4F590740175F000C0E0C0F01202321581158174FFF590E5B05410A3
:2000EB0075F0007B007C0012033845F0700302010778FD12024FE60886F0F50EE50B75F006
:20010B00007B017C001202EDF50B0200A41581158122740075F000790C7A00120271C001C9
:20012B00C002E50A75F0007B0A7C001202B379807A0312027189828A83E493D007D000F6AF
:20014B00740175F000790C7A00120271C001C002E50A75F0007B0A7C001202BA79807A031A
:20016B0012027189828A83E493D007D000F622E509540275F0007B007C0012034145F07006
:20018B0003020195E50A14F50A04E50A75F0007B007C0012033845F070030201AEE5095480
:2001AB00FDF50922E50E1202817BFF12027812034145F070030201E6E50E1202819001DAAF
:2001CB0002028A1201E70201E61201F50201E6D4010100CE0100000000E601227463F50A2E
:2001EB0012011DE50954FDF50922E50A75F0007B007C0012034145F0700302020EE50944D8
:20020B0002F5092278FB12024F8603088604748075F0701202BA12030E758921F58DF58BE5
:20022B007588597598522278FB12024F8603088604BB0004BC00012279E5A3D9FD1BBBFFA1
:20024B00F01C80F4C82581C822C92581C97A0022D083D082CF2581F581CFC082C08322CF12
:20026B002581F581CF2229F9E5F03AFA227C00CB30E7011CCB2275F00030E70215F022FD0F
:20028B00E493A3FEE493A3FF4E7009E493FE740193FF800BE493A3B5050BE493B5F0068FC4
:2002AB00838E82E473A380D81202BA8EF0ED22C002C001AAF0F97E007D007F11C3E933F97A
:2002CB00EA33FADF08F5F0E9D001D00222ED33FDEE33FEC3ED9BF5F0EE9C40E0ADF0FED3FE
:2002EB0080DBBB000122C3C5F013C5F013DBF7221202FE04700205F02212030714B4FF02EF
:20030B0015F022120307F4C5F0F4C5F02212034B4029801E12034B40227017801E12034B6D
:20032B0040107017800C12034B5010800512035F6009E4F5F02212035F60F7E4F5F0042288
:20034B00C39BC5F09C20E70720D207C345F02220D2F9D322C5F0C39C7003E5F09B22FBE4EA
:1F036B0093CB22FCE493FB740193CC22FAE493F9740193CA223F0C765E4D5B7B0E7F5F03
:00000001FF

You might also like