关于单片机的一些小实验_06 一位数码管静态显示
单片机静态显示原理

单片机静态显示原理
单片机静态显示的原理如下:
1. 首先,单片机需要输出数字信号到LED数码管。
单片机通过IO口输出高低电平来控制LED数码管的亮灭,从而显示相应的数字。
2. 其次,单片机需要控制LED数码管的选择。
在多位数码管显
示中,单片机需要通过控制数码管的选择引脚来选择需要显示的数
码管,使其处于工作状态。
3. 然后,单片机需要按照一定的时间间隔不断地刷新LED数码
管的显示。
由于人眼的视觉暂留效应,LED数码管的刷新频率要足
够高,以保证人眼看到的是稳定的数字显示而不是闪烁的效果。
总的来说,单片机静态显示的原理就是通过控制IO口输出数字
信号,选择LED数码管并按照一定的刷新频率来实现数字的静态显示。
这种显示方法简单可靠,适用于对显示刷新速度要求不高的场合。
单片机数码管实验报告

单片机数码管实验报告单片机数码管实验报告引言:单片机作为一种重要的嵌入式系统,被广泛应用于各个领域。
在本次实验中,我们将探索单片机与数码管的结合,通过编程控制数码管的显示,实现不同的功能。
本文将详细介绍实验的背景、目的、方法和结果,并对实验过程中遇到的问题进行讨论和总结。
一、实验背景数码管是一种常见的输出设备,用于显示数字和字母等信息。
而单片机则是一种集成了微处理器、存储器和输入输出接口等功能的芯片,具有高度集成、灵活性强的特点。
将单片机与数码管结合起来,可以实现对数字的显示和控制,为实际应用提供了很大的便利。
二、实验目的本次实验的目的是通过编程控制单片机,实现对数码管的显示和控制。
具体包括以下几个方面:1. 学习单片机的基本原理和编程方法;2. 掌握数码管的工作原理和接口电路;3. 理解数码管的编码方式和显示原理;4. 实现基本的数码管显示功能,如显示数字、字母、符号等;5. 探索数码管的扩展应用,如时钟、计时器等。
三、实验方法1. 实验器材准备:本次实验所需的器材包括单片机开发板、数码管、连接线等。
2. 实验步骤:(1)搭建实验电路:将数码管与单片机开发板连接,并根据实验要求进行接线。
(2)编写程序:使用C语言编写程序,通过单片机的GPIO口控制数码管的显示。
(3)下载程序:将编写好的程序下载到单片机开发板上。
(4)实验验证:通过观察数码管的显示情况,验证程序的正确性。
四、实验结果经过实验验证,我们成功实现了对数码管的显示和控制。
通过编写不同的程序,我们可以实现以下几种功能:1. 显示数字:通过控制数码管的不同段点亮,可以显示0-9的数字。
2. 显示字母:通过控制数码管的不同段点亮,可以显示A-Z的字母。
3. 显示符号:通过控制数码管的不同段点亮,可以显示一些常见的符号,如"+"、"-"、"*"等。
4. 显示动画:通过快速切换数码管的显示内容,可以实现简单的动画效果,如闪烁、滚动等。
数码管静态显示实训报告

一、实训目的通过本次实训,掌握数码管静态显示的原理和方法,熟悉51单片机的编程技巧,以及如何利用单片机控制数码管显示特定的数字和字符。
同时,了解数码管在电子显示中的应用及其驱动电路的设计。
二、实训器材1. 51单片机开发板2. 数码管(共阴极或共阳极)3. 电阻4. 译码器(如74HC138)5. 驱动器(如74HC245)6. 连接线7. 编程软件(如Keil)8. 仿真软件(如Proteus)三、实训原理数码管静态显示是指每个数码管的每个段都由单片机的I/O口直接驱动。
当某个段需要显示时,相应的I/O口输出高电平或低电平,控制该段LED的亮灭。
共阴极数码管的段码共用一个电源的负极,高电平点亮;共阳极数码管的段码共用一个电源的正极,低电平点亮。
在本次实训中,我们使用51单片机的P0口输出段码数据,P2口输出位选信号,通过译码器和驱动器实现对数码管的驱动。
四、实训步骤1. 硬件连接(1)将数码管按照共阴极或共阳极的接法连接到单片机的P0口。
(2)将译码器的输入端连接到单片机的P2口。
(3)将驱动器的输入端连接到译码器的输出端。
(4)将驱动器的输出端连接到数码管的位选端。
2. 软件编写(1)定义数码管的字形码数组,存储0~9数字的字形码。
(2)编写主函数,通过循环遍历字形码数组,控制数码管显示相应的数字。
(3)编写延时函数,实现数字显示的间隔。
3. 仿真测试(1)使用Proteus软件搭建仿真电路。
(2)编写Keil软件中的程序,并编译生成HEX文件。
(3)将HEX文件下载到51单片机中。
(4)运行仿真程序,观察数码管显示的数字是否正确。
五、实训结果经过实训,我们成功实现了数码管静态显示功能。
数码管能够按照程序设置的方式,依次循环显示0~9十个数字。
六、实训心得1. 通过本次实训,我们了解了数码管静态显示的原理和实现方法,掌握了51单片机的编程技巧。
2. 在实训过程中,我们学会了如何使用译码器和驱动器扩展单片机的I/O口功能。
单片机静态数码管实验报告

单片机静态数码管实验报告一、引言静态数码管是一种常用的显示器件,广泛应用于各种仪器仪表、计时器、计数器等场合。
本实验旨在通过单片机控制静态数码管,实现数字的显示功能。
二、实验原理静态数码管由若干个发光二极管组成,每个发光二极管代表一个数字。
通过控制每个发光二极管的亮灭,可以显示不同的数字。
单片机通过控制数码管的共阳极或共阴极,以及发光二极管的亮灭,实现数字的显示。
三、实验器材1. 单片机开发板2. 静态数码管3. 连接线四、实验步骤1. 连接电路:将静态数码管的共阳极或共阴极与单片机开发板相应的IO口连接。
2. 编写程序:使用C语言编写程序,通过控制IO口的高低电平控制数码管的亮灭,实现数字的显示。
3. 烧录程序:将编写好的程序烧录到单片机开发板中。
4. 调试程序:通过调试程序,观察数码管是否能正常显示数字。
5. 结果分析:根据实验结果,分析程序的正确性及数码管显示的准确性。
6. 实验总结:总结实验过程中的问题及解决方法,并对实验结果进行分析和评价。
五、实验结果经过实验,我们成功地通过单片机控制静态数码管,实现了数字的显示。
数码管能够根据程序的控制,显示出不同的数字,显示效果良好,准确度高。
六、实验分析通过本实验,我们掌握了单片机控制静态数码管的方法和技巧。
在实验过程中,我们发现控制数码管显示数字的关键在于正确地控制IO口的高低电平。
同时,我们还发现静态数码管显示数字的亮度和清晰度与电源电压和电流的稳定性有关,需要合理选择电源参数。
七、实验应用静态数码管广泛应用于各种仪器仪表、计时器、计数器等场合。
通过单片机控制静态数码管,可以实现各种数字的显示功能,满足不同场合的需求。
八、实验总结通过本实验,我们深入了解了单片机控制静态数码管的原理和方法。
通过编写程序和调试程序,我们成功地实现了数字的显示功能。
实验过程中,我们遇到了一些问题,但通过不断的调试和尝试,最终解决了问题。
通过本次实验,我们不仅加深了对单片机原理的理解,还提升了实际操作和问题解决的能力。
单片机数码管静态显示实验程序(汇编)_共2页

单片机数码管静态显示实验程序org 00hnum equ p0;p0口连接数码管clr p2.0;mov dptr ,#tabclr amov r2,#0loop:movc a,@a+dptrmov num ,aacall delay_200msinc r2mov a,r2cjne r2,#15, loopmov r2,#0clr aajmp looptab :DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHdelay_200ms:mov r3,#20delay:acall delay_10msdjnz r3,delayret;;;;;;;;;;;;;;;;非中断精确delay_1ms:MOV R7 ,#249signed:nopnopdjnz R7 ,signed 1MS定时程序;循环部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4机器周期ret;2+249*4+2=1000us;返回指令2机器周期可以精确定时1MS,假设外部晶振是12M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;非中断精确10MS 定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov r6,#9;2个机器周期用2usdelay_10ms_sined: ;9次循环共用 9(1ms+4us)=9036us acalldelay_1msdjnz r6,delay_10ms_sinedMOV r6 ,#240;2个机器中期用 2ussigned_10ms :;循环部分 4机器周期共240次nopnopdjnz r6 ,signed_10msret;返回指令要2us;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;非中断精确定时 1s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1s:mov r5,#99delay_1s_signed:acall delay_10msdjnz r5,delay_1s_signed mov r5 ,#9signed_1s:acall delay_1msdjnz r5 ,signed_1smov r5 ,# 140signed_1s_:nopnopdjnz r5,signed_1s_;两个机器周期2us;循环指令周期为4us,加上延时10ms;(10ms+4us)*99 = 990.396ms;两个机器周期2us;循环指令周期为4us,加上延时1ms;(1ms+4us)*9 = 9ms+36us;机器周期2us;一次循环4us共有140次。
单片机数码管静态显示原理

单片机数码管的静态显示是一种常见的数字显示方式,它通过单片机控制数码管的每个段(a~g、dp)的开关状态,以显示所需的数字或字符。
以下是单片机数码管静态显示的基本原理:1. 数码管构成:数码管通常由七段LED(a~g)和一个小数点(dp)组成。
每个段代表数字或字符的一部分。
2. 驱动电路:数码管需要适当的电流和电压来点亮各个段。
通常,使用共阳极(Common Anode)或共阴极(Common Cathode)的数码管。
-共阳极数码管:该类型的数码管的阳极(正极)是共用的,而七段LED的阴极(负极)是分开的。
通过向某个段的阴极引入低电平(通电),并向共阳极引入高电平(不通电),就可以点亮该段。
其他段则保持高电平,不点亮。
-共阴极数码管:该类型的数码管的阴极是共用的,而七段LED的阳极是分开的。
通过向某个段的阳极引入高电平(通电),并向共阴极引入低电平(不通电),就可以点亮该段。
其他段则保持低电平,不点亮。
3. 单片机控制:使用单片机(如Arduino、PIC、8051等)来控制数码管的静态显示。
通过单片机的GPIO(通用输入输出)引脚连接到数码管的各个段,可以控制每个段的开关状态。
-共阳极数码管控制:通过将特定的段引脚设置为低电平(通电),并将共阳极引脚设置为高电平(不通电),来点亮该段。
其他段的引脚则设置为高电平,不点亮。
-共阴极数码管控制:通过将特定的段引脚设置为高电平(通电),并将共阴极引脚设置为低电平(不通电),来点亮该段。
其他段的引脚则设置为低电平,不点亮。
4. 数据刷新:由于单片机的处理速度很快,对人眼来说会感觉到数码管的显示是同时发生的。
实际上,单片机会不断地刷新数码管的显示。
它通过快速地切换各个段的开关状态,使人眼感知到连续的静态显示。
通过以上的原理,单片机可以根据需要控制数码管的每个段的开关状态,以实现所需的数字或字符的显示。
单片机实验报告——LED数码管显示实验

单⽚机实验报告——LED数码管显⽰实验(此⽂档为word格式,下载后您可任意编辑修改!)《微机实验》报告LED数码管显⽰实验指导教师:专业班级:姓名:学号:联系⽅式:⼀、任务要求实验⽬的:理解LED七段数码管的显⽰控制原理,掌握数码管与MCU的接⼝技术,能够编写数码管显⽰驱动程序;熟悉接⼝程序调试⽅法。
实验内容:利⽤C8051F310单⽚机控制数码管显⽰器基本要求:利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
提⾼要求:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:yyyy (年份)mm.dd(⽉份.⽇).asm;Description: 利⽤末位数码管循环显⽰数字0-9,显⽰切换频率为1Hz。
;Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000H ;复位⼊⼝AJMP MAINORG 000BH ;定时器0中断⼊⼝AJMP TIME0MAIN: ACALL Init_Device ;初始化配置MOV P0,#00H ;位选中第⼀个数码管MOV R0,#00H ;偏移指针初值CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#06HMOV TL0,#0C6H ;赋初值,定时1sLOOP: MOV A,R0ADD A,#0BH ;加偏移量MOVC +PC ;查表取,段码MOV P1,A ;段码给P1显⽰SETB TR0 ;开定时LOOP1: JNB PSW.1,LOOP1 ;等待中断CLR PSW.1INC R0 ;偏移指针加⼀CJNE R0,#0AH,LOOP3MOV R0,#00H ;偏移指针满10清零AJMP LOOP ;返回DB 0FCH,60H,0DAH,0F2H,66H ;段码数据表:0、1、2、3、4 DB 0B6H,0BEH,0E0H,0FEH,0F6H; 5、6、7、8、9 ;***************************************************************** ; 定时器0中断;***************************************************************** TIME0: SETB PSW.1 ;标志位置⼀MOV TH0,#06H ;定时器重新赋值MOV TL0,#0C6HLOOP3: CLR TR0 ;关定时RETI;***************************************************************** ;初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 -Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 -Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend提⾼部分:;*********************************************************;Filename: shumaguan2.asm;Description:在4位数码管显⽰器上依次显⽰当天时期和时间,显⽰格式如下:; 2012 (年份); 12.07(⽉份.⽇); 12.34(⼩时.分钟);Designed by:gxy;Date:2012117;*********************************************************$include (C8051F310.inc)ORG 0000HAJMP MAINORG 000BHAJMP TIME0MAIN: ACALL Init_DeviceMOV R0,#00H ;⽤于位选MOV R1,#00H ;⽤于段选MOV R2,#22H ;置偏移量,⽤于控制模式MOV R4,#8MOV R5,#250CLR PSW.1 ;标志位清零SETB EA ;允许总中断SETB ET0 ;允许定时器0中断MOV TMOD,#01H ;定时器0选⼯作⽅式1MOV TH0,#0FFHMOV TL0,#0C0H ;定时器赋初值1msBACK: MOV P0,R0 ;位选MOV A,R0ADD A,#40H ;选下⼀位MOV R0,AMOV A,R1ADD A,R2 ;加偏移量MOVC +PC ;查表取段码MOV P1,A ;段码给P1显⽰LOOP: SETB TR0 ;开定时HERE: JNB PSW.1,HERE ;等待中断CLR PSW.1DJNZ R5,BACKMOV R5,#250DJNZ R4,BACKMOV R4,#8 ;循环2000次(2s)MOV A,R2ADD A,#04H ;偏移量加04H,到下⼀模式段码初值地址 MOV R2,ACJNE R2,#2EH,LOOP2MOV R2,#22H ;加三次后偏移量回到初值LOOP2: AJMP BACK ;返回进⼊下⼀模式;段码数据表:DB 0DAH,60H,0FCH,0DAH ; 2102DB 0E0H,0FCH,61H,60H ; 701. 1DB 66H,0F2H,0DBH,60H ; 432. 1;*****************************************************************; 定时器0中断;***************************************************************** TIME0: MOV TH0,#0FFH MOV TL0,#0C0HCLR TR0SETB PSW.1INC R1 ;偏移指针加⼀CJNE R1,#04H,LOOPMOV R1,#00H ;偏移指针满04H清零RETI;***************************************************************** ; 初始化配置;***************************************************************** PCA_Init:anl PCA0MD, #0BFhmov PCA0MD, #000hretTimer_Init:mov TMOD, #001hmov CKCON, #002hretPort_IO_Init:; P0.0 - Unassigned, Open-Drain, Digital; P0.1 - Unassigned, Open-Drain, Digital; P0.2 - Unassigned, Open-Drain, Digital; P0.3 - Unassigned, Open-Drain, Digital; P0.4 - Unassigned, Open-Drain, Digital; P0.5 - Unassigned, Open-Drain, Digital; P0.6 - Unassigned, Open-Drain, Digital; P0.7 - Unassigned, Open-Drain, Digital; P1.0 - Unassigned, Open-Drain, Digital; P1.1 - Unassigned, Open-Drain, Digital; P1.2 - Unassigned, Open-Drain, Digital; P1.3 - Unassigned, Open-Drain, Digital; P1.4 - Unassigned, Open-Drain, Digital; P1.5 - Unassigned, Open-Drain, Digital; P1.6 - Unassigned, Open-Drain, Digital; P1.7 - Unassigned, Open-Drain, Digital; P2.0 - Unassigned, Open-Drain, Digital; P2.1 - Unassigned, Open-Drain, Digital; P2.2 - Unassigned, Open-Drain, Digital; P2.3 - Unassigned, Open-Drain, Digitalmov XBR1, #040hretInterrupts_Init:mov IE, #002hretInit_Device:lcall PCA_Initlcall Timer_Initlcall Port_IO_Initlcall Interrupts_Initretend六、程序测试⽅法与结果、软件性能分析软件调试总体截图:基础部分:软件运⾏时,我们发现P0端⼝为00H,P1端⼝以依次为FCH、60H、DAH、F2H、66H、B6H、BEH、E0H、FEH、F6H。
第6课数码管静态显示

第6课数码管静态显示第6课数码管静态显示1、数码管显示原理数码管是单片机应用系统中常用的一种显示器件,由于其价格低廉、操作简单,而被广泛的应用于各种数字显示系统中,常见的数码管如图1所示。
根据外观的不同,数码管又为分1位数码管、2位数码管、3位数码管、四位数码管等种类,如图2所示。
但不论是几位一体的数码管,其显示原理都是一样的,都是靠内部发光二极管发光来进行显示的。
下面我们以1位数码管为例介绍其显示原理。
1、数码管显示的原理数码管内部的电路如图3所示,图3 数码管内部电路图3中,显示一个完整的8字,需要7个小段,外加一个小数点,共8段,分别称为a段、b段、c段、d段、e段、f段、g段、dp段,每段内部都集成了一个发光二极管,此时要想让数码管显示数字,我们只需要让相对应的发光二极管发光就可以,例如要想让此数码管显示数字是1,只需要让b、c段的数码管发光,而其它段的数码管熄灭就可以了。
上图中,每个发光二极管的阳极全部引出,分别为a、b、c、d、e、f、g、dp,共8个引脚,而把所有发光二极管的阴极全部接到一起引出一个引脚w,此时我们把a、b、c、d、e、f、g、dp引脚称为数码管的段选引脚,简称段选;而把w称为位选引脚,简称位选。
通过单片机让数码管显示数字,就是通过编写程序让数码管内部相应的数码管发光。
数码管根据内部接法的不同又可分为共阴极数码管和共阳极数码管两种,上图中,数码管所有的发光二极管的阴极接在一起,而阳极单独引出,我们称此数码管为共阴极数码管,而还有一种接法是把阳极接在一起,而阴单独引出,这种数码管则称之为共阳极数码管,具体在写程序时应考虑到的是哪一种数码管,共阳极数码管如图4所示。
图4 共阳极数码管这里需要注意的是,在驱动数码管进行显示时,数码管内部的发光二极管要正常工作大概需要5mA的电流,而单片机的I/O口通常不能提供如些大的电流,此时需要上位电阻或者专用的驱动芯片,如7H HC573等,实验板上即采用的后者,后面会具体讲到。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#define SMG6_ON() (P0_5=0) //定义"SMG6_ON()"为P0.5输出低电平,选中数码管6
#define SMG6_OFF() (P0_5=1) //定义"SMG6_OFF()"为P0.5输出高电平,不选中数码管6
// 0 1 2 3 4 5 6 7 8 9 A b C d E F
/********************************************************************************************
*函数名称:main()
*功能:控制数码管1~8每个依次显示"0"~"F"这十六个字符
* 4.短接P0.0__SMG1
*短接P0.1__SMG2
*短接P0.2__SMG3
*短接P0.3__SMG4
*短接P0.4__SMG5
*短接P0.5__SMG6
*短接P0.6__SMG7
*短接P0.7__SMG8
*短接P2.7__SI1
*短接P2.6__RCK1
*短接P2.5__SCK1
*日期:2014年04月23号
typedef unsigned int uint32; //无符号32位整型变量
typedef signed int int32; //有符号32位整型变量
typedef float fp32; //单精度浮点数(32位长度)
typedef double fp64; //双精度浮点数(64位长度)
*函数名称:Delay()
*功能:软件延时
*入口参数:count延时参数,值越大,延时越长
*出口参数:无
*********************************************************************************************/
void Delay(uint16 count)
#define SMG4_ON() (P0_3=0) //定义"SMG4_ON()"为P0.3输出低电平,选中数码管4
#define SMG4_OFF() (P0_3=1) //定义"SMG4_OFF()"为P0.3输出高电平,不选中数码管4
#define SMG5_ON() (P0_4=0) //定义"SMG5_ON()"为P0.4输出低电平,选中数码管5
*********************************************************************************************/
void main (void)
{
uint8 i,j;
while(1) //死循环
{
/*依次选中数码管1~8,每个数码管依次显示"0"~"F"这十六个字符*/
default:
break;
}
}
/* 7段共阳数码管显示字符"0"~"F"的编码表*/
const uint8 DISPLAY_TAB[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,};
SMG2_ON();
break;
case 3:
SMG3_ON();
break;
case 4:
SMG4_ON();
break;
case 5:
SMG5_ON();
break;
case 6:
SMG6_ON();
break;
case 7:
SMG7_ON();
break;
case 8:
SM****************************************************************************************/
/*定义位变量*/
sbit P0_0 = P0 ^ 0;
sbit P0_1 = P0 ^ 1;
sbit P0_2 = P0 ^ 2;
#define SMG2_OFF() (P0_1=1) //定义"SMG2_OFF()"为P0.1输出高电平,不选中数码管2
#define SMG3_ON() (P0_2=0) //定义"SMG3_ON()"为P0.2输出低电平,选中数码管3
#define SMG3_OFF() (P0_2=1) //定义"SMG3_OFF()"为P0.2输出高电平,不选中数码管3
{
uint8 i;
while(--count != 0)
{
for(i = 0; i < 125; i++); // ";"表示空语句,CPU空转。
}// i从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/********************************************************************************************
*函数名称:SMG_Select()
*功能:选中要进行静态显示的一位数码管
*入口参数:num数码管编号(1~8)
*出口参数:无
*********************************************************************************************/
#define SCK1_H() (P2_5=1) //定义"SCK1_H()"为P2.5输出高电平,作为74HC595_1的时钟输入信号
#define SCK1_L() (P2_5=0) //定义"SCK1_L()"为P2.5输出低电平,作为74HC595_1的时钟输入信号
/********************************************************************************************
for(i=1;i<9;i++)
{
SMG_Select(i); //选中相应的数码管
for(j=0;j<16;j++)
{
SendDataTo74HC595_1(DISPLAY_TAB[j]); //被选中的数码管依次显示"0"~"F"这十六个字符
Delay(200); //延时
}
}
}
}
{SI1_H();} // SI1输出高电平
else
{SI1_L();} // SI1输出低电平
dat<<=1; //将要发送的1字节数据左移一位
SCK1_H(); // SCK1为高电平
}
RCK1_H(); // RCK1为高电平
}
/********************************************************************************************
sbit P0_3 = P0 ^ 3;
sbit P0_4 = P0 ^ 4;
sbit P0_5 = P0 ^ 5;
sbit P0_6 = P0 ^ 6;
sbit P0_7 = P0 ^ 7;
sbit P2_7 = P2 ^ 7;
sbit P2_6 = P2 ^ 6;
sbit P2_5 = P2 ^ 5;
*函数名称:SendDataTo74HC595_1()
*功能:向74HC595_1发送一字节数据
*入口参数:data要发送的数据
*出口参数:无
*注意:发送数据时,高位先发送
*********************************************************************************************/
#define SMG8_OFF() (P0_7=1) //定义"SMG8_OFF()"为P0.7输出高电平,不选中数码管8
#define SMG_ALL_OFF() (P0=0xFF) //定义"SMG_ALL_OFF()"为P0口输出高电平,全部数码管都不选中
#define SI1_H() (P2_7=1) //定义"SI1_H()"为P2.7输出高电平,作为74HC595_1的数据输入信号
*********************************************************************************************/
#include "reg52.h" //包含头文件
/*与编译器无关的数据类型定义*/
/********************************************************************************************/
#define SI1_L() (P2_7=0) //定义"SI1_L()"为P2.7输出低电平,作为74HC595_1的数据输入信号
#define RCK1_H() (P2_6=1) //定义"RCK1_H()"为P2.6输出高电平,作为74HC595_1的片选输入信号