📄 led.c
字号:
/****************************************************************************/
/* */
/* FILE NAME VERSION */
/* */
/* LED.C 1.0 */
/* */
/* DESCRIPTION */
/* */
/* JX44B0(S3C44B0X)数码管显示实验 */
/* */
/* */
/* DATA STRUCTURES */
/* */
/* FUNCTIONS : */
/* 在JX44B0教学实验箱数码管上循环显示字符'0'到字符'F' */
/* */
/* DEPENDENCIES */
/* JX44B0-1 */
/* JX44B0-2 */
/* JX44B0-3 */
/* */
/* */
/* NAME: */
/* REMARKS: */
/* */
/* Copyright (C) 2003 Wuhan CVTECH CO.,LTD */
/****************************************************************************/
/****************************************************************************/
/* 显示码表 */
/* 七段数码管结构: */
/* A */
/* -------- */
/* | | */
/* F| |B */
/* | G | */
/* -------- */
/* | | */
/* E| | C */
/* | | */
/* -------- */
/* D */
/* */
/* 七段数码管显示原理: */
/* JX44B0采用共阳方式连接,为1时点亮、为0时熄灭 */
/* */
/* 七段数码管字符与码段对应表 */
/*字符 DP G F E D C B A 段码(共阴) 段码(共阳) */
/* 0 0 0 1 1 1 1 1 1 3FH C0H */
/* 1 0 0 0 0 0 1 1 0 06H F9H */
/* 2 0 1 0 1 1 0 1 1 5BH A4H */
/* 3 0 1 0 0 1 1 1 1 4FH B0H */
/* 4 0 1 1 0 0 1 1 0 66H 99H */
/* 5 0 1 1 0 1 1 0 1 6DH 92H */
/* 6 0 1 1 1 1 1 0 1 7DH 82H */
/* 7 0 0 0 0 0 1 1 1 07H F8H */
/* 8 0 1 1 1 1 1 1 1 7FH 80H */
/* 9 0 1 1 0 1 1 1 1 6FH 90H */
/* A 0 1 1 1 0 1 1 1 77H 88H */
/* B 0 1 1 1 1 1 0 0 7CH 83H */
/* C 0 0 1 1 1 0 0 1 39H C5H */
/* D 0 1 0 1 1 1 1 0 5EH A1H */
/* E 0 1 1 1 1 0 0 1 79H 86H */
/* F 0 1 1 1 0 0 0 1 71H 8EH */
/* - 0 1 0 0 0 0 0 0 40H BFH */
/* . 1 0 0 0 0 0 0 0 80H 7FH */
/*熄灭 0 0 0 0 0 0 0 0 00H FFH */
/****************************************************************************/
unsigned char seg7table[16] =
{
/* 0 1 2 3 4 5 6 7*/
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
/* 8 9 A B C D E F*/
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
};
#define U8 unsigned char
static int delayLoopCount=1000;
void Delay(int time);
void display_seg7();
void flash_seg7();
void Test_Seg7(void);
/****************************************************************************/
/* 函数说明: EB44B0 7段构共阳数码管测试 */
/* 功能描述: 依次在7段数码管上显示0123456789ABCDEF */
/* 返回代码: 无 */
/* 参数说明: 无 */
/****************************************************************************/
void Test_Seg7(void)
{
int i;
/* 设置数码管段选,某位为0时选择,下面同时选中所有数码管 */
*((U8*) 0x02000006) = 0x00;
for( ; ; )
{
/* 数码管从0到F依次将字符显示出来 */
for(i=0;i<0x10;i++)
{
/* 查表并输出数据 */
*((U8*) 0x02000004) = seg7table[i];
Delay (1000);
}
/* 数码管从F到0依次将字符显示出来 */
for(i=0xf;i>=0x0;i--)
{
/* 查表并输出数据 */
*((U8*) 0x02000004) = seg7table[i];
Delay (1000);
}
}
}
/****************************************************************************/
/* 函数说明: EB44B0 7段构共阳数码管测试 */
/* 功能描述: 依次在不同的段数码管上显示0~9 */
/* 返回代码: 无 */
/* 参数说明: 无 */
/****************************************************************************/
void flash_seg7(void)
{
int i = 0;
int index = 0;
*((U8*) 0x02000006) = 0x3f; /* 关闭所有数码管 */
for( ; ; )
{
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << index);
/* 查表并输出数据 */
*((U8*) 0x02000004) = seg7table[i];
Delay (800);
i++;
i %= 10;
index ++;
index %= 6;
}
}
/****************************************************************************/
/* 函数说明: EB44B0 7段构共阳数码管测试 */
/* 功能描述: 在数码管上显示123456 */
/* 返回代码: 无 */
/* 参数说明: 无 */
/****************************************************************************/
void display_seg7(void)
{
int index = 0;
int sleep = 0;
for( ; ; )
{
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << 0);
*((U8*) 0x02000004) = seg7table[(index+0)%10];
Delay (10);
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << 1);
*((U8*) 0x02000004) = seg7table[(index+1)%10];
Delay (10);
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << 2);
*((U8*) 0x02000004) = seg7table[(index+2)%10];
Delay (10);
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << 3);
*((U8*) 0x02000004) = seg7table[(index+3)%10];
Delay (10);
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << 4);
*((U8*) 0x02000004) = seg7table[(index+4)%10];
Delay (10);
/* 设置数码管段选 */
*((U8*) 0x02000006) = 0x3f & ~(0x01 << 5);
*((U8*) 0x02000004) = seg7table[(index+5)%10];
Delay (10);
sleep++;
if( (sleep % 50) == 0 )
{
index++;
index %= 10;
}
}
}
/****************************************************************************/
/* Function name : 循环延时子程序 */
/* Description : 循环 'time' 次 */
/* Return type :void */
/* Argument : 循环延时计数器 */
/****************************************************************************/
void Delay(int time)
{
int i;
for(;time>0;time--)
for(i=0;i<delayLoopCount;i++);
}
void Main()
{
Test_Seg7();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -