-随机存储器中每定义一个变量都会占用一个字节如uchar,而int占两个字节,而随机存储器共128字节,故要合理使用; code是存储在程序存储器中; 若只是写unchar table[]={},则table中的每一个数据都会在随机存储器中占一个字节,故放入在code中
uchar code table[]={};//数组定义成编码的格式六个数码管一起从000000到ffffff显示(静态显示)
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; uchar num; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//数组定义成编码的格式 void delay(uint z); void main() { wela=1;//让位选先都打开 P0=0xc0; wela=0; while(1) { for(num=0;num<16;num++) { dula=1; P0=table[num]; dula=0; delay(1000); } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }电脑当中的中断设备如图所示: 外部中断,电平触发方式如下:(以数码管和发光二极管为例)
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit d1=P1^0; uchar num; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//数组定义成编码的格式 void delay(uint z); void main() { EA=1;//打开总中断 EX0=1;//开外部中断0 wela=1;//让位选先都打开11101010 P0=0xea; wela=0; while(1) { for(num=0;num<16;num++) { d1=1;//熄灭第一个二极管 dula=1; P0=table[num]; dula=0; delay(1000); } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //中断服务程序没有返回值 //中断函数不需要声明 void exter0() interrupt 0//中断服务子程序 { d1=0;//第一个发光二极管亮 }外部中断:跳变沿触发方式如下:
#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit dula=P2^6; sbit wela=P2^7; sbit d1=P1^0; uchar num; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//数组定义成编码的格式 void delay(uint z); void main() { EA=1;//打开总中断 EX0=1;//开外部中断0 IT0=1;//或者TCON=0x01;//跳变沿触发方式 wela=1;//让位选先都打开11101010 P0=0xea; wela=0; while(1) { for(num=0;num<16;num++) { d1=1;//熄灭第一个二极管 dula=1; P0=table[num]; dula=0; delay(1000); } } } void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //中断服务程序没有返回值 //中断函数不需要声明 void exter0() interrupt 0//中断服务子程序 { d1=0;//第一个发光二极管亮 }