jingxinwu.net
当前位置:首页>>关于单片机动态显示程序的资料>>

单片机动态显示程序

从静态显示和动态显示的区别说起,把动态显示占用IO少,利用视觉残留的方法说清楚就可以啊.附上电路图和程序供你参考,别忘记给分哦.#include "STC12C5A.h" //包含头文件 /***数字编码表 0~9***/ unsigned char const seg[10] = {0xfc,0x60

动态显示的数码和你的数码管的数据线接法有直接的联系的,显示代码是不一样的,你可以通过如下方法自行测试,做一个简单的循环,循环代码为,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,分别找出每个数据对应显示的数码管的,a,b,c,d,e,f,g,dp的哪一位,然后整理一下就可以得出0-9的数字显示码了.

数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类. ① 静态显示驱动:静态驱动也称直流驱动.静态驱动是指每个数码管的每一个段

P0口接1号LED,P2口接2号LED,1秒间隔,12M的51单片机,直接写的,没调试过,大致就这样#include"at89x51.h"unsigned int i=2000;void main(void){ TMOD=0x01; TR0=1; ET0=1; EA=1; while(){ if(i==2000){ P0=0X06; P2=0X21;} if(i==1000){ P0=0Xff; P2=0Xff;} }timer() interrupt 1{ TH0=0xFC; TL0=0x18; i--; if(i==0) { i=2000; }}

你的程序写的不错了, start: mov sp, #60h mov dptr,#table main: mov led1,#01h

START: MOV R0,#0FEH;R0初始化 MOV R1,#0 MAIN: MOV DPTR,#TAB;定义表头TABMOV P3,R0;开始给P3.0位清0MOV A,R1;MOVC A,@A+DPTRMOV P0,A;查表,R1为0,显示0 LCALL DL10MSMOV A,R0RL A;左移位,R1为1,数码管第二位显示1,当R1为7,数码管第二位显示7MOV R0,AINC R1CJNE R1,#8,MAIN;当R1为8时重新从第一位开始显示LJMP START

#include code unsigned char tab[10]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90 }; void display(unsigned int); void delay(unsigned int); void main(void) { //unsigned char count;//需要显示的数据 //count =12; unsigned int count;//需要显

动态显示00--FF ORG 0000H LJMP MAIN ORG 0040H MAIN:MOV R0,#0 MOV R1,#1 MOV DPTR,#TAB MOV P0,#0FFH MOV P2,#0FFH MOV P2,#0C0H LOOP1:MOV A,R0 INC R0 MOVC A,@A+DPTR MOV P0,A LCALL DELAY CLR C SUBB

下面是用段选和位选的数码管动态显示程序,可以参照下写法 #include <AT89X51.H> unsigned char dispbitcnt; //数码管位码扫描变量 unsigned char second;//秒变量 unsigned char minite;//分变量 unsigned char hour; //时变量 unsigned

这里的16个元素代表的是从十六进制数0~9、a、b、c、d、e、f的段码,根据什么来填这些数组元素?那就要看你设计程序时定义数组的作用才能确定.table[1]对应的元素为0x06,是十六进制数,转换成二进制数是00000110b,分别对应于数码管的dp、g、f、e、d、c、b、a 脚,所以在共阴数码管上点亮b、c两段,显示的是数字1,其它同理.

网站首页 | 网站地图
All rights reserved Powered by www.jingxinwu.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com