⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led8.c

📁 此程序用于测试教学实验机c8051f020的LED数码管示
💻 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 + -