📄 ex4-10.c
字号:
/*
标题:范例 4-10
版本:1.0
Target:89S51
程序描述:这个范例说明如何使用8051,以及汇编语言的程序连结,
当我们按下向上数的按钮之后,程序就会把0到9的共
阳7段显示器字型码存入AT93C46;如果我们按下向下
数的按钮之后,程序就会把9到0的共阳7段显示器字
型码存入AT93C46。
程序每一次重新开始执行时(Power on 或是Reset),8051
会先从AT93C46当中读出最前面的10个位组,然后
就反复地将这10个位组的数据经由PORT 1送到1个
共阳七段显示器。*/
/* ***************************************************** */
#include <REGX51.H>
#define down_button P2_0
#define up_button P2_1
#define TRUE 1
#define FALSE 0
unsigned char msg[10];
unsigned char code
msg1[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
unsigned char code
msg2[10]={0X90,0X80,0XF8,0X82,0X92,0X99,0XB0,0XA4,0XF9,0XC0};
unsigned char idata i _at_ 0X20;
volatile unsigned char idata lb _at_ 0X15;
volatile unsigned char idata hb _at_ 0X16;
unsigned char idata source _at_ 0X11;
unsigned char idata dest _at_ 0X12;
extern void write_enable();
extern void write_disable();
extern void write_data();
extern void read_data();
void delay();
void main (void) {
static unsigned char i,j;
do {
for(i=0;i<5;i++) {
source=i;
dest=0x15;
read_data();
msg[2*i]=lb;
msg[2*i+1]=hb;
}
do {
for(i=0;i<10;i++) {
P1=msg[i];
delay();
if ( down_button==0) {
do { }while( down_button==0 );
goto down;
}
if ( up_button==0) {
do { }while( up_button==0 );
goto up;
}
}
} while (1);
down:
write_enable();
for(j=0;j<5;j++) {
source=j;
dest=0x15;
lb=msg2[2*j];
hb=msg2[2*j+1];
write_data();
}
write_disable();
continue;
up:
write_enable();
for(j=0;j<5;j++) {
source=j;
dest=0x15;
lb=msg1[2*j];
hb=msg1[2*j+1];
write_data();
}
write_disable();
} while (1);
}
void delay() {
unsigned int j;
for (j=0;j<33767;j++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -