哈尔滨学院工学院电子信息工程课程设计报告
其内部的程序存储器(一般为flash)容量都很大,因此基本上不需要外接程序存储器,而是直接使用内部的存储器。 4. P0 口外接上拉电阻
51 单片机的P0 端口为开漏输出,内部无上拉电阻。所以在当做普通I/O 输出数据时,由于V2 截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。
2.4.1程序如下
unsigned
char
Tab1[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; // 段码表 unsigned
char
Tab2[ ]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; // 个位段码表 unsigned int x; unsigned char k; sbit int0=P3^2; sbit int1=P3^3; sbit SUB60=P1^1; sbit S60=P1^2; sbit K5=P1^3; sbit K6=P1^4; sbit K7=P1^5; sbit K8=P1^6; /*************************** 延 时 1ms 基 准 ******************************************/ void delay1ms(unsigned int i) { unsigned char j; while(i--) { for(j=0;j<125;j++) //1ms 基准延时程序
12MHZ
晶
振
{
;
}
}
}
/******************************************************************** ************ ****************** 数 码 管 显 示 程 序 ***********************************************/ void Display(unsigned int x) { P2=0xfe; //P2.0 引脚输出低电平,DS6 点亮 P0=Tab1[x/1000]; //显示百位 delay1ms(6); P2=0xfd; //P2.1 引脚输出低电平,DS6 点亮 P0=Tab1[x00/100]; //显示十位delay1ms(6); P2=0xfb; //P2.2 引脚输出
6
哈尔滨学院工学院电子信息工程课程设计报告
低电平,DS6 点亮 P0=Tab2[x0/10]; //显示个位 delay1ms(6); P2=0xf7; //P2.3 引脚输出低电平,DS7 点亮 P0=Tab1[x]; //显示 0.1 位 delay1ms(6); P2=0xff; } /******************************************* 函数功能:主函数 ******************************************/ void main(void) { x=0; TMOD=0x01; // TMOD=0000 0001B,使用计数器 T0 的工作方式 1 EA=1; //开起总中断 ET0=1; //允许定时器 T0 的中断 EX0=1; //允许外中断 INT0 IT0=1; //INT0 为下负脉冲触发方式
TH0=(65536-50000)/256; //计数器 T0 高 8 位赋初值 TL0=(65536-50000)%6; //计数器 T0 低 8 位赋初值 TF0=0; //溢出标志位清零{
while(1)
/************************************************************
P1.3
按
一
次
加
1
开
关
****************K5
S1***************************/ if(K5==0) { delay1ms(20); if(K5==0) { x=x+10; } while(!K5); //摁键关断 摁一次触发一次 } /***********************************************************************K6 P1.4 按一次减 1 开关 S2**************************/ if(K6==0) { delay1ms(20); if(K6==0) { if(x==0) { x=10; //在 00.0 的时候停止 } x=x-10; } while(!K6); //摁键关断 摁一次触发一次 } /******************************************************************** * ******************K7 P1.5 初 始 值 赋 值 为 60.0 秒 开 关 S5********************/ if(K7==0) { delay1ms(20); if(K7==0) { x=600; //赋初值 60.0 秒 } while(!K7); //摁键关断 摁一次触发一次 } /********************************************************************
7
哈尔滨学院工学院电子信息工程课程设计报告
* ******************S60 控 制 60S 停 止 开 关 P1.2****************************/ if(x==600) { if(S60==0) //如果 P1.2 口是低电平,秒表变化范围 00.0~60.0 { TR0=0; } } /******************************************************************** ******************K8
P1.6
清
零
clear0
摁
键
开
关
S3************************/ if(K8==0) { delay1ms(20); //延时消震 if(K8==0) { x=0; TR0=0; }
//数据清 0 数码管显示 000.0 //溢出标志位清 0
} /************数码管显示***************************************/ Display(x); } } /**********INT0 中断函数 用于开始或暂停开关 S4******************
**************************************************************/ void begin_stop() interrupt 0 { if(int0==0) { delay1ms(30); //延时消震 if(int0==0) { TR0=~TR0; //按键摁一次 读秒开始或暂停 if(x==0&&SUB60==0) {
TR0=0;
}
}
}
}
******T0
/*********************************************************
计数器中断 控制每隔加 0.1 秒***********************/ void add_one0() interrupt 1 { k++; if(k==2) { k=0; TF0=0; if(SUB60==1) //当 P1.1 口是高电平时秒表加 0.1s //当 P1.1 口是低电平时秒表减 0.1s { x=x+1; //秒表加 0.1s } else { x=x-1; //秒表减 0.1s }
8
哈尔滨学院工学院电子信息工程课程设计报告
if(x==0) { TR0=0; } if(x==9999) { TR0=0; } } TH0=(65536-50000)/256; TL0=(65536-50000)%6; } //计数器 T0 高 8 位赋初值 //计数器 T0 低 8 位赋初值
2.4.2 数码管显示模块设计
显示部分采用动态显示。数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划\的同名端连在一起,另外为每个数码管的共阴极增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的位选通端,就使各个数码管轮流受控显示,这就是动态驱动。动态显示是利用人眼视觉暂留特性来实现显示的。事实上,显示器上任何时刻只有一个数码管有显示。由于各数码管轮流显示的时间间隔短、节奏快,人的眼睛反应不过来,因此看到的是连续显示的现象。为防止闪烁延时的时间在1ms左右,不能太长,也不能太短。
2.3.3 辅助时序控制模块
为了保证系统的设计要求 , 在设计控制电路时 , 应正确处理各个信号之间的时序关系。从系统的设计要求可知 , 控制电路要完成以下四项功能 :
①操作 “直接清零”开关时 , 要求计数器灭灯。
②闭合 “启动” 开关时 , 计数器应完成置数功能 , 显示器显示 30 秒字
样 ; 断开“启动”开关时 , 计数器开始进行递减计数。
③当 “暂停 / 连续”开关处于 “暂停”位置时 , 控制电路封锁时钟脉冲信号 CP , 计数器暂停计数 , 显示器上保持原来的数不变 ,“暂停 / 连续” 开
9
哈尔滨学院工学院电子信息工程课程设计报告
关处于“连续”位置时 , 计数器继续累计计数。
④当计数器递减计数到零 ( 即定时时间到 ) 时 , 控制电路应发出报警信号 , 使计数器保持零状态不变 , 同时报警电路工作。如图2-7所示.
当计数到零时,两计数器借位端输出多为低(0),故本设计将高位片借位BO2反馈到二极管负极性端,此时+5V电源经1k电阻使发光二极管发出光电报警信号,完成报警功能,而在递减计数时,BO2端输出为高(1),二极管不报警.
图2-9 74LS48管脚图
2.共阴极七段LED显示器是较常用的显示数码管,但在使用时要注意的是:
1.看清楚自己用的数码管是共阴极还是共阳极的,最好在焊之前用万电用表测一下它的极性,其管脚图如下图2-10所示,如果为共阴极的,其管脚COM端接地;如果为共阳极的,起管脚COM段要接高电平。
2.还要注意在数码管电路上加上一保护电阻,起限电流的作用。
10