赞
踩
本次主要介绍一下关于单片机的综合实验:基于时钟的24小时计时器。
本人设计的是一个基于时钟的24小时计时器。它可以用作显示数字的钟表使用;由于它也显示秒数,故可以做秒表使用。
1. 应用系统关键电子器件有单片机,2个四位八段数码管,74HC245,74HC138,中断1。
2. 应用系统的仿真原理图及其实物图如下:
我从应用系统的几个关键电子器件入手分析:
1.2个四位八段数码管 从实物图上可以看出,从左往右数的前两位代表小时,三四位代表分钟,五六位代表秒。其中哪一位亮是由74HC138控制的;该位亮那个数字是由74HC245控制的。
2.74hc245是兼容TTL器件引脚的高速CMOS总线收发器,典型的CMOS型三态缓冲门电路,八路信号收发器。其中它的16个管脚(除了接地和电源的)分别和单片机的P0的八个管脚以及2个四位八段数码管相连。
3.74HC138,即译码器。输入信号的三个管脚分别于P2的2,3,4管脚相连,输出端于2个四位八段数码管相连。这三个输入信号的高低点平控制其中输出端的某位可以输出,进而影响四位八段数码管的哪一位亮。
4.中断1:当计数器计数TFi溢出时,该位置“1”。此时使用中断方式1时,作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。
代码如下(示例):
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16; //对数据类型进行声明定义 typedef unsigned char u8; u8 m=0;//定义6个变量 u8 n=0; u8 p=0; u8 q=0; u8 j=0; u8 k=0; u8 i=100; sbit P2_2=P2^2; //管脚进行声明定义 sbit P2_3=P2^3; sbit P2_4=P2^4; u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //不带小数点的0到9 u8 code smgduan_dot[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef }; //带小数点的0到9 void delay(u16 i) //延时函数,i=1 时,大约延时 10us { while(i--); } void Timer0Init() { TMOD=0X01;//选择为定时器模式,工作方式1,仅用TR0打开启动。 TH0=0xd8;//给定时器赋初值,定时10ms TL0=0xf0; ET0=1; //打开定时器中断允许 EA=1;//打开总中断 TR0=1; //打开定时器 } void main() { Timer0Init(); //定时器1初始化 while(1) { P2_2=0;P2_3=1; P2_4=0;//实物图从左往右,第6位亮 P0=smgduan[n]; delay(100); //延时 P2_2=1; P2_3=1;P2_4=0;// 第5位亮 P0=smgduan[m]; delay(100); //延时 P2_2=0; P2_3=0;P2_4=1; 第4位亮 P0=smgduan_dot[p]; delay(100); P2_2=1; P2_3=0;P2_4=1; 第3位亮 P0=smgduan[q]; delay(100); //延时 P2_2=0; P2_3=1;P2_4=1; 第2位亮 P0=smgduan_dot[j]; delay(100); //延时 P2_2=1; P2_3=1;P2_4=1; 第1位亮 P0=smgduan[k]; delay(100); //延时 P0=0; //消隐 } } void Timer0() interrupt 1//中断程序 { TH0=0xd8; //重新赋初值 TL0=0xf0; i--; //循环100次 if(i==0) { i=100; n++; if(n==10) //n满10,m加1,重置n=0 { n=0; m++; } if(m==6) //m满6,p加1,重置m=0 { m=0; p++; } if(p==10) //p满10,q加1,重置p=0 { p=0; q++; } if(q==6) //q满6,j加1,重置q=0 { q=0; j++; } if(j==10) //j满10,k加1,重置q=0 { j=0; k++; } if(n==9&&m==5&&p==9&&q==5&&j==3&&k==2)//时间满24小时,n,m,p,w,j,k置0 { n=0;m=0;p=0;q=0;j=0;k=0; } } }
1.进行程序的设计时,一定要先关注开发板的原理图,知道不同模块间管脚的连线方式,这样方便正确编写程序。同时要注意理解这学期和上学期的开发板的差别:上学期的开发板的管脚之间是通过外部线路进行自由搭配,而本学期的开发板管脚之间已经在内部电路固定连接,它的管脚连线是固定的。
2.写程序时一定要认真,认真,再认真,我在写代码时因为一些小问题卡死了好几次
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。