LED
- Turn an LED on
- Turn a digit LED on
- count down
hardware
- STC89C52RC
Cathode Share LED digit codes
| digit | code |
|---|---|
| 0 | 0x3f |
| 1 | 0x06 |
| 2 | 0x5b |
| 3 | 0x4f |
| 4 | 0x66 |
| 5 | 0x6d |
| 6 | 0x7d |
| 7 | 0x07 |
| 8 | 0x7f |
| 9 | 0x6f |
| A | 0x77 |
| B | 0x7c |
| C | 0x39 |
| D | 0x5e |
| E | 0x79 |
| F | 0x71 |
0x00 |
code
#include <reg52.h>
void delay (unsigned int xms);
void main()
{
int i = 0;
while(1)
{
P1 = 0xfe; // 1111 1110
for (i = 0; i < 8; i++)
{
delay(1000);
P1 <<= 1; // P1 = P1 << 1;
P1 = P1 | 0x01;
}
}
}
void delay (unsigned int xms)
{
unsigned int i,j;
for (i = xms; i > 0; i--)
for(j = 112; j < 0; j--);
}
Timeout toggle
#include <reg52.h>
sbit led = P1^0;
int i = 0;
void timer1_init()
{
TMOD = 0x10; // timer 1 mode 2, 16-bits
TH1 = 0x4C; // set TH1 initial value
TL1 = 0x00; // set TL1 initial value
EA = 1; // open general interrupt
ET1 = 1; // open timer T0 interrupt
TR1 = 1; // start T0
}
void main()
{
led = 1;
timer1_init();
while(1)
{
if (i == 10)
{
led = ~led;
i = 0;
}
}
}
void time1() interrupt 3
{
TH1 = 0x4c; // init as 50ms
TL1 = 0x00;
i++;
}
digit display
#include <reg52.h>
#define duan P0
sbit wei1 = P2^4;
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit wei4 = P2^7;
void main()
{
wei1 = 1;
wei2 = 0;
wei3 = 0;
wei4 = 0;
duan = 0x7c; // 0111 1100 "b"
while(1);
}
LED digit dynamic display
#include <reg52.h>
#define duan P0
#define uchar unsigned char
sbit wei1 = P2^4;
sbit wei2 = P2^5;
sbit wei3 = P2^6;
sbit wei4 = P2^7;
uchar code sz[17] = {
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f,
0x77,
0x7c,
0x39,
0x5e,
0x79,
0x71,
0x00
};
void delay (unsigned int xms)
{
unsigned int i,j;
for (i = xms; i > 0; i--)
for(j = 112; j < 0; j--);
}
void main()
{
while(1)
{
duan = sz[4];
wei1 = 0;
wei2 = 0;
wei3 = 0;
wei4 = 1;
delay(1000);
duan = sz[3];
wei1 = 0;
wei2 = 0;
wei3 = 1;
wei4 = 0;
delay(1000);
duan = sz[2];
wei1 = 0;
wei2 = 1;
wei3 = 0;
wei4 = 0;
delay(1000);
duan = sz[1];
wei1 = 1;
wei2 = 0;
wei3 = 0;
wei4 = 0;
delay(1000);
}
}
流水灯

/****
* 利用位移指令实现流水灯
* hardware: STC89C51RC
* crystal: 12.0MHz
*/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint ms)
{
uint i;
while (ms--)
{
for (i=0;i<120;i++);
}
}
void main(void)
{
uchar i,j;
P0 = 0xFF;
while (1)
{
j = 0x01;
for (i=0; i<8;i++)
{
P0=~j;
delayms(250);
j=j<<1;
}
j = 0x80;
for (i=0;i<8;i++)
{
P0 = ~j;
delayms(250);
j = j>>1;
}
}
}
/**
* 利用移位+intrins.h 实现流水灯
* hardware: stc89c51rc
* crystal: 12.0MHz
*/
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delayms(uint ms)
{
uint i;
while (ms--)
{
for (i=0;i<120;i++);
}
}
void main(void)
{
uchar i,j;
P0 = 0xFF;
while(1)
{
j=0x01;
for (i=0;i<8;i++)
{
P0=~j;
delayms(250);
j = _crol_(j, 1); // left move in loop
}
j = 0x80;
for (i=0;i<8;i++)
{
P0 = ~j;
delayms(250);
j = _cror_(j, 1); // right move in loop
}
}
}
Page Source