学习51单片机开发板(3)

2019-01-27 18:39

TR0=1; while(1) { delay(1000); temp=_crol_(temp,1); P1=temp; if(aa==40) { aa=0; num++; if(num==16) num=0; dula=1; P0=table[num]; dula=0; } } }

void time() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; aa++; }

此程序能够单独实现数码管或发光二极管的功能,但二者不能同时实现,原因是:delay(1000)包含20次50ms,也就使得aa=20,if(aa==40)显然不满足条件。所以此时程序回到delay(1000),当再次执行到if(aa==40)的时候,aa已经超过40了。所以,一直没有进入这个if语句。

我们的解决措施是:将于中断有关的程序放入中断函数中,这样子的话,每次触发中断函数,就进去if语句。 #include #include sbit dula=P2^6; //控制段选 sbit wela=P2^7; //控制位选 unsigned char num,aa;

unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

unsigned char temp;

void delay(unsigned int z) { unsigned int x,y; }

void main() { 且50ms一到,触发中断*/ for(x=z;x>0;x--) for(y=110;y>0;y--); num=0; aa=0; temp=0xfe; P1=temp; wela=1; P0=0xc0; wela=0; dula=1; P0=table[num]; TMOD=0x01;//设置定时器0位工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%6; /*定时50ms, EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; while(1) { delay(1000); temp=_crol_(temp,1); P1=temp; /* if(aa==40) { aa=0;

}

void time() interrupt 1 { }

} */ }

num++;

if(num==16) num=0; dula=1;

P0=table[num]; dula=0;

TH0=(65536-50000)/256; TL0=(65536-50000)%6; aa++;

if(aa==40) {

aa=0; num++;

if(num==16) num=0; dula=1;

P0=table[num]; dula=0; }

数码管从左到右依次点亮(数码管的动态显示)

#include #include sbit dula=P2^6; //控制段选 sbit wela=P2^7; //控制位选 unsigned char numdu,numwe,aa; unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

unsigned char code tablewe[]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

unsigned char temp;

void main() {

numdu=0; numwe=0; aa=0;

TMOD=0x01;//设置定时器0位工作方式1

TH0=(65536-50000)/256; TL0=(65536-50000)%6; /*定时50ms,且50ms一到,触发中断*/ EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1;

while(1) { if(aa==20) { aa=0;

if(numdu==6) {numdu=0;numwe=0;} //为了第二次实现功能 numdu++; dula=1;

P0=table[numdu]; dula=0; wela=1;

P0=tablewe[numwe]; wela=0; numwe++; } } }

void time() interrupt 1 {

TH0=(65536-50000)/256;

TL0=(65536-50000)%6; aa++; }

练习题

数码管上显示125

#include sbit dula=P2^6; //控制段选 sbit wela=P2^7; //控制位选

unsigned char code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};

unsigned char bai,shi,ge,num;

void delay(unsigned int z) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void display(unsigned char bai,unsigned char shi,unsigned char ge) { wela=1; P0=0xfe; wela=0; dula=1; P0=table[bai]; dula=0; delay(10); /*缺少delay(),程序错误*/ wela=1; P0=0xfd; wela=0; dula=1;


学习51单片机开发板(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:会计基础易错

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: