完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
` 使用51单片机完成定时***的定时起爆任务 使用了138译码器和排电阻,原本是一个简易的秒表程序,后来程序改编完成了这个简易的功能把代码复制下来,大家一起参考,功能还不完善,请大家一起完善,实现更多功能! https://bbs.elecfans.com/forum.php?mod=attachment&aid=NzU1OTk4fGQzZDQ5NjI1MDc2ZWU0Y2E5YzU2YWVmMzY5ZTQ0NGI3fDE3NjQ4MDExMDc%3D&request=yes&_f=.jpg #include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; ***it LSA=P2^2; //138译码器接口 ***it LSB=P2^3; ***it LSC=P2^4; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f};//显示0~9的值 u8 ssec=100,sec=60,min=04; u8 DisplayData[8]; ***it beep=P1^5; unsigned long counter=0; unsigned int c=0; ***it p15=P1^5; bit p; /******************************************************************************* * 函 数 名 : delay * 函数功能 : 延时函数,i=1时,大约延时10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 数 名 : timer0Init * 函数功能 : 定时器0初始化 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Timer0Init() { TMOD=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。 TH0=0Xd8; //给定时器赋初值,定时10ms TL0=0Xf0; ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 TR0=1;//打开定时器 -->启动定时器中断! ET1=1; TR1=1; TH1=(65536-250)/256; //FC TL1=(65536-250)%256; } /******************************************************************************* * 函 数 名 : DigDisplay * 函数功能 : 数码管动态扫描函数,循环扫描8个数码管显示 *******************************************************************************/ void DigDisplay() { u8 i; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case(0): LSA=0;LSB=0;LSC=0; break;//显示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//显示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//显示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位 } P0=DisplayData;//发送段码 delay(100); //间隔一段时间扫描 P0=0x00;//消隐-->撤销选中; } } void datapros() { DisplayData[0]=smgduan[ssec%10]; DisplayData[1]=smgduan[ssec/10]; DisplayData[2]=0x40; DisplayData[3]=smgduan[sec%10]; DisplayData[4]=smgduan[sec/10]; DisplayData[5]=0x40; DisplayData[6]=smgduan[min%10]; DisplayData[7]=smgduan[min/10]; } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void main() { Timer0Init(); //定时器0初始化 while(1) { datapros(); DigDisplay(); } } /******************************************************************************* * 函 数 名 : void Timer0() interrupt 1 * 函数功能 : 定时器0中断函数 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void Timer0() interrupt 1 { TH0=0Xd8; //给定时器赋初值,定时10ms TL0=0Xf0; ssec--; if(ssec==00) //1s { ssec=100; sec--; if(sec==00) { sec=60; min--; if(min==-1) { P1=1; ssec=0;sec=0;min=0; TR0=0; } } } } void Timer1() interrupt 3 //蜂鸣器发声定时器,矩形方波驱动 { TH1=(65536-250)/256; //FC TL1=(65536-250)%256; if(p!=1) p15=~p15; if(p==1) p15=0; c++; if(c==250) { //c=0; p=~p; } if(c>=250&&1695); if(c==1696) c=0; } `
|
|
相关推荐
3 个讨论
|
|
【社区之星】宿晶亮——一个人的爱好,足以点燃不设限的学习热情
88 浏览 0 评论
改造小萝卜机器人第二天——Visual Studio Code 解决ESP-IDF报错问题
2241 浏览 0 评论
3165 浏览 1 评论
6606 浏览 0 评论
3798 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-4 06:31 , Processed in 0.822121 second(s), Total 54, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
3068