2022年数码管动态扫描、流水灯、蜂鸣器原理图和程序文件 .pdf
#include /52 单片机头文件#include / 包含有左右循环移位子函数的库#define uint unsigned int /宏定义#define uchar unsigned char /宏定义sbit dula=P26; /数码管段选锁存端sbit wela=P27; /数码管位选锁存端sbit fm=P23; sbit LED=P25; sbit AA=P34; sbit BB=P35; sbit CC=P36; uchar ge,shi,bai,qian; uint tt; uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,0 xff; uchar code table1=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f,0 xff; /LED字段void display(uchar,uchar,uchar,uchar,uchar,uchar); / 函数声明void delay(uint); /*数码管显示模块函数*/ void displaymain() uint t; TMOD=0 x10;/ 设置定时器1 为工作方式1 TH1=(65536-10000)/256; TL1=(65536-10000)%256; EA=1;/ 开总中断ET1=1;/ 开定时器1 中断TR1=1;/ 启动定时器1 for(t=5000;t0;t-) display(8,8,qian,bai,shi,ge); TR1=0; void exter0() interrupt 3 / 定时器 1 中断 TH1=(65536-10000)/256; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 6 页 - - - - - - - - - TL1=(65536-10000)%256; tt+; if(tt=60000) tt=0; qian=tt/1000; bai=tt/100%10; shi=tt%10%10; ge=tt%10; void display(uchar one,uchar two,uchar three,uchar four,uchar five,uchar six) dula=1; P0=tableone; /送段数据dula=0; P0=0 xff; /送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器wela=1; P0=0 xfe; wela=0; delay(1); dula=1; P0=tabletwo; dula=0; P0=0 xff; wela=1; P0=0 xfd; wela=0; delay(1); dula=1; P0=tablethree; dula=0; P0=0 xff; wela=1; P0=0 xfb; wela=0; delay(1); dula=1; P0=tablefour; /送段数据dula=0; P0=0 xff; /送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 6 页 - - - - - - - - - 锁存器wela=1; P0=0 xf7; wela=0; delay(1); dula=1; P0=tablefive; dula=0; P0=0 xff; wela=1; P0=0 xef; wela=0; delay(1); dula=1; P0=tablesix; dula=0; P0=0 xff; wela=1; P0=0 xdf; wela=0; delay(1); /* */ void delay(uint z) /延时子函数 uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); /*流水灯显示 */ void LLED() / 流水灯函数闪烁 10S uchar x,n1; /LED=1; for(x=100;x0;x-) LED=1; P1=table1n1; delay(200); n1=n1+1; if(n1=8) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 6 页 - - - - - - - - - n1=0; P1=table18; /*蜂鸣器 */ void SPEAKER() /蜂鸣器 uchar x; for(x=10;x0;x-) delay(1000); fm=0; delay(1000); fm=1; /*主函数 */ void main() while(1) if(CC=0) displaymain(); dula=1; wela=1; P0=0 xff; if(BB=0) LLED(); if(AA=0) SPEAKER(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 6 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 6 页 - - - - - - - - - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 6 页 - - - - - - - - -