




已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程设计报告专 业:班 级:学 号:姓 名:2014年6月22日目 录 数码管消隐.31.1项目简介.31.2电路原理图.41.3参考程序.6 按键从右至左输入.82.1项目简介.82.2电路原理图102.3参考程序.10 步进电机转速数码管显示.163.1项目简介.163.2电路原理图183.3参考程序.19 PCF8591 DA输出模拟.244.1项目简介244.2电路原理图.254.3参考程序.26 自动调光测试.305.1项目简介305.2电路原理图.315.3参考程序32数码管消隐1.1项目简介LED显示器有共阳极和共阴极两种,共阴极LED显示器是发光二极管的阴极连在一起,通常此公共阴极接地;共阳极LED显示器是发光二极管的阳极连在一起,公共阳极接正电压。通过LED显示器中二极管的亮灭,则显示不同的字符或数字。数码管外形图如下, 共阴极显示如“HELLO”的数据代码如下。D7D6D5D4D3D2D1D0显示数值代码hgfedcba01110110H76H01111001E79H00111000L38H00111000L38H00111111O3FH01000000-40H共阴极发光二极管内部结构图多位数码管的动态显示在多位8段数码管显示时,为了简化硬件电路,通常将所有位的段选线相应地并联在一起,由一个单片机的8位I/O口控制,形成段选线的多路复用。而各位数码管的共阳极或共阴极分别由单片机独立的I/O口线控制,顺序循环地点亮每位数码管,这样的数码管驱动方式就称为“动态扫描”。在这种方式中,虽然每一时刻只选通一位数码管,但由于人眼具有一定的“视觉残留”,只要延时时间设置恰当,便会感觉到多位数码管同时被点亮了。 多位8段LED动态显示器电路,其中段选线占用一个8位I/O口,位选线占用一个8位I/O口,由于各位的段选线并联,段线码的输出对各位来说都是相同的。因此,同一时刻,如果各位位选线都处于选通状态的话,8位LED将显示相同的字符。若要各位LED能够显示出与本位相应的显示字符,就必须采用扫描显示方式,即在某一位的位选线处于选通状态时,其它各位的位选线处于关闭状态,这样,8位LED中只有选通的那一位显示出字符,而其它位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他的位选线处于关闭状态。如此循环下去,就可以使各位“同时”显示出将要显示的字符。由于人眼有视觉暂留现象,只要每位显示间隔足够短,则可造成多位同时亮的假象,达到显示的目的。多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值当高位值为0是不显示该位,即消隐。如数字 0010,实际显示为10,前2位0不显示。如果不消隐 ,一位显示完后,显示下一位时,下一位的字形码也会加到这位,造成乱码。原因:CPU的执行速度很快,当送入位选和段选数据后,接着又送入位选数据,但该位的段选数据还没有送入,所以该位还保持着上次的段选数据,接着该位的段选数据送入,由于视觉残留,两个段选数据的显示效果重合,形成了混乱。1.2电路原理图1.3参考程序/*- 名称:多位数码管动态扫描显示变化数据 数码管消隐 内容:多位数码管分别显示不同数字,这种扫描显示方式成为动态扫描,并不停变化赋值 当高位值为0是不显示该位,即消隐,如数字 0010,实际显示为10,前2位0不显示-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量void Delay(unsigned int t); /函数声明void Display(unsigned char FirstBit,unsigned char Num);/*- 主函数-*/main() unsigned int num; unsigned int j; while(1) j+; if(j=10) /检测当前数值显示了一小段时间后,需要显示的数值加1,实现数据显示的变化 j=0; num+; if(num=10000)/用于显示09999 num=0; if(num1000) /如果小于1000则千位不显示 TempData0=0; else TempData0=dofly_DuanManum/1000;/分解显示信息,如要显示68,则68/10=6 68%10=8 if(num100) /如果小于100则千位和百位都不显示 TempData1=0; else TempData1=dofly_DuanMa(num%1000)/100; if(num10) /如果小于10,则千位、百位和十位都不显示 TempData2=0; else TempData2=dofly_DuanMa(num%1000)%100)/10; TempData3=dofly_DuanMa(num%1000)%100)%10; Display(2,4); /*- 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 065535-*/void Delay(unsigned int t) while(-t);/*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) unsigned char i; for(i=0;iNum;i+) DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; Delay(200); / 扫描间隙延时,时间太长会闪烁,太短会造成重影 按键从右至左输入2.1项目简介按键作为一种简单实用的输入设备已经应用于各种单片机应用系统中,可谓是无处不在。但在不同的实用场合下所使用的按键也不尽相同。这里就对几种经常用到的按键及其使用方法进行介绍。 1、传统按键:传统按键是现在在各种电子设备中应用最为广泛的按键,可能它们的形状各有不同,但其控制方法却大同小异,利用按键是否按下的IO电平状态变化来对其进行识别。2、直接按键:最简单的键盘就是把电平信号直接接到IO上。在程序里面读取IO电平状态,如果读到相应的电平,则说明此IO上所接的按键被按下。这种方法原理与控制方法都非常简单,但造成了IO资源的浪费。这种按键方式的示意图如下:3、扫描按键矩阵:这种按键输入方式很巧妙地利用了IO资源,使得8个IO可以实现16键键盘。它的示意图如下:这种按键输入方式比上面的直接按键方式从原理与控制上都比上面的直接按键要复杂。它通过IO的扫描来获取键值,其实扫描过程非常简单,过程如下:KEY1KEY4对应于IO0IO3,KEY5KEY8对应于IO4IO7。 1.将IO0IO3置高,将IO4置低,IO5、IO6、IO7置高,读取IO0IO3。第一列的某个按钮按下后,使相应的两个触点接通,相应行上的IO可以读到低电平。2.将IO0IO3置高,将IO5置低,IO4、IO6、IO7置高,读取IO0IO3。第一列的某个按钮按下后,使相应的两个触点接通,相应行上的IO可以读到低电平。3.将IO0IO3置高,将IO6置低,IO4、IO5、IO7置高,读取IO0IO3。第一列的某个按钮按下后,使相应的两个触点接通,相应行上的IO可以读到低电平。4.将IO0IO3置高,将IO7置低,IO4、IO5、IO6置高,读取IO0IO3。第一列的某个按钮按下后,使相应的两个触点接通,相应行上的IO可以读到低电平。循环此过程可以不断读取按键键值。 在实际的应用中,这个扫描过程通常是放在定时器的中断服务程序中去完成的,通过全局变量将键值返回到其它函数中去。当然,作为学习其扫描过程,也可以将扫描放在主函数中直接来完成。 在上面介绍的按键输入方式中,读者可以看到,IO都是以低电平作为检测电平,那这是为什么呢?这是因为单片机IO读取电平状态的时候,读取低电平比高电平要稳定。也下是因为这一原因外部中断以低电平或下降沿来作为其中断触发条件,以保证中断的可靠性。识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。本项目要求单个独立按键依次输入控制,按键从右至左输入,如计算器输入数据形式相同从右至左。2.2电路原理图键盘连接成44的矩阵形式,占用单片机P1口的8根线,行信号是P1.0-1.3,列信号是P1.4-1.7。2.3参考程序/*- 名称:单个独立按键依次输入控制 内容:如计算器输入数据形式相同 从右至左-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit KEY1=P30; /定义按键输入端口sbit KEY2=P31;sbit KEY3=P32;sbit KEY4=P33;sbit KEY5=P34;sbit KEY6=P35;sbit KEY7=P36;sbit KEY8=P37;#define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量void DelayUs2x(unsigned char t);/us级延时函数声明 void DelayMs(unsigned char t); /ms级延时void Display(unsigned char FirstBit,unsigned char Num);/数码管显示函数unsigned char KeyScan(void);/键盘扫描void Init_Timer0(void);/定时器初始化/*- 主函数-*/void main (void)unsigned char num,i,j; unsigned char temp8;Init_Timer0();while (1) /主循环 num=KeyScan(); if(num) if(i8) tempi=dofly_DuanManum; for(j=0;j=i;j+) TempData7-i+j=tempj; i+;if(i=9)/多出一个按键输入为了清屏 原本应该为8 i=0; for(j=0;j8;j+)/清屏 TempDataj=0; /*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) static unsigned char i=0; DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0;/*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开/*- 定时器中断子程序-*/void Timer0_isr(void) interrupt 1 TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display(0,8); / 调用数码管扫描/*-按键扫描函数,返回扫描键值-*/unsigned char KeyScan(void)/*/ if(!KEY1) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY1) /再次确认按键是否按下,没有按下则退出 while(!KEY1);/如果确认按下按键等待按键释放,没有则退出 return 1; /*/ else if(!KEY2) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY2) /再次确认按键是否按下,没有按下则退出 while(!KEY2);/如果确认按下按键等待按键释放,没有则退出 return 2; /*/ else if(!KEY3) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY3) /再次确认按键是否按下,没有按下则退出 while(!KEY3);/如果确认按下按键等待按键释放,没有则退出 return 3; /*/ else if(!KEY4) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY4) /再次确认按键是否按下,没有按下则退出 while(!KEY4);/如果确认按下按键等待按键释放,没有则退出 return 4; /*/ else if(!KEY5) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY5) /再次确认按键是否按下,没有按下则退出 while(!KEY5);/如果确认按下按键等待按键释放,没有则退出 return 5; /*/ else if(!KEY6) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY6) /再次确认按键是否按下,没有按下则退出 while(!KEY6);/如果确认按下按键等待按键释放,没有则退出 return 6; /*/ else if(!KEY7) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY7) /再次确认按键是否按下,没有按下则退出 while(!KEY7);/如果确认按下按键等待按键释放,没有则退出 return 7; /*/ else if(!KEY8) /如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般10-20ms if(!KEY8) /再次确认按键是否按下,没有按下则退出 while(!KEY8);/如果确认按下按键等待按键释放,没有则退出 return 8; /*/ else return 0;步进电机转速数码管显示3.1项目简介步进电机广泛应用于对精度要求比较高的运动控制系统中,如机器人、打印机、软盘驱动器、绘图仪、机械阀门控制器等。目前,对步进电机的控制主要有由分散器件组成的环形脉冲分配器、软件环形脉冲分配器、专用集成芯片环形脉冲分配器等。分散器件组成的环形脉冲分配器体积比较大,同时由于分散器件的延时,其可靠性大大降低;软件环形分配器要占用主机的运行时间,降低了速度;专用集成芯片环形脉冲分配器集成度高、可靠性好,但其适应性受到限制,同时开发周期长、需求费用较高。步进电机是微特电机的一种,其作为执行元件,是机电一体化的关键产品之一,广泛应用在各种自动化控制系统中。随着微电子和计算机技术的发展,步进电机的需求量与日俱增,在各个国民经济领域都有应用。同时步进电动机是一种将脉冲信号变换成相应的角位移(或线位移)的电磁装置,是一种特殊的电动机。一般电动机都是连续转动的,而步进电动机则有定位和运转两种基本状态,当有脉冲输入肘步进电动机一步一步地转动,每给它一个脉冲信号,它就转过一定的角度。步进电动机的角位移量和输入脉冲的个数严格成正比,在时间上与输入脉冲同步,因此只要控制输入脉冲的数量、频率及电动机绕组通电的相序,便可获得所需的转角、转速及转动方向。在没有脉冲输入时,在绕组电源的激励下气隙磁场能使转子保持原有位置于定位状态。步进电机以广泛应用在生产实践的各个领域。它最大的应用是在数控机床的制造中,因为步进电机不需要A/D转换,能够直接将数字脉冲信号转化成为角位移,所以被认为是理想的数控机床的执行元件。早期的步进电机输出转矩比较小,无法满足需要,在使用中和液压扭矩放大器一同组成液压脉冲马达。随着步进电动机技术的发展,步进电动机已经能够单独在系统上进行使用,成为了不可替代的执行元件。除了在数控机床上的应用,步进电机也可以并用在其他的机械上,比如作为自动送料机中的马达,作为通用的软盘驱动器的马达,也可以应用在打印机和绘图仪中。伴随着不同的数字化技术的发展以及步进电机本身技术的提高,步进电机将会在更多的领域得到应用。 步进电机是机电控制中一种常用的执行机构,它的用途是将电脉冲转化为角位移,它的的驱动电路根据控制信号工作,控制信号由单片机产生。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,控制换相顺序,即通电控制脉冲必须严格按照一定顺序分别控制各相的通断。通过控制脉冲个数即可以控制角位移量,从而达到正确定位的目的。控制步进电机的转向,即给定工作方式正序换相通电,步进电机正转,若按反序通电换相,则电机就反转。控制步进电机的速度,即给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步,两个脉冲的间隔越短,步进电机就转得越快。同时通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。该步进电机为一四相步进电机,采用单极性直流电源供电。只要对步进电机的各相绕组按合适的时序通电,就能使步进电机步进转动。图是该四相反应式步进电机工作原理示意图。四相步进电机步进示意图开始时,开关SB接通电源,SA、SC、SD断开,B相磁极和转子0、3号齿对齐,同时,转子的1、4号齿就和C、D相 绕组磁极产生错齿,2、5号齿就和D、A相绕组磁极产生错齿。当开关SC接通电源,SB、SA、SD断开时,由于C相绕组的磁力线和1、4号齿之间磁力线的作用,使转子转动,1、4号齿和C相绕组的磁极对齐。而0、3号齿和A、B相绕组产生错齿,2、5号齿就和A、D相绕组磁极产生错齿。依次类推,A、B、C、D四相绕组轮流供电,则转子会沿着A、B、C、D方向转动。 四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度。 单四拍、双四拍与八拍工作方式的电源通电时序与波形分别如图4.a、b、c所示:a. 单四拍 b. 双四拍 c.八拍步进电机工作时序波形图对步进电机四个绕组依次实现如下方式的循环通电控制:单四拍运行:正转A-B-C-D;反转 D-C-B-A 双四拍运行:正转AB-BC-CD-DA;反转DC-CB-BA-AD 单双八拍运行:正转A-AB-B-BC-C-CD-D-DA本项目要求步进电机转速数码管显示,测试4相步进电机常规驱动,使用1-2相励磁1-2相激励功率增倍,步进角度减半,抖动减少顺序如:a-ab-b-bc-c-cd-d-da,又称4相8拍数码管显示 03-19速度等级,数字越大,速度越慢。3.2电路原理图3.3参考程序/*- 名称:步进电机 内容:本程序用于测试4相步进电机常规驱动 使用1-2相励磁 1-2相激励功率增倍,步进角度减半,抖动减少 顺序如下 a-ab-b-bc-c-cd-d-da 又称4相8拍数码管显示 03-19速度等级,数字越大,速度越慢 -*/#include #define DataPort P0 /定义数据端口 程序中遇到DataPort 则用P0 替换sbit LATCH1=P22;/定义锁存使能端口 段锁存sbit LATCH2=P23;/ 位锁存unsigned char code dofly_DuanMa10=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;/ 显示段码值09unsigned char code dofly_WeiMa=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/分别对应相应的数码管点亮,即位码unsigned char TempData8; /存储显示值的全局变量sbit A1=P10; /定义步进电机连接端口sbit B1=P11;sbit C1=P12;sbit D1=P13;#define Coil_AB1 A1=1;B1=1;C1=0;D1=0;/AB相通电,其他相断电#define Coil_BC1 A1=0;B1=1;C1=1;D1=0;/BC相通电,其他相断电#define Coil_CD1 A1=0;B1=0;C1=1;D1=1;/CD相通电,其他相断电#define Coil_DA1 A1=1;B1=0;C1=0;D1=1;/D相通电,其他相断电#define Coil_A1 A1=1;B1=0;C1=0;D1=0;/A相通电,其他相断电#define Coil_B1 A1=0;B1=1;C1=0;D1=0;/B相通电,其他相断电#define Coil_C1 A1=0;B1=0;C1=1;D1=0;/C相通电,其他相断电#define Coil_D1 A1=0;B1=0;C1=0;D1=1;/D相通电,其他相断电#define Coil_OFF A1=0;B1=0;C1=0;D1=0;/全部断电unsigned char Speed;void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);/*- uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编,大致延时 长度如下 T=tx2+5 uS -*/void DelayUs2x(unsigned char t) while(-t);/*- mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0255 这里使用晶振12M,精确延时请使用汇编-*/void DelayMs(unsigned char t) while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); /*- 主函数-*/main() unsigned int i=512;/旋转一周时间 Init_Timer0(); EA=1; /全局中断开 EX0=1; /外部中断0开 IT0=1; /1表示边沿触发 Speed=3; TempData0=dofly_DuanMaSpeed/10;/分解显示信息,如要显示68, TempData1=dofly_DuanMaSpeed%10;/则68/10=6 68%10=8 Coil_OFF while(i-) /正向 Coil_A1 DelayMs(Speed); Coil_AB1 /遇到Coil_AB1 用A1=1;B1=1;C1=0;D1=0;代替 DelayMs(Speed); /改变这个参数可以调整电机转速 , /数字越小,转速越大,力矩越小 Coil_B1 DelayMs(Speed); Coil_BC1 DelayMs(Speed); Coil_C1 DelayMs(Speed); Coil_CD1 DelayMs(Speed); Coil_D1 DelayMs(Speed); Coil_DA1 DelayMs(Speed); /*- 外部中断程序-*/void ISR_INT0(void) interrupt 0 if(!INT0) DelayMs(10);/在此处可以添加去抖动程序,防止按键抖动造成错误 if(!INT0) /while(!INT1);/等待按键释放 Speed+; if(Speed=20) Speed=3; TempData0=dofly_DuanMaSpeed/10;/分解显示信息,如要显示68, TempData1=dofly_DuanMaSpeed%10;/则68/10=6 68%10=8 /*- 显示函数,用于动态扫描数码管 输入参数 FirstBit 表示需要显示的第一位,如赋值2表示从第三个数码管开始显示 如输入0表示从第一个显示。 Num表示需要显示的位数,如需要显示99两位数值则该值输入2-*/void Display(unsigned char FirstBit,unsigned char Num) static unsigned char i=0; DataPort=0; /清空数据,防止有交替重影 LATCH1=1; /段锁存 LATCH1=0; DataPort=dofly_WeiMai+FirstBit; /取位码 LATCH2=1; /位锁存 LATCH2=0; DataPort=TempDatai; /取显示数据,段码 LATCH1=1; /段锁存 LATCH1=0; i+; if(i=Num) i=0;/*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用|符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交口县2025山西吕梁市交口县农业类校园招聘5人笔试历年参考题库附带答案详解
- 东莞市2025广东东莞市文学艺术界联合会招聘聘用人员1人笔试历年参考题库附带答案详解
- 2025陕西中烟工业有限责任公司应届高校毕业生招聘96人笔试参考题库附带答案详解
- 2025河北沧州海发产业发展有限公司招聘48人笔试参考题库附带答案详解
- 2025春季福建三钢集团三明本部校园招聘8人笔试参考题库附带答案详解
- 2025广东广州市花都区恒悦房地产开发有限公司招聘项目用工人员16人笔试参考题库附带答案详解
- 2025年中国电信新疆公司春季校园招聘笔试参考题库附带答案详解
- 2025山东济南环球采暖设备制造有限公司招聘21人笔试参考题库附带答案详解
- 2025天津经济技术开发区管理委员会招聘雇员(30人)笔试参考题库附带答案详解
- 2025四川长虹置业有限公司招聘核算会计等岗位2人笔试参考题库附带答案详解
- 宠物医院建设方案(3篇)
- 2025年中学生法治素养竞赛题库及答案
- 《“高效办成一件事”2025年度第二批重点事项清单》知识解读
- 2025年飞行器设计与工程师考试试卷及答案
- 2025年三级律师试题题库及答案
- 智能化系统施工方案及技术措施
- 收费员考试题库及答案
- 计算机视觉技术 课件全套 第1-5章 计算机视觉概述-图像噪声
- 智能课件自动生成技术解析
- 2025至2030全球及中国汽车外饰件行业项目调研及市场前景预测评估报告
- 酒店运营管理权委托合同
评论
0/150
提交评论