LY-51S(STC89C52R):8个共阴极数码管-程序(1)
(2012-09-12 16:17:33)
标签:
51单片机it |
分类: LY-51S单片机学习笔记 |
1:8个共阴极数码管流水灯式的分别显示0-9
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define uint unsigned int
#define uchar unsigned char
#define
MAXDM
10
#define
MAXWM
8
unsigned char code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
unsigned
char code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint );
void main(void)
{
}
void
delay(uint
time)
{
}
2:用函数_crol_()实现8个共阴极数码管流水显示数字8
注意:1、在LY-51S单片机中,数码管的电源是独立的,所以在实时应将J50用跳帽短接,以便连接到电源;
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
void
delay(uint time);
void main(void)
{
}
void
delay(uint
time)
{
}
3:8位数码管动态扫描(现象上为固定显示1-8)
注意:每个数码管都需要8位二进制数才能控制,所以8个数码管原理上应该属于并联连接方式,即同一时刻如果选定位码,那么所选定的数码管上显示的数字都是段码所标识的那一个.要想每个数码管显示的数字看起来不一样则必须用到动态扫描.(数码管的连接方式不同LED,因为LED是P1每个口连接一个LED灯,所以可以单独的进行赋值,如
P1^0=1灯,但是在8位数码管中不能单独对某个口赋值,因为控制一个数码管上的LED便需要8个二进制数据).
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAX
8
unsigned char code DM[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f}; //1-8的段码值
unsigned char code WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //1-8数码管的位码值
void
delay(unsigned int time);
void main(void)
{
}
void delay(unsigned int time)
{
}
4:数码管动态循环显示0-9
注意:以动态扫描的方式让数码管上显示出静态数字,让后通过while()循环,让这个静态扫描的过程循环50次(只有这样才能让静态数据停留一段时间后变为下一组数据.起初我是在for()后加了一个delay(N),想让时间延长,但这样并不会让静态数据全部显示,只会让最后一个数码管的数据停留delay(N)的时间),只有让整个动态扫描过程循环,其结果才能显示在数码管上(这里指的是while()循环,非main()循环).因此,程序中的ct记录的是while()循环的次数.
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
unsigned char code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
unsigned
char code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(unsigned int time);
void main(void)
{
}
void delay(unsigned int time)
{
}
5:3个数码管交替显示1-9
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
9
#define
SMNUM
3
unsigned char code DM[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //1-9的段码值
unsigned
char code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char temp[MAXDM];
void delay(unsigned int time);
void main(void)
{
}
void delay(unsigned int time)
{
}
6:8个数码管中的一个循环累加9
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
unsigned char code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
void delay(unsigned int time);
void main(void)
{
}
void delay(unsigned int time)
{
}
看了别人关于显示函数的写法后修改如下:
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint
);
void
display(uchar ,uchar );
uchar
temp[MAXDM];
void main(void)
{
}
void display(uchar site,uchar digit)
{
}
void delay(uint time)
{
}
7:做99累加前的牺牲品
现象,显示0-99,但是只有各位进一时十位才会显示一下
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(unsigned int time);
void main(void)
{
}
void delay(unsigned int time)
{
}
8:数码管99累加
原理:利用动态扫描,让十位的段码索引在个位的十次循环中一直维持为一个数,如个位从0-9变化过程中其段码索引也从0-9,但是这个过程中十位的段码索引却只为一个数,最开始为0,逐渐递增,个位从0-9循环一次,十位的索引增加一.注意:起初我在显示函数中没有添加清除数据的语句,导致其他未显示数字的数码管出现交替重影现象.所以记得在这种交替式变化的程序中每次锁存位码前将(段码)数据清空
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint
);
void
display(uchar ,uchar );
uchar
temp[MAXDM];
void main(void)
{
}
void display(uchar site,uchar digit)
{
}
void delay(uint time)
{
}
9:数码管999累加
注意:在将需显示的数字和其段码巧妙结合时要要注意,一定要让段码在0-9之间循环,不可超出,否则会出现乱码
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint
);
void
display(uchar ,uchar );
uchar
temp[MAXDM];
void main(void)
{
}
void display(uchar site,uchar digit)
{
}
void delay(uint time)
{
}
10:数码管9累减
原理:同累加,用动态扫描原理
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint
);
void
display(uchar ,uchar );
uchar
temp[MAXDM];
void main(void)
{
}
void display(uchar site,uchar digit)
{
}
void delay(uint time)
{
}
11:数码管9999累减
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint
);
void
display(uchar ,uchar );
uchar
temp[MAXDM];
void main(void)
{
}
void display(uchar site,uchar digit)
{
}
void delay(uint time)
{
}
12:数码管65535累减
unsigned int范围为2^16=65535,
#include
sbit
LATCH1=P2^2;
sbit
LATCH2=P2^3;
#define
MAXDM
10
#define
MAXWM
8
#define
uint unsigned int
#define uchar unsigned char //宏定义
uchar code DM[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的段码值
uchar code
WM[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void
delay(uint
);
void
display(uchar ,uchar );
uchar
temp[MAXDM];
void main(void)
{
}
void display(uchar site,uchar digit)
{
}
void delay(uint time)
{
}