📄 led_roll_display.c
字号:
/*--------------------------------------------------------------*/
//LED八位数码滚动显示
//显示部分用中断方式,便于程序的拓展
/*--------------------------------------------------------------*/
//包含头文件
#include <reg52.h>
#include "74HC595.H"
/*--------------------------------------------------------------*/
//接口定义
#define LED_Position P3 //位选
#define LED_Segment P0 //段码
//全局变量定义
#define Num sizeof(LED_Seg) //代码长度
unsigned char LED_Pos; //位扫描
unsigned char code LED_Seg[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff, //空格
0x89,0x86,0xC7,0xC7,0xc0,0xff,0xA4,0xC0,0xC0,0x10,0xff, //字符Hello2009.
0xff,0x92,0xA4,0xC0,0xF9,0xB0,0xF9,0x19,0xff, //数字5201314.
0xff,0xA4,0xC0,0xC0,0x90,0xBF,0xA4,0xBF,0x24, //2009-2-2.
0xff,0xF9,0x82,0xBF,0x99,0xB0,0xBF,0x92,0x30, //16-43-53.
0xff,0xC7,0xC0,0xC1,0x86,0xff,0x99,0xc0,0xC1, //字符love you
0xff,0xff,0x8B,0x86,0x8B,0x86,0xff,0x3F,0xBF,0xff,0xDC,0xF7,0xDC,//字符hEhE-.-^_^
0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //空格
unsigned char Count; //移位速度控制
unsigned char n; //移位变量
/*--------------------------------------------------------------*/
//定时器初始化
void T0_init(void)
{
TMOD = 0x01;
TH0 = 0xec; //5000us
TL0 = 0x7e;
IE = 0x82;
TR0 = 1;
}
/*--------------------------------------------------------------*/
//LED显示函数1
//Direction = 0 ←左移
//Direction = 1 →右移
/*
void LED_Display1(unsigned char *p, bit Direction)
{
LED_Position = 0x00; //消影
if(Direction)
LED_Position = 0x01 << LED_Pos; //位选
else
LED_Position = 0x80 >> LED_Pos;
LED_Segment = *(p + LED_Pos); //段码
LED_Pos++; //循环扫描
if(LED_Pos == 8) LED_Pos = 0;
}
*/
/*--------------------------------------------------------------*/
//LED显示函数2
//offset为偏移量
void LED_Display2(unsigned char offset)
{
// Ser_IN(0x00); Ser_IN(0x00); Par_OUT(); //消影
Ser_IN(0x01 << LED_Pos); //位选
Ser_IN(LED_Seg[offset + LED_Pos]); //段码
Par_OUT();
LED_Pos++; //循环扫描
if(LED_Pos == 8) LED_Pos = 0;
}
/*--------------------------------------------------------------*/
//定时器中断服务
void T0_intservice(void) interrupt 1
{
TH0 = 0xec;
TL0 = 0x7e;
// LED_Display1(&LED_Seg[n], 1);
// LED_Display1(&LED_Seg[n], 0);
LED_Display2(n);
Count++;
if(Count == 100)
{
Count = 0;
n++; if(n == Num-7 ) n = 0;
}
}
/*-------------------------------------------------------------*/
//主函数
void main(void)
{
T0_init();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -