51单片机,写程序,用独立键盘让数码管一个接一个亮

2024-11-30 10:41:32
推荐回答(3个)
回答1:

#include
//------------------------------------------------------------------------------------
// 常量定义
//-----------------------------------------------------------------------------------
#define SYSCLK 2000000 //系统工作频率
#define PORTA 0x8000 //c8051f020 A口地址
#define PORTB 0x8001 //c8051f020 B口地址
#define PORTC 0x8002 // c8051f020 C口地址
#define PORTCON 0x8003 // c8051f020 控制口地址
//------------------------------------------------------------------------------------
// 函数定义
//------------------------------------------------------------------------------------
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口输出 A口不用
while(1) //循环显示
{
for(j=0;j<11;j++)
{ if( j==0x00)
k=0x06;
else if(j==0x01)
k=0x5b;
else if(j==0x02)
k=0x4f;
else if (j==0x03)
k=0x66;

else if(j==0x04)
k=0x6d;

else if ( 0x05)
k=0x7d;

else if(j==0x06)
k=0x07;

else if(j==0x07)
k=0x7f;

else if(j==0x08)
k=0x6f;

else if(j==0x09)
k=0x3f;

else
k=0x80;//显示dp(即。)
}
Pointm=PORTB;// B口存放字位码
*Pointm=0x01;//从左边第一位数码管开始显示数字
Pointm=PORTC; //C口存放字形码
*Pointm=k; //显示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周期*/
}

回答2:

要求用什么语言?

回答3:

出故障了