01-110903-0102-基于单片机的广告灯控制系统设计论文.docx

上传人:小飞机 文档编号:2010140 上传时间:2022-12-31 格式:DOCX 页数:30 大小:505.98KB
返回 下载 相关 举报
01-110903-0102-基于单片机的广告灯控制系统设计论文.docx_第1页
第1页 / 共30页
01-110903-0102-基于单片机的广告灯控制系统设计论文.docx_第2页
第2页 / 共30页
01-110903-0102-基于单片机的广告灯控制系统设计论文.docx_第3页
第3页 / 共30页
01-110903-0102-基于单片机的广告灯控制系统设计论文.docx_第4页
第4页 / 共30页
01-110903-0102-基于单片机的广告灯控制系统设计论文.docx_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《01-110903-0102-基于单片机的广告灯控制系统设计论文.docx》由会员分享,可在线阅读,更多相关《01-110903-0102-基于单片机的广告灯控制系统设计论文.docx(30页珍藏版)》请在三一办公上搜索。

1、摘 要广告灯是用于广告匾,楼宇装饰和户外装潢的灯具,近来随着国家经济的迅速发展,人民物质文化生活水平的不断提高,对于装饰的美化美观的要求也越来越高,广告灯的越来越多的出现在个人们的视野中。近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时自动控制系统日新月益更新。本文结合国内外霓虹灯控制技术的发展状况设计了一种采用美国ATMEL公司生产的AVR系列单片机中的ATmega8作控制芯片的霓虹灯控制器通过ATmega8芯片控制驱动电路,在由驱动电路驱动继电器,而继电器则作为霓虹灯的功率控制。其中,与别的产品在设计上不同的是,功率控制板块采用的是继电器阵列,而不是通常用的可控硅,将继电器阵

2、列模块化,电路的设计条理也很清晰,既方便检查线路故障,有方便技术维修。该板块的设计也是本次设计的重点和难点。另外,文中还介绍了电源电路、PC机与单片机的通讯接口电路的设计原理。软件设计部分采用的是ICC-AVR环境下的C语言进行编写程序,使用AVR Studio进行仿真说明。本文设计的霓虹灯单片机控制器,电路简单,抗干扰性强,图案变化方式多,可适用于各种霓虹灯牌面,可根据用户的要求,通过修改软件,控制多种多样花样的变化,是一代新型的霓虹灯控制器。关键字:霓虹灯;控制器;继电器;ATmega8 目录摘 要1目录2一 系统方案论证与比较4方案一:使用CD4060与KD5603作为主控制器4方案二:

3、NE555与CD4541作为主控制器5方案三:采用LED点阵与ATmega8作为主驱动器6二 元器件简介81.主控芯片ATmega8简介8(1)产品特性8(2)外设特点9(3)特殊的处理器特点9(4)I/O 和封装9(5)工作电压9(6)速度等级10(7)引脚说明11(8)ATmega8状态寄存器12(9)通用寄存器13(10)堆栈指针14(11)复位与中断152. 点阵显示器16(1)8*8点阵原理图16(2)8*8点阵实物图17(3)8*8点阵扫描方式17(4)8*8点阵应用举例173.驱动芯片4-16译码器CC451419(1)推荐工作条件19(2)工作温度范围19(3)极限值19三 广

4、告控制器系统设计211.系统硬件设计21(1)主控制器ATmega821(2)点阵扫描驱动电路212.系统软件设计22(1)程序流程图22(2)程序清单23一 系统方案论证与比较方案一:使用CD4060与KD5603作为主控制器这是一例变色广告灯自动控制电路,它采用了两种控制方式:光控方式,白天自动关闭,夜晚自动开启;时间控制方式,夜晚自动开启后,通过定时控制 使其在预定的时间自动关闭,以节约电能。在广告灯开启后,通过控制电路使两种彩色的广告灯光交替循环显示,增强广告效果。电路在灯光显示的同时还伴有广告 语言,介绍广告要说明的内容,是一种功能较完善的广告灯控制器。变色广告灯控制器的电路组成如图

5、6-45 所示。电路工作原理分析变色广告灯控制器电路由光控电路、时间控制电路、语言电路、彩灯循环控制电路和电源电路组成。光控电路是本电路的主控电路,它通过为其余控制电路接通工作电源的方式控制着整个工作电路的开启时间。光控电路主要由光敏电阻RG 和由VTl 、VT2 组成的直接桐合式晶体管放大电路组成。白天, RG 受光的照射阻值变小, VTl 的基极得到较大的偏置电压而导通,VT2 则因VTl的导通而截止。IC21C4因无工作电源而停止工作。夜晚来临时,光照减弱, RG 阻值升高, VTl 截止, VT2 因VTl 的截止而导通, 12V电源经VT2 向IC2IC4 提供工作电源,使其进入工作

6、状态。时间控制电路的作用是:当夜晚来临后使电路投入工作,夜深人静时停止工作,以避免不必要的电源消耗。时间控制电路由一只14 级二进制计数/分频电路CD4060 组成。该电路通过外接R4 、C7 组成一个RC 振荡器,其振荡周期T= 2. 2R4C7 = LIs 。经内部14 级分频(分频系数为16384) 后,控制时间约为5 小时( 1. 1 X 16384 =18022s , 18022/36005小时)。当VT2 导通后,电源通过C6 、R3 形成的复位脉冲使CD4060 复位,随后电路工作,产生脉冲并分频。在接通电源之初,由于IC2 的脚输出低电平, VT3 导通,为IC3 及IC4提供

7、工作电源。5 小时后定时结束,脚输出高电平, VT3 截止,切断了IC3 与IC4的工作电源,广告灯与语言电路因失去控制电源而停止工作。方案二:NE555与CD4541作为主控制器广告灯控制器由NE555组成的光控及抗干扰电路、CD4541定时电路、继电器控制、电源电路等部分组成。电原理图如图1所示。NE555时基电路接成施密特触发器,对光敏电阻RC接收到的信号进行整形和功率放大以后,驱动后续电路。当白天有光照时,其第脚输出低电平,夜晚无光照时输出高电平。 CD4541是一块具有振荡计数、定时功能的IC,在电路中作为定时控制,各脚功能如表1所示。CD4541工作时,第脚接振荡电阻,第脚接振荡电

8、容,第脚接保护电阻,第脚为输出脚,第脚可选择第脚的输出状态,第脚接低电平为单定时模式,接高电平为循环定时模式,第12、13脚可设定时间或设定输出频率,CD4541分频或计数次数如表2所示。220V交流市电经R9、C6阻容降压D2D5整流,C5滤波,WD2稳压,给继电器提供24V的吸合电压。此电压通过R8和WD1稳压,C4滤波,给IC1和IC2提供9.1V的工作电压。白天,光敏电阻RG阻值很小,通过RG和WR1分压,NE555第脚电压大于2/3Vcc,使第脚输出为低电平,三极管BG1截止。CD4541第脚复位端为高电平,其内部计数器清零复位,第脚输出端为低电平,BG2截止,继电器常开触电断开,其

9、受控电路不工作。 当夜幕降临的时候,RG阻值逐渐增大,NE555第脚电位逐渐降低,当小于13Vcc时,NE555第脚输出端信号翻转为高电平。BG1基极电位升高而导通,给CD4541第脚提供一个由高电平变为低电平的脉冲负跳变沿,使内部电路开始计数,输出端第脚输出高电平。BG2导通,继电器K1得电,常开触点闭合,受控电路工作。WR2和C3为CD4541外接振荡电阻和振荡电容,当经t=327682.3RC24871秒时间后,输出端第脚变为低电平。VT2截止,K1的常开触点失电而断开,受控电路停止工作。通过微调WR2,可改变定时时长。此电路对于外界干扰引起的白天瞬间变暗不会导致继电器误动作,因为NE5

10、55第、脚所接R1和C1组成延时抗干扰电路,当RG阻值瞬间增大时,由于电容C1两端电压不能突变,从而保持第脚电位基本不变,第脚输出仍为低电平。但当RG阻值长时间较大时,C1充电完成后,NE555第脚电压降低,第脚输出高电平,从而导致继电器动作。方案三:采用LED点阵与ATmega8作为主驱动器数控广告灯扫描器有以下主要特点: (1)分体联控结构:解决了大型广告灯工程既要求扫描器分体就近安装又要求扫描器整体调控的矛盾。 (2)强抗干扰设计:通过系统软件的抗干扰处理,避免了广告灯乱闪及抖动的现象,使版面极为干净。 (3)自动同步:当遇强干扰造成扫描器不能同步工作时,系统软件将在1分钟内自动修复。

11、(4)调试开关:对于大型广告灯工程的调试,这个功能极为有用。 (5)接插件结构:整个线路全部采用接插件绘声结构,拆卸简单,维修方便。图3 ATmega8与点阵显示广告控制系统综上所述,我们选择方案三。二 元器件简介1.主控芯片ATmega8简介(1)产品特性 高性能、低功耗的 8 位AVR 微处理器 先进的RISC 结构 130 条指令 大多数指令执行时间为单个时钟周期 32个8 位通用工作寄存器 全静态工作 工作于16 MHz 时性能高达16 MIPS 只需两个时钟周期的硬件乘法器 非易失性程序和数据存储器 8K 字节的系统内可编程Flash 擦写寿命: 10,000 次 具有独立锁定位的可

12、选Boot 代码区 通过片上Boot 程序实现系统内编程 真正的同时读写操作 512 字节的EEPROM 擦写寿命: 100,000 次 1K字节的片内SRAM 可以对锁定位进行编程以实现用户程序的加密(2)外设特点 两个具有独立预分频器8 位定时器/ 计数器, 其中之一有比较功能 一个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器 具有独立振荡器的实时计数器RTC 三通道PWM TQFP与MLF 封装的8 路ADC 路10 位ADC 8 路10 位ADC 面向字节的两线接口 两个可编程的串行USART 可工作于主机/ 从机模式的SPI 串行接口 具有独立片内振荡器的可编程看门狗定

13、时器 片内模拟比较器(3)特殊的处理器特点 上电复位以及可编程的掉电检测 片内经过标定的RC 振荡器 片内/ 片外中断源 5种睡眠模式: 空闲模式、ADC 噪声抑制模式、省电模式、掉电模式及Standby 模式。(4)I/O 和封装 23个可编程的I/O 口 28引脚PDIP 封装,32 引脚TQFP 封装,32 引脚MLF 封装(5)工作电压 2.7 - 5.5V (ATmega8L) 4.5 - 5.5V (ATmega8)(6)速度等级 0 - 8 MHz (ATmega8L) 0 - 16 MHz (ATmega8) 4 Mhz 时功耗, 3V, 25C 工作模式: 3.6 mA 空闲

14、模式: 1.0 mA 掉电模式: 0.5 A 具有8KB 系统内可编程 Flash 的 8 位 微控制器ATmega8引脚图ATmega8内部结构简图(7)引脚说明VCC 数字电路的电源。GND 地。端口B(PB7.PB0)XTAL1/XTAL2/TOSC1/TOSC2端口B 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口B 处于高阻状态。通过时钟选择熔丝位的设置, PB6 可作为反向振荡放大器或时钟操作电路的输入端。通过时钟选择

15、熔丝位的设置PB7 可作为反向振荡放大器的输出端。若将片内标定RC 振荡器作为芯片时钟源,且ASSR 寄存器的AS2 位设置,PB7.6 作为异步 T/C2 的TOSC2.1 输入端。端口B 的其他功能见P55“ 端口B 的第二功能” 及P 22“ 系统时钟及时钟选项” 。端口C(PC5.PC0) 端口C 为7 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口C 处于高阻状态。PC6/RESET 若RSTDISBL 熔丝位编程, PC6

16、作为I/O 引脚使用。注意PC6 的电气特性与端口C 的其他引脚不同若RSTDISBL 熔丝位未编程,PC6 作为复位输入引脚。持续时间超过最小门限时间的低电平将引起系统复位。门限时间见P 35Table 15 。持续时间小于门限时间的脉冲不能保证可靠复位。端口C 的其他功能见后。端口D(PD7.PD0) 端口D 为8 位双向I/O 口,具有可编程的内部上拉电阻。其输出缓冲器具有对称的驱动特性,可以输出和吸收大电流。作为输入使用时,若内部上拉电阻使能,则端口被外部电路拉低时将输出电流。在复位过程中,即使系统时钟还未起振,端口D 处于高阻状态。端口D 的其他功能见后。RESET 复位输入引脚。持

17、续时间超过最小门限时间的低电平将引起系统复位。门限时间见 P35Table 15 。持续时间小于门限时间的脉冲不能保证可靠复位。AVCC AVCC 是A/D转换器、端口C (3.0) 及ADC (7.6) 的电源。不使用ADC时,该引脚应直接与VCC 连接。使用ADC 时应通过一个低通滤波器与VCC 连接。注意,端口C (5.4) 为数字电源, VCC。AREF A/D 的模拟基准输入引脚。ADC7.6(TQFP 与MLF 封装) TQFP与MLF封装的ADC7.6作为A/D转换器的模拟输入。为模拟电源 且作为10位ADC通道。(8)ATmega8状态寄存器状态寄存器包含了最近执行的算术指令的

18、结果信息。这些信息可以用来改变程序流程以实现条件操作。如指令集所述,所有ALU 运算都将影响状态寄存器的内容。这样,在许多情况下就不需要专门的比较指令了,从而使系统运行更快速,代码效率更高。在进入中断服务程序时状态寄存器不会自动保存,中断返回时也不会自动恢复。这些工作需要软件来处理。AVR 中断寄存器 SREG 定义如下: Bit 7 I: 全局中断使能I 置位时使能全局中断。单独的中断使能由其他独立的控制寄存器控制。如果I 清零,则不论单独中断标志置位与否,都不会产生中断。任意一个中断发生后I 清零,而执行RETI指令后I 恢复置位以使能中断。I 也可以通过SEI 和CLI 指令来置位和清零

19、。 Bit 6 T: 位拷贝存储位拷贝指令BLD 和BST 利用T 作为目的或源地址。BST 把寄存器的某一位拷贝到T,而BLD 把T 拷贝到寄存器的某一位。 Bit 5 H: 半进位标志半进位标志H 表示算术操作发生了半进位。此标志对于BCD 运算非常有用。详见指令集的说明。 Bit 4 S: 符号位, S = N VS 为负数标志N 与2 的补码溢出标志V 的异或。详见指令集的说明。 Bit 3 V:2 的补码溢出标志支持2 的补码运算。详见指令集的说明。 Bit 2 N: 负数标志表明算术或逻辑操作结果为负。详见指令集的说明。 Bit 1 Z: 零标志表明算术或逻辑操作结果为零。详见指令

20、集的说明。 Bit 0 C: 进位标志(9)通用寄存器文件寄存器文件针对AVR 增强型 RISC 指令集做了优化。为了获得需要的性能和灵活性,寄存器文件支持以下的输入/ 输出方案: 输出一个 8 位操作数,输入一个 8 位结果。 输出两个 8 位位操作数,输入一个 8 位结果。 输出两个 8 位位操作数,输入一个 16 位结果。 输出一个 16 位位操作数,输入一个 16 位结果。CPU 32 个通用工作寄存器的结构(10)堆栈指针堆栈指针主要用来保存临时数据、局部变量和中断/ 子程序的返回地址。堆栈指针总是指向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数值将

21、减小。堆栈指针指向数据SRAM 堆栈区。在此聚集了子程序堆栈和中断堆栈。调用子序和使能中断之前必须定义堆栈空间,且堆栈指针必须指向高于0x60 的地址空间。使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。使用POP 指令将数据弹出堆栈时,堆栈指针加一;而用RET 或RETI 指令从子程序或中断返回时堆栈指针加二。AVR的堆栈指针由I/O空间中的两个8位寄存器实现。实际使用的位数与具体器件有关。请注意某些AVR 器件的数据区太小,用SPL 就足够了。此时将不给出SPH 寄存器。指令执行时序这一节介绍指令执行过程中的访问时序。AVR CPU 由系统时钟clkC

22、PU 驱动。此时钟直接来自选定的时钟源。芯片内部不对此时钟进行分频。Figure 5 说明了由Harvard 结构决定的并行取指和指令执行,以及可以进行快速访问的寄存器文件的概念。这是一个基本的流水线概念,性能高达1 MIPS/MHz,具有优良的性价比、功能/ 时钟比、功能/ 功耗比。(11)复位与中断处理AVR有不同的中断源。每个中断和复位在程序空间都有独立的中断向量。所有的中断事件都有自己的使能位。当使能位置位,且状态寄存器的全局中断使能位I 也置位时,中断可以发生。根据程序计数器PC 的不同,在引导锁定位BLB02 或BLB12 被编程的情况下,中断可能被自动禁止。这个特性提高了软件的安

23、全性。详见 P 209“ 存储器编程” 的描述。程序存储区的最低地址缺省为复位向量和中断向量。完整的向量列表请参见P 43“ 中断”列表也决定了不同中断的优先级。向量所在的地址越低,优先级越高。RESET 具有最高的优先级,第二个为INT0 外部中断请求0。通过置位通用中断控制寄存器 (GICR) 的IVSEL,中断向量可以移至引导Flash的起始处,参见P 43“中断” 。编程熔丝位BOOTRST也可以将复位向量移至引导Flash 的起始处。具体参见P 196“ 支持引导装入程序 在写的同时可以读(RWW, Read-While-Write) 的自我编程能力” 。任一中断发生时全局中断使能位

24、I 被清零,从而禁止了所有其他的中断。用户软件可以在中断程序里置位I 来实现中断嵌套。此时所有的中断都可以中断当前的中断服务程序。执行RETI 指令后I 自动置位。从根本上说有两种类型的中断。第一种由事件触发并置位中断标志。对于这些中断,程序计数器跳转到实际的中断向量以执行中断处理程序,同时硬件将清除相应的中断标志。中断标志也可以通过对其写”1” 的方式来清除。当中断发生后,如果相应的中断使能位为0,则中断标志位置位,并一直保持到中断执行,或者被软件清除。类似的,如果全局中断标志被清零,则所有已发生的中断都不会被执行,直到I 置位。然后挂起的各个中断按中断优先级依次执行。2. 点阵显示器(1)

25、8*8点阵原理图(2)8*8点阵实物图图为88点阵LED外观及引脚图,其等效电路如图(2)所示,只要其对应的X、Y轴顺向偏压,即可使LED发亮。例如如果想使左上角LED点亮,则Y0=1,X0=0即可。应用时限流电阻可以放在X轴或Y轴(3)8*8点阵扫描方式LED一般采用扫描式显示,实际运用分为三种方式(1)点扫描(2)行列扫描1664=1024Hz,周期小于1ms即可。若使用第二和第三种方式,则频率必须大于168=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。(4)8*8点阵应用举例点阵内部结构及外形如下

26、,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。 一般我们使用点阵显示汉字是用的16*16的点阵宋体字库,所谓16*16,是每一个汉字在纵、横各16点的区域内显示的。也就是说得用四个8*8点阵组合成一个1

27、6*16的点阵。如下图所示,要显示“你”则相应的点就要点亮,由于我们的点阵在列线上是低电平有效,而在行线上是高电平有效,所以要显示“你”字的话,它的位代码信息要取反,即所有列(1316脚)送(1111011101111111,0xF7,0x7F),而第一行(9脚)送1信号,然后第一行送0。再送第二行要显示的数据(1316脚)送(1111011101111111,0xF7,0x7F),而第二行(14脚)送1信号。依此类推,只要每行数据显示时间间隔够短,利用人眼的视觉暂停作用,这样送16次数据扫描完16行后就会看到一个“你”字;第二种送数据的方法是字模信号送到行线上再扫描列线也是同样的道理。同样以

28、“你”字来说明,16行(9、14、8、12、1、7、2、5)上送(0000000000000000,0x00,0x00)而第一列(13脚)送、“0”。同理扫描第二列。当行线上送了16次数据而列线扫描了16次后一个“你”字也就显示出来了。 因此,形成的列代码为00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别依次送到相应的列线上面,即可实现“0”的数字显示。3.驱动芯片4-16译码器CC4514(1)推荐工作条件电源电压范围 .3V15V输入电压范围.0VVDD(2)工作温度范围M 类.55125E 类 .4085(3)极限值电源电压 .0.5V18V输入电压 0

29、.5VVDD+0.5V输入电流 .10mA储存稳定.65150CD4514引脚图三 广告控制器系统设计1.系统硬件设计(1)主控制器ATmega8本控制系统采用存储容量大的AVR单片机ATmega8作为主控制器,直接可以将容量较大的系统字库存储在ATmega8内部存储器内,节约了资源,也使整个系统变得简洁。(2)点阵扫描驱动电路扫描电路采用CD4514,即4-16的译码器来进行行列扫描,用单片机控制其选通端INH来控制送行列字库码,控制扫描,并在输出端加一个非门,来提高其驱动能力,以满足点阵发光的需求。2.系统软件设计(1)程序流程图(2)程序清单*/#include void main (v

30、oid)while (1)led_initial();print_char(TEST LED 0123456789 abc);print_char(我爱金鱼);delay(50);/led_initial();print_char(自己编的练习程序,);print_char(显示效果与延时参数和电脑速度有很大关系.);print_char(我的电脑太差运行起来老是一顿一顿的_);print_char(相信换台好点的电脑会有更好的效果! 刘伟);delay(50);/*#include #include #include #define LED_DATA_LOW PORTA#define LED

31、_DDR_LOW DDRA#define LED_DATA_HIGH PORTB#define LED_DDR_HIGH DDRB#define LED_SCAN_DATAPORTC#define LED_SCAN_DDRDDRC#define uchar unsigned char #define uint unsigned int/缓存大小,对应LED屏的大小#define buffer_long64/定义字模数据数组的大小,即所存字的个数 #define gb16_tabel_long 62/* 利用定时器1 定时扫描LED屏 */* 定时参数对显示效果影响很大 */#define T1

32、_TIME_H 0xe7#define T1_TIME_L 0x50enum direction right,leftdir_f;uchar display_bufferbuffer_long;/* LED屏初始化*/void led_initial ( void ) uchar i; /display_buffer initial for (i=0; i 0)if (pi =128)/如果是汉字/* 查找 移位输出 */for(j=0; j=gb16_tabel_long; j+)if (gb_16j.index0 = pi) & (gb_16j.index1 = pi+1) if ( di

33、r_f = left )/如果字向左移动就顺序读字模 for (k=0; k=0; k-)d1 = gb_16j.maskk;k-;d0 = gb_16j.maskk;move_to_buffer (d0,d1);delay(1);break;/找到了就退出循环/* 字库没有的字,则输出空白0x00 */if (jgb16_tabel_long)/ for (k=0; k16; k+)d0 = 0x00;d1 = 0x00;move_to_buffer (d0,d1);delay(1);i+=2; else /如果是字符 j = pi-32;if (dir_f = left) for (k=0

34、; k=0; k-) d1 = ASC_MSK(j*16)+k;k-;d0 = ASC_MSK(j*16)+k;move_to_buffer (d0,d1);delay(1); i+; /* 数据移入缓存*/ d0 移入数据高八位/ d1 移入数据低八位void move_to_buffer (uchar d0,uchar d1)uchar i;if ( dir_f = right)/判断移动方向for (i=0; i(buffer_long-2); i+)display_bufferbuffer_long-1-i = display_bufferbuffer_long-1-i-2;displ

35、ay_buffer0 = d0;display_buffer1 = d1; else for (i=0; i(buffer_long-2); i+)display_bufferi = display_bufferi+2;display_bufferbuffer_long-2 = d0;display_bufferbuffer_long-1 = d1; /*显示数据扫描*/#pragma interrupt_handler scan_led:9void scan_led (void)uchar buf_c,scan_c=0;TCNT1H = T1_TIME_H; /reload counter

36、high value TCNT1L = T1_TIME_L; /reload counter low valuefor (buf_c=0; buf_cbuffer_long;)/LED_DDR_LOW = 0xff; /LED_DDR_HIGH = 0xff;LED_DATA_HIGH = display_bufferbuf_c;buf_c+;LED_DATA_LOW = display_bufferbuf_c;buf_c+;LED_SCAN_DATA = scan_c; delay(8);/LED_DDR_LOW = 0x00;/LED_DDR_HIGH = 0x00;scan_c+;/*延时子程序*/void delay (uchar d_time)uchar i,j;for (i=0; i=d_time; i+)j=25;while(j-);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号