好文档 - 专业文书写作范文服务资料分享网站

郭天祥之十天学会单片机视频配套程序-实用!

天下 分享 时间: 加入收藏 我要投稿 点赞

4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3....C、D、E、F,重复。

/*********************************************************/ #include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义

sbit dula=P2^6; //数码管段选锁存端 sbit wela=P2^7; ////数码管位选锁存端 uchar num,tt; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void main() { num=0;

tt=0;

TMOD=0x01;//设置定时器0为工作方式1 TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1;//开总中断

ET0=1;//开定时器0中断 TR0=1;//启动定时器0 dula=1;

P0=0x3f; //给段开始送显示0。

dula=0;//关闭段选锁存端,防止开始时出现乱码。 wela=1;//11101010

P0=0xc0; // 打开六个数码管位选 wela=0; while(1) {

if(tt==10) //每进入10次中断即为500ms,执行一次显示变化。 {

}

tt=0; num++; if(num==16) num=0; dula=1; P0=table[num]; dula=0;

}

}

void exter0() interrupt 1 // 定时器0中断 { }

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

Lesson4

1、利用动态扫描方法在六位数码管上显示出稳定的654321.

/*********************************************************/ #include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit dula=P2^6; //数码管段选锁存端 sbit wela=P2^7; ////数码管位选锁存端 uchar code table[]={ //数码管显示编码 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void display(uchar,uchar,uchar,uchar,uchar,uchar); //函数声明 void delay(uint); void main() {

while(1) { display(6,5,4,3,2,1); //始终显示 }

}

void display(uchar one,uchar two,uchar three,uchar four,uchar five,uchar six) {

dula=1; P0=table[one]; //送段数据

dula=0;

P0=0xff; //送位数据前关闭所有显示防止打开位选锁存后段选数据通过位选锁存器 wela=1; P0=0xfe; wela=0; delay(1);

dula=1; P0=table[two];

dula=0; P0=0xff; wela=1; P0=0xfd; wela=0;

delay(1); dula=1;

P0=table[three]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1); dula=1; P0=table[four]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1); dula=1; P0=table[five]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); dula=1; P0=table[six]; dula=0; P0=0xff; wela=1; P0=0xdf; wela=0; delay(1);

}

void delay(uint z) //延时子函数 { }

uint x,y;

for(x=z;x>0;x--) for(y=110;y>0;y--);

2、用动态扫描方法和定时器1在数码管的前三位显示出秒表,精确到1%秒,即最后一位显示1%秒,一直循环下去

/*********************************************************/ #include //52单片机头文件

#include //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义

sbit dula=P2^6; //数码管段选锁存端 sbit wela=P2^7; ////数码管位选锁存端 uchar ge,shi,bai; uint tt;

uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

void display(uchar,uchar,uchar); //函数声明 void delay(uint); void main() { }

TMOD=0x10;//设置定时器1为工作方式1 TH1=(65536-10000)/256; TL1=(65536-10000)%6; EA=1;//开总中断 ET1=1;//开定时器1中断 TR1=1;//启动定时器1 while(1) { display(bai,shi,ge); }

void exter0() interrupt 3 // 定时器1中断 { }

TH1=(65536-10000)/256; TL1=(65536-10000)%6; tt++;

if(tt==1000) tt=0;

bai=tt/100; shi=tt0/10; ge=tt;

郭天祥之十天学会单片机视频配套程序-实用!

4、用定时器以间隔500MS在6位数码管上依次显示0、1、2、3....C、D、E、F,重复。/*********************************************************/#include//52单片机头文件#include//包含有左右循环移位子函数的库
推荐度:
点击下载文档文档为doc格式
17qzv7ranv9vfqx3dfqk
领取福利

微信扫码领取福利

微信扫码分享