📄 led8.c
字号:
//-----------------------------------------------------------------------------
// 版权归新华龙电子公司所有
//-----------------------------------------------------------------------------
//
// 文件名:LED.c
//
// 编写人:LC
//
// 编写时间:2005/2/25
//
// 目标器件: C8051F02x
//
// 编译工具: Silicon Laboratories IDE
//------------------------------------------------------------------------------
//程序说明
// 此程序用于测试教学实验机的LED数码管显示,程序运行时LED将轮流点亮,显示从0到9
//之间的数字。
//------------------------------------------------------------------------------------
// 头文件包含
//------------------------------------------------------------------------------------
#include <c8051f020.h>
//------------------------------------------------------------------------------------
// 常量定义
//-----------------------------------------------------------------------------------
#define SYSCLK 2000000 //系统工作频率
#define PORTA 0x8000
#define PORTB 0x8001
#define PORTC 0x8002
#define PORTCON 0x8003
//------------------------------------------------------------------------------------
// 函数定义
//------------------------------------------------------------------------------------
void PORT_Init (void);
//------------------------------------------------------------------------------------
// 主程序
//------------------------------------------------------------------------------------
void main (void)
{
unsigned int i;
unsigned char j,k;
unsigned char xdata * Pointm;
WDTCN = 0xde; //禁止看门狗定时器
WDTCN = 0xad;
PORT_Init ();
Pointm=PORTCON;
*Pointm=0x80; //B口输出,C口输出
while(1)
{
for(j=0;j<11;j++)
{
switch(j){
case 0x00:
k=0x06;
break;
case 0x01:
k=0x5b;
break;
case 0x02:
k=0x4f;
break;
case 0x03:
k=0x66;
break;
case 0x04:
k=0x6d;
break;
case 0x05:
k=0x7d;
break;
case 0x06:
k=0x07;
break;
case 0x07:
k=0x7f;
break;
case 0x08:
k=0x6f;
break;
case 0x09:
k=0x3f;
break;
default:
k=0x80;
}
Pointm=PORTB;
*Pointm=0x01;
Pointm=PORTC;
*Pointm=k;
for(i=0;i<=36000;i++);
Pointm=PORTB;
*Pointm=0x02;
for(i=0;i<=36000;i++);
Pointm=PORTB;
*Pointm=0x04;
for(i=0;i<=36000;i++);
Pointm=PORTB;
*Pointm=0x08;
for(i=0;i<=36000;i++);
Pointm=PORTB;
*Pointm=0x10;
for(i=0;i<=36000;i++);
Pointm=PORTB;
*Pointm=0x20;
for(i=0;i<=36000;i++);
}
}
}
//------------------------------------------------------------------------------------
//函数名称: PORT_Init ()
//函数功能: 通用I/O口及交叉开关初始化
//入口参数: 无
//出口参数: 无
//全局变量引用: 无
//调用模块: 无
//------------------------------------------------------------------------------------
void PORT_Init (void)
{
XBR2 = 0x40; // 使能交叉开关
P74OUT |= 0xff; // P5、P6、P7设为推挽输出
EMI0CF |= 0x2c; /*EMIF工作在地址/数据复用方式,只用外部存储器,ALE高/低脉宽占1个SYSCLK周期*/
EMI0TC |= 0x6c; /*地址建立/保持时间占0个SYSCLK周期,/WR和/RD占12个SYSCLK周期*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -