📄 wled0.c
字号:
//参考程序B:WLED0.C程序功能: 数码管将轮流点亮,显示从"0"到"F"
#include <c8051f020.h>
#define SYSCLK 2000000 //系统工作频率
#define PORTA 0x8000 // 8255 A口地址
#define PORTB 0x8001 // 8255 B口地址
#define PORTC 0x8002 // 8255 C口地址
#define PORTCON 0x8003 // 8255 控制口地址
void PORT_Init (void);
void main (void)
{
unsigned int i;
unsigned char k;
char j;
unsigned char xdata * Pointm;
unsigned char code F7SEG[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
WDTCN = 0xde; //禁止看门狗定时器
WDTCN = 0xad;
PORT_Init ();
Pointm=PORTCON;
*Pointm=0x80; //8255初始化,设定B口输出,C口输出,A口不用
while(1) //循环显示
{
for(j=0;j<16;j++) //依次显示"0"-----"F",共16个数字
{
k=F7SEG[j]; // 查表,得到字形码数值存放在变量K中
//k=0x3f;
Pointm=PORTB; // B口存放字位码
*Pointm=0x01; //从左边第一位数码管开始显示数字
Pointm=PORTC; //C口存放字形码
*Pointm=k; //显示K中存放的字形码
for(i=0;i<=32000;i++); //延时
Pointm=PORTB;
*Pointm=0x02; //左边第二位数码管开始显示数字
for(i=0;i<=32000;i++);
Pointm=PORTB;
*Pointm=0x04; //左边第三位数码管开始显示数字
for(i=0;i<=32000;i++);
Pointm=PORTB;
*Pointm=0x08; //左边第四位数码管开始显示数字
for(i=0;i<=32000;i++);
Pointm=PORTB;
*Pointm=0x10; //左边第五位数码管开始显示数字
for(i=0;i<=32000;i++);
Pointm=PORTB;
*Pointm=0x20; //左边第六位数码管开始显示数字
for(i=0;i<=32000;i++);
}
}
}
void PORT_Init (void)
{
EMI0CF |= 0x2c; /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高*/
/*低脉宽占1个SYSCLK周期*/
EMI0TC |= 0x6d; /*地址建立/保持时间占1个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
P74OUT=0x3f; /*P7为漏极开路,P4,P5,P6为推拉方式*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -