51单片机数码管0到F动态显示
51单片机动态数码管实验报告
51单片机动态数码管实验报告一、背景动态数码管是一种常见的显示装置,它由多个LED组成,可以显示数字、字母和符号等信息。
在嵌入式系统中,动态数码管常用于显示各种信息,如温度、湿度、时间等。
本次实验旨在通过学习51单片机动态数码管的使用方法,了解动态数码管的工作原理和使用技巧。
二、分析动态数码管由多个共阴极或共阳极LED组成,每个LED都可用于显示一个数字或字符。
动态数码管的显示是通过快速切换数码管的管脚电平实现的,每个数码管显示部分的亮度和显示时间取决于刷新速度。
本次实验涉及到四位数码管,所以需要控制四个共阳极或共阴极数码管,通过快速切换显示四个数码管的方式实现动态显示效果。
实验所需要的材料有:51单片机开发板、数码管模块、面包板、杜邦线等。
以下是步骤:1.将数码管模块的共阳极或共阴极连接到51单片机开发板的IO口。
根据数码管模块的引脚连接方式,选择合适的IO口。
2.在51单片机开发板上搭建实验电路。
首先将开发板的VCC引脚连接到面包板的正电源线上,GND引脚连接到面包板的地线上。
然后将数码管模块的VCC引脚连接到面包板的正电源线上,GND引脚连接到面包板的地线上。
最后将数码管模块的信号引脚连接到51单片机开发板选择的IO口上。
3.编写程序。
使用C语言编写代码,通过控制IO口的电平和延时实现数码管的动态显示功能。
根据所需显示的数字和字符,选择合适的代码逻辑。
4.将编写好的程序下载到51单片机开发板上。
使用USB转串口工具将开发板与电脑连接,使用相应的下载软件将程序下载到开发板。
5.执行程序。
将开发板上的动态数码管模块打开,观察数码管的显示效果。
根据实际需求,调整程序中的显示内容和显示速度。
三、结果经过以上步骤,可以成功实现51单片机动态数码管的显示功能。
根据编写的程序和韦氏编码表,可以显示各种数字、字母和符号等信息。
通过调整程序中的显示内容和显示速度,可以实现不同的显示效果。
四、建议在进行实验过程中,需要注意以下几点:1.确保电路连接正确。
单片机数码管动态显示
动态显示1.掌握LED数码管显示及其一般电路结构;2.掌握LED动态显示程序的一般设计方法。
一、实验内容动态显示,也称为扫描显示。
显示器由6个共阴极LED数码管构成。
单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。
二、实验步骤1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。
图1 动态显示实验电路原理图2、按实验要求在KeilC中创建项目,编辑、编译程序。
3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。
4、在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。
三、实验要求1.编写一显示程序显示201071;2.显示特殊字符good;3.调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程序运行结果。
四、参考程序dbuf equ 30h ;置存储区首址temp equ 40h ;置缓冲区首址org 00hmov 30h,#2 ;存入数据mov 31h,#0mov 32h,#1mov 33h,#0mov 34h,#7mov 35h,#1mov r0,#dbufmov r1,#tempmov r2,#6 ;六位显示器mov dptr,#segtab ;段码表首地址dp00: mov a,@r0 ;取要显示的数据movc a,@a+dptr ;查表取段码mov @r1,a ;段码暂存inc r1inc r0djnz r2,dp00disp0: mov r0,#temp ;显示子程序mov r1,#6 ;扫描6次mov r2,#01h ;从第一位开始dp01: mov a,@r0mov p0,a ;段码输出mov a,r2 ;取位码mov p1,a ;位码输出acall delay ;调用延时mov a,r2rl amov r2,ainc r0djnz r1,dp01sjmp disp0segtab: db 3fh,06h,5bh,4fh,66hdb 6dh,7dh,07h,7fh,6fhdelay: mov r4,#03h ;延时子程序aa1: mov r5,0ffhaa: djnz r5,aadjnz r4,aa1retend实验原理MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。
一位数码管的动态数字显示(实验报告)
实验名称一位数码管显示变化数字一、实验目的1.通过AT89C52单片机控制数码管显示数字0到9。
2.用Protues设计、仿真以AT89C52为核心的数码管变化数字显示电路。
3.理解led七位数码管的显示控制原理。
二、实验任务让一位数码管能够从0不断显示到9。
三、实验设备微机1台、Proteus软件1套、GL10型51单片机学习开发板1台。
四、实验电路绘制五、汇编语言程序设计1.设计原理该led数码管为8段显示,每一段对应一个发光二极管,根据查询发现GL10给力者单片机是共阴数码管,当某个发光二极管的阳极为高电平时,发光二极管点亮相应的段被显示。
2.程序框图3.汇编程序$NOMOD51$INCLUDE (8051.MCU)ORG 0000HAJMP MAINORG 0030HMAIN:MOV R4, #00H ;记录码表的值MOV DPTR, #TABLE ;把地址送DPTRSTRAT:MOV A, R4MOVC A, @A+DPTR ;取码MOV P2, A ;显示INC R4 ;自增,取下个值做准备CALL DELAY ;调用CJNE R4, #16, STRAT ;判断是否显示完16个数值AJMP MAINDELAY: MOV R6, #1DELAY4:MOV R1, #10DELAY3:MOV R2, #100DEALY1:MOV R3, #250DEALY2:NOPNOPDJNZ R3,DEALY2DJNZ R2, DEALY1DJNZ R1, DELAY3DJNZ R6, DELAY4RET;码表TABLE:DB<span style="white-space:pre"></span>0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6FEND六、Proteus软件模拟仿真七、GL10单片机仿真系统1.实验板连线2.实验操作步骤先用杜邦线连接一位数码管模块和89c51芯片的p2口,然后用usb连接线将整个单片机与电脑相连,打开烧录软件,选中数码管动态显示变化数字的hex 文件,点击下载,按下单片机的电源开关,程序将烧录到单片机中,数码管就会从0显示到9,并循环。
基于51单片机实现LED数码管静态与动态显示的设计浅析
33第2卷 第22期产业科技创新 2020,2(22):33~34Industrial Technology Innovation 基于51单片机实现LED数码管静态与动态显示的设计浅析龙 志(广州大学松田学院,广州 增城 511370)摘要:随着社会的发展,在我们日常的生活中,数码管的应用随处可见,尤其是在电子应用设计显示等方面常常发挥着非常重要的作用,因此研究数码管的显示有非常重要的现实意义。
数码管我们可以分为静态显示和动态显示,这两种显示有着本质的区别,静态显示的特点是占用CPU 时间少,显示便于监测和控制,显示字形稳定,而动态数码管的显示,效果相对静态显示亮度差少许,但成本较低。
本设计主要是基于51单片机,先通过结合集成芯片74HC573对LED 数码管静态显示的硬件电路设计与分析,进一步拓展到采用芯片74HC138与LED 数码管动态显示的硬件电路设计与分析,最终实现两种不同的电路设计显示的方法。
关键词:LED 数码管;静态显示;动态显示;51单片机中图分类号:TP368.12 文献标识码:A 文章编号:2096-6164(2020)22-0033-02随着电子应用技术的不断发展,显示电路在电子设计应用方面更加广泛,尤其是LED 数码管显示在各行各业中的应用更加重要,如红绿交通灯显示,电子时钟显示,家电产品功能显示等方面都需要用到LED 数码管作为显示。
因此,对LED 数码管的显示控制有着非常重要的现实意义。
因此我们要实现LED 数码管的熟练显示控制,我们必须要根据数码管的特点来进行分析和设计,数码管有静态显示和动态显示的两种方法,接下对这两种电路作详细的分析与设计,最终实现对LED 数码管静态与动态的两种不同显示设计方法。
1 数码管静态显示电路设计数码管静态显示设计是利用MCS-51单片机结合两片集成芯片74HC573,实现对4个LED 数码管的显示控制。
具体设计如图1所示:图1 数码管静态显示设计电路图本电路设计主要是利用单片机的P0口来实现对数码管的位选控制与段选的控制,P0口之所以能够正确的对数码管进行位选与段选的控制,关键是在于设计中使用了芯片74HC573。
51单片机(四位数码管的显示)程序
51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。
最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。
51单片机数码管显示及矩阵键盘扫描程序
51单片机数码管显示及矩阵键盘扫描程序硬件实验十一八段数码管实验一、实验任务1、在静态数码管上轮流显示数字0-9。
2、在两个4位数码管上动态显示数字0-9二、流程图及程序静态显示:流程图:程序代码:#include#define uchar unsigned chucharcodevalue[10]={0xC0,0xF9,0xA4,0xB0,0X99,0x92,0x82,0xF8,0 x80,0x90};//0 -9数码管显示段码void delay(char x) //延时子程序{uchar i;for(i=0;i<200;i++);}main() //主函数{int i;while(1){for(i=0;i<10;i++) //显示0-9{P0=codevalue[i];delay(500); //延时1秒}}}动态显示:#include#includetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6D,0x7D,0x07,0x7f,0x6f}; //数码管显示数字字段unsigned char tab2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//片选字段unsigned char i,k,j,x;void delay(x); //声明延时子函数void main() //主函数{while(1){for(i=0;i<8;i++) //显示0-7{ P1=tab1[i];P0=tab2[i];delay(5); //延时}P1=tab1[8]; P0=tab2[0]; delay(5); //显示8-9P1=tab1[9]; P0=tab2[1]; delay(5);}}void delay(x) //延时函数定义{do{for(j=0;j<250;j++)for(k=0;k<250;k++);}}硬件实验十二矩阵键盘扫描显示一、实验任务1、把矩阵键盘上的按键输入的键码在静态数码管上显示出来。
(单片机实验教学资料)5.数码管动态显示
实验效果上,学生能够通过实际操作掌握数码管动态显示 的方法,提高对单片机的应用能力。在实验过程中,需要 注意避免数码管亮度过高导致视觉疲劳,以及保证程序的 稳定性,避免出现闪烁或乱码现象。
展望
技术发展与新应用
教学改进与新方法
个人能力提升与拓展
随着技术的不断发展,数码管动态显 示技术将会有更多的应用领域。例如 ,在智能家居、物联网等领域中,数 码管动态显示可以作为人机交互界面 ,实现更加直观、高效的信息展示。
或字符。
数码管内部通常有8个LED段, 分别表示数字0-9和字母A-F。
当给某个LED段加上正向电压时, 该段点亮;反之,则熄灭。
动态显示与静态显示的区别
静态显示
每个数码管在某一时刻只显示一 个字符,需要使用多路复用技术 来控制多个数码管。
动态显示
通过轮流点亮不同的数码管,使 多个数码管同时显示不同的字符 ,实现多位显示。
实验结果展示
结果1
数码管成功显示数字或字母,无闪烁 或错位现象。
结果2
数码管显示效果不理想,存在闪烁或 错位现象。
结果分析
分析1
程序编写正确,数码管连接无误,因此数码管能够正确显示数字或字母。
分析2
程序中存在延时函数设置不当或数码管连接存在问题,导致数码管显示效果不 理想。
05
总结与展望
总结
发送控制信号
02
根据需要显示的内容,编写程序代码以向数码管发送相应的控
制信号。
刷新显示
03
在需要动态显示的情况下,编写程序代码以实现数码管的刷新
显示。
数码管驱动程序的编写
确定驱动程序功能
根据实际需求,确定驱动程序应具备的功能,如显示数字、字母 或自定义字符等。
51单片机 电机控制 输入速度 七段数码管显示 汇编程序
51单片机电机控制输入速度七段数码管
显示汇编程序
简介
本文档介绍了使用51单片机控制电机的方法,以及如何通过输入设置速度,并使用七段数码管显示相关信息的汇编程序。
电机控制
在使用51单片机控制电机之前,需要连接合适的电机驱动模块,并将其与单片机进行连接。
通过控制电机驱动模块的引脚,可以实现电机的正转、反转、停止等功能。
输入速度
可以通过外部的输入设备(如按键、旋钮等)来设置电机的速度。
通过读取输入设备的状态,可以在程序中动态地调整电机的速度。
七段数码管显示
可以通过七段数码管来显示相关信息,如电机的速度、转速等。
通过控制七段数码管的引脚,可以实现在数码管上显示相应的数字
或字符。
汇编程序
使用51汇编语言编写程序,通过设置相应的控制寄存器和引
脚状态,可以实现电机的控制和数码管的显示。
汇编程序需要包括
以下几个方面的功能:
- 初始化相关引脚和寄存器
- 读取输入设备的状态
- 根据输入设备的状态设置电机的速度
- 控制电机的正转、反转、停止等操作
- 更新七段数码管显示的内容
总结
本文档介绍了51单片机控制电机的方法,以及通过输入设备
设置速度和使用七段数码管显示信息的汇编程序。
通过合理地编写
汇编程序,可以实现电机的精确控制和相关信息的显示。
以上是本文档的大致内容,希望对您有所帮助。
51单片机数码管动态显示分析
51单片机数码管动态显示分析51单片机数码管动态显示是一种常见的数字显示方式,其主要通过控制不同位数的数码管,使其依次显示数字,从而实现数字动态显示的效果。
以下将从原理和实现两个方面对51单片机数码管动态显示进行分析。
一、原理分析51单片机数码管动态显示的原理主要分为两部分,分别为定时器控制和位选控制。
定时器控制:在51单片机中使用定时器是为了保证数字动态显示的稳定性。
通过定时器中断的方式来控制数码管的显示时间,使得每个数字都有足够的时间显示,并且切换速度平稳。
位选控制:在数码管动态显示过程中,需要依次控制不同位数的数码管显示数字。
这是通过位选控制器实现的,它会依次选中各位数码管,并显示出要显示的数字。
这个过程会不停地重复,从而实现数字的动态显示。
二、实现分析51单片机数码管动态显示的实现需要以下几个步骤:1. 确定使用的数码管数量及其接口:需要确定使用几个数码管以及它们的引脚分别对应的单片机IO口。
2. 编写显示函数:编写一个函数来控制数码管的动态显示,其中需要实现定时器中断以及位选控制的功能。
3. 循环调用显示函数:将编写好的显示函数放到主函数中进行调用,并不断地循环执行,从而实现数字的动态显示。
需要注意的是,在编写显示函数的过程中,需要确定定时器中断的时间间隔、位选控制的顺序以及每个数码管对应的IO口。
这些因素会直接影响到数字的显示效果,因此需要仔细调试以达到最佳的显示效果。
在实现过程中,还需要考虑到如何读取用户输入并将其显示在数码管上。
一种常见的方式是通过外部按键来读取用户输入,然后通过数码管动态显示的方式,将输入的数字依次显示出来。
总之,51单片机数码管动态显示是一种常见的数字显示方式,其实现原理和步骤相对比较简单。
需要注意的是,在实际应用中还需要结合实际需求进行相应的调整,以达到最佳的显示效果。
51单片机数码管0到F动态显示
#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit du=P2^6;sbit we=P2^7;uchar num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delays(uint);void main(){we=1;//打开U2锁存器P0=0xc0;//送入位选信号we=0;while(1){du=1;P0=table[0];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfe;we=0;delays(500);du=1;P0=table[1];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfd;we=0;delays(500);du=1;P0=table[2];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfb;we=0;delays(500);du=1;P0=table[3];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xf7;we=0;delays(500);du=1;P0=table[4];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xef;we=0;delays(500);du=1;P0=table[5];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xdf;we=0;delays(500);du=1;P0=table[6];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfe;we=0;delays(500);du=1;P0=table[7];P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfd;we=0;delays(500);du=1;P0=table[8];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfb;we=0;delays(500);du=1;P0=table[9];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xf7;we=0;delays(500);du=1;P0=table[10];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xef;we=0;delays(500);du=1;P0=table[11];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;we=0;delays(500);du=1;P0=table[12];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfe;we=0;delays(500);du=1;P0=table[13];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfd;we=0;delays(500);du=1;P0=table[14];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xfb;we=0;delays(500);du=1;P0=table[15];du=0;P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱we=1;P0=0xf7;we=0;delays(500);}}void delays(uint xs){uint i,j;for(i=xs;i>0;i--)for(j=110;j>0;j--);//延时x秒}。
单片机开发-数码管动态显示
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
单片机开发仪视频教程
case(3): LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4): LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5): LSA=1;LSB=0;LSC=1; break;//显示第5位
单片机开发仪视频教程
/*******************************************************************************
* 函数名 : DigDisplay
* 函数功能 : 使用数码管显示
* 输入
:无
* 输出
:无
*******************************************************************************/
case(6): LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7): LSA=1;LSB=1;LSC=1; break;//显示第7位
} GPIO_DIG=DisplayData[i];//发送段码 j=10; //扫描间隔时间设定 while(j--); GPIO_DIG=0x00;//消隐 } }
单片机开发仪视频教程
动态扫描的原理
在实际的单片机系统中,往往需要多位显示。动态显示是一种最常见的 多位显示方法,应用非常广泛。所有数码管段选都连接在一起的时候, 怎么让数码管显示不一样的数字呢?动态显示是多个数码管,交替显示, 利用人的视觉暂停作用使人看到多个数码管同时显示的效果。就像我们 看的电影是有一帧一帧的画面显示的,当速度够快的时候我们看到它就 是动态的。当我们显示数码管的速度够快的时候,也就可以看到它们是 同时显示了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit du=P2^6;
sbit we=P2^7;
uchar num;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delays(uint);
void main()
{
we=1;//打开U2锁存器
P0=0xc0;//送入位选信号
we=0;
while(1)
{
du=1;
P0=table[0];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfe;
we=0;
delays(500);
du=1;
P0=table[1];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfd;
we=0;
delays(500);
du=1;
P0=table[2];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfb;
we=0;
delays(500);
du=1;
P0=table[3];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xf7;
we=0;
delays(500);
du=1;
P0=table[4];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xef;
we=0;
delays(500);
du=1;
P0=table[5];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xdf;
we=0;
delays(500);
du=1;
P0=table[6];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfe;
we=0;
delays(500);
du=1;
P0=table[7];
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfd;
we=0;
delays(500);
du=1;
P0=table[8];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfb;
we=0;
delays(500);
du=1;
P0=table[9];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xf7;
we=0;
delays(500);
du=1;
P0=table[10];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xef;
we=0;
delays(500);
du=1;
P0=table[11];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
we=0;
delays(500);
du=1;
P0=table[12];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfe;
we=0;
delays(500);
du=1;
P0=table[13];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfd;
we=0;
delays(500);
du=1;
P0=table[14];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xfb;
we=0;
delays(500);
du=1;
P0=table[15];
du=0;
P0=0xff;//送位选数据前关闭所有显示,防止打开位选锁存时原来段选数据通过位选锁存器造成混乱
we=1;
P0=0xf7;
we=0;
delays(500);
}
}
void delays(uint xs)
{
uint i,j;
for(i=xs;i>0;i--)
for(j=110;j>0;j--);//延时x秒}。