1595芯片驱动四位数码管程序

合集下载

四位数码管计算器程序

四位数码管计算器程序

#include"delay.h"void main(){NegaviePosive(1);//s0=s1=0;//value1=value0=value2=value3=value4=value5=0;while(1){DriveSEG(0,2,Get());}}#include<reg52.h>#ifndef _DELAY_H_#define _DELAY_H_extern void ShowSEG(long int m);extern void delay(unsigned int nms) ;extern void ChangeData(long int m);extern void OutDataofPort(char n,unsigned char Data);extern void SetDataPort(unsigned char Port);extern void SetSwichPort(unsigned char Port);extern void DriveSEG(char DataPort,char SwitchData,long int num); extern void NegaviePosive(int h);extern float Get();#endif#include<delay.h>#define uint unsigned intchar i;unsigned char a[8] ;char j=0;char SwitchPort;char DataPort;int g;int h;long int value1,value0,value3,value4 ;char value2,value5;char s0;char s1;char s2;char s3;char biao2;char biao3;char biao4;char biao5;char biao6;char biao7;char biao8;char biao9;char biao10;char biao11;char biao12=1;char biao13;char biao14;char biao15;char biao16;char biao17;char biao18=1;char code temp[16]={0xe7,0xeb,0xed,0xee,0xd7,0xdb,0xdd,0xde,0xb7,0xbb,0xbd,0xbe,0x77,0x7b,0x7d,0x 7e};char code temp1[6]={'+','-','*','/','='};char code team[20]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0X7F,0X6F,0xbf,0x86,0xdb,0xcf,0xe6,0 xed,0xfd,0x87,0xff,0xef};char code team1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};char code table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};char code table1[4]={0xfe,0xfd,0xfb,0xf7};void delay(unsigned int nms){int x,y,z;for(x=1;x>0;x--)for(y=11;y>0;y--)for(z=nms;z>0;z--);}void ChangeData( long int m){char b;for(b=0;b<8;b++)a[b]=m%10;m/=10;}}void ShowSEG( long int num) {ChangeData(num);if(s0==1){a[1] = a[1]+10;}if(s1==1){a[7] = a[7]+10;}if(s1==2){a[6] = a[6]+10;}if(s1==3){a[5] = a[5]+10;}if(s1==4){a[4] = a[4]+10;}if(s1==5){a[3] = a[3]+10;}if(s1==6){a[2] = a[2]+10;if(s1==7){a[1] = a[1]+10;}if(s2&&!s0&&!s1){switch(biao4){case 1: a[0]+=10;break;case 2: a[1]+=10;break;case 3: a[2]+=10;break;case 4: a[3]+=10;break;case 5: a[4]+=10;break;case 6: a[5]+=10;break;case 7: a[6]+=10;break;default:break;}}NegaviePosive(g);i=0;for(j=0;j<8;j++){//a[0]=0;a[1]=1;a[2]=2;a[3]=3;a[4]=4;a[5]=5;a[6]=6;a[7]=7;if(g==1){OutDataofPort(SwitchPort,table[i++]);OutDataofPort(DataPort,~team[a[j]]);delay(10);OutDataofPort(SwitchPort,0x00);delay(6);}else{OutDataofPort(SwitchPort,table1[i++]);OutDataofPort(DataPort,team[a[j]]);delay(10);OutDataofPort(SwitchPort,0xff);delay(6);}}}void OutDataofPort(char n,unsigned char Data){switch(n){case 0: P0=Data;break;case 1: P1=Data;break;case 2: P2=Data;break;case 3: P3=Data;break;default:break;}}void SetDataPort(unsigned char Port){DataPort=Port;}void SetSwitchPort(unsigned char Port){SwitchPort=Port;}void DriveSEG(char DataPort,char SwitchPort,long int num) {SetDataPort(DataPort);SetSwitchPort(SwitchPort);ShowSEG(num);}void NegaviePosive(int h){g=h;}float Get(){long int value;float shu1;float shu2;float shu3;char flag=0;unsigned char a1,b1,c1;int i;char biao=0;char biao1=0;P1=0x0f;a1=P1|0xf0;if(a1!=0xff){P1=0xf0;b1=P1|0x0f;c1=a1&b1;while(b1!=0xff&&c1!=0xbd&&c1!=0xbe&&c1!=0x77&&c1!=0x7b&&c1!=0x7d&&c1!=0x7e) {biao=1;biao3=1;b1=P1|0x0f;ShowSEG(shu2);}for(i=0;i<10;i++){if(c1==temp[i]){value=i;biao4=biao4+1;if(s2)biao13=biao13+1;if(s2&&biao8)biao10=1;if(s2)biao18=0;break;}}}value1=value;P1=0xf0;a1=P1|0x0f;if(a1!=0xff){P1=0x0f;b1=P1|0xf0;c1=a1&b1;while(b1!=0xff){b1=P1|0xf0;ShowSEG(shu2);}for(i=0;i<6;i++){if(c1==temp[i+10]){flag=i+10;if(flag!=15)biao1=1;if(flag!=15&&flag!=14)biao8=1;break;}}}// flag=10;biao3=1;shu2=623;biao13=2;if(flag>=10&&flag<16){value0=flag;switch(value0){case 10: value2='+';break;case 11: value2='-';break;case 12: value2='*';break;case 13: value2='/';break;case 14: value2='=';break;case 15: value2='.';break;default:break;}if(value2!='='&&value2!='.'){shu1=shu2;biao5=1;value5=value2;}if(value1<10&&value1>=0&&biao){biao=0;value4=value1+10*value3;value3=value4;shu2=(float)value4;value1=0;}if(value2==0&&biao3){biao4=1;}if(biao10&&!biao11||!s2){biao4=1;biao11=1;biao10=0;}if(value2=='.'){s2=1;}// biao1=1;value2='=';biao3=1;shu2=97644876.5;s2=1;biao8=1;if(biao8&&value2=='='){biao7=1;biao8=0;biao3=1;}if(biao18&&biao8){s2=0;}if(biao6&&biao3){s2=0;biao6=0;}if(biao6&&s2&&biao9)s2=0;biao6=0;}if(biao15&&biao3){biao15=0;s0=0;s1=0;}value0=10;biao3=1;biao1=1;biao7=1;s2=1;biao12=0;shu1=4785263;biao13=5;shu2=4258752;val ue5='+';if(value0>=10&&value0<15&&biao3&&biao1){value3=0;biao3=0;biao1=0;biao6=1;if(s2==0)biao12=0;if(s2&&biao12&&!biao7){biao12=0;biao16=1;switch(biao13){case 1: shu1=shu1/10; break;case 2: shu1=shu1/100; break;case 3: shu1=shu1/1000; break;case 4: shu1=shu1/10000; break;case 5: shu1=shu1/100000; break;case 6: shu1=shu1/1000000; break;case 7: shu1=shu1/10000000; break;default:break;}biao13=-1;}if(s3&&biao7){biao17=1;switch(s3){case 1: shu1=shu1/10; break;case 2: shu1=shu1/100; break;case 3: shu1=shu1/1000; break;case 4: shu1=shu1/10000; break;case 5: shu1=shu1/100000; break;case 6: shu1=shu1/1000000; break;case 7: shu1=shu1/10000000; break;default:break;}s3=0;}if(biao7){biao15=1;if(s2){biao9=1;switch(biao13){case 1: shu2=shu2/10; break;case 2: shu2=shu2/100; break;case 3: shu2=shu2/1000; break;case 4: shu2=shu2/10000; break;case 5: shu2=shu2/100000; break;case 6: shu2=shu2/1000000; break;case 7: shu2=shu2/10000000; break;default:break;}biao13=0;}switch(value5){case '+': shu1+=shu2;break;case '-': shu1-=shu2;break;case '*': shu1*=shu2;break;case '/': shu1/=shu2;if(shu1>0&&shu1<1){s0=1;s3=7;shu3=shu1*10000000;}if(shu1>=1&&shu1<10){s1=7;s3=7;shu3=shu1*10000000;}if(shu1>=10&&shu1<100){s1=6;s3=6;shu3=shu1*1000000;}if(shu1>=100&&shu1<1000){s1=5;s3=5;shu3=shu1*100000;}if(shu1>=1000&&shu1<10000){s1=4;s3=4;shu3=shu1*10000;}if(shu1>=10000&&shu1<100000) {s1=3;s3=3;shu3=shu1*1000;}if(shu1>=100000&&shu1<1000000) {s1=2;s3=2;shu3=shu1*100;}if(shu1>=1000000&&shu1<10000000) {s1=1;s3=1;shu3=shu1*10;}if(shu1>=10000000){shu3=shu1*1;}biao14=1;shu1=(long int)shu3;break;default:break;}if(biao7&&(biao16||biao17)&&!biao9&&!biao14) {biao14=0;biao7=0;biao16=0;biao17=0;if(shu1>0&&shu1<1){s0=1;s3=7;shu3=shu1*10000000;}if(shu1>=1&&shu1<10){s1=7;s3=7;shu3=shu1*10000000;}if(shu1>=10&&shu1<100){s1=6;s3=6;shu3=shu1*1000000;}if(shu1>=100&&shu1<1000){s1=5;s3=5;shu3=shu1*100000;}if(shu1>=1000&&shu1<10000){s1=4;s3=4;shu3=shu1*10000;}if(shu1>=10000&&shu1<100000){s1=3;s3=3;shu3=shu1*1000;}if(shu1>=100000&&shu1<1000000){s1=2;s3=2;shu3=shu1*100;}if(shu1>=1000000&&shu1<10000000) {s1=1;s3=1;shu3=shu1*10;}if(shu1>=10000000){shu3=shu1*1;}shu1=(long int)shu3;}if(s2&&biao7&&!biao14&&biao9){biao7=0;biao14=0;if(shu1>0&&shu1<1){s0=1;s3=7;shu3=shu1*10000000;}if(shu1>=1&&shu1<10){s1=7;s3=7;shu3=shu1*10000000;}if(shu1>=10&&shu1<100){s1=6;s3=6;shu3=shu1*1000000;}if(shu1>=100&&shu1<1000){s1=5;s3=5;shu3=shu1*100000;}if(shu1>=1000&&shu1<10000){s1=4;s3=4;shu3=shu1*10000;}if(shu1>=10000&&shu1<100000){s1=3;s3=3;shu3=shu1*1000;}if(shu1>=100000&&shu1<1000000){s1=2;s3=2;shu3=shu1*100;}if(shu1>=1000000&&shu1<10000000){s1=1;s3=1;shu3=shu1*10;}if(shu1>=10000000){shu3=shu1*1;}shu1=(long int)shu3;}}}value2='=';biao5=1;if(value2=='='&&biao5){shu2 = shu1;biao5=0;biao4=0;biao7=0;biao9=0;biao13=0;biao14=0;biao18=1;value2=0;s2=0;value5=0;value3=0;value4=0;}if(shu2<0||shu2>100000000){shu2=0;value3=0;value4=0;value2=0;value1=0;biao4=0;biao5=0;s0=0;s1=0;s2=0;}// shu2=( long int)shu2;return shu2;}。

avr74hc595驱动四位数码管程序

avr74hc595驱动四位数码管程序
请注意甄别内容中的联系方式诱导购买等信息谨防诈骗
avr74hc595驱动四位数码管程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define wei1_h PORTB|=BIT(4);//第1位为高电平
#define wei1_l DDRB&=~BIT(4);//第1位为低电平
#define wei4_h PORTB|=BIT(7);//第4位为高电平
#define wei4_l DDRB&=~BIT(7);//第4位为低电平
void hc595_write(uchar dat)
{
uchar i;
PORTC&=~BIT(7);//输出使能 低有效
DDRC|=BIT(7);
{
wei1_h;//位1
hc595_write(0x3f);//显示0
}
}
#define wei2_h PORTB|=BIT(5);//第2位为高电平
#define wei2_l DDRB&=~BIT(5);//第2位为低电平
#define wei3_h PORTB|=BIT(6);//第3位为高电平
#define wei3_l DDRB&=~BIT(6);//第3位为低电平
PORTB&=~BIT(3);
DDRB|=BIT(3);//MISO置底
PORTB|=BIT(3);
DDRB|=BIT(3);//MISO制高
for(i=0;i<8;i++)
{
PORTB&=~BIT(1);

74HC595驱动四位数码管

74HC595驱动四位数码管
输出电流 Io(Q0-Q7) Io(Q7S) ±35 ±25 mA mA
_____________________________________________________
电源端/地端电流 ±70 mA
_____________________________________________________
74HC595
74HC595控制四位数码管
74HC595芯片资料
74HC595是8位串入并出的接口芯片
74HC595芯片资料
74HC595芯片资料
74HC595的控制端说明
CR(10脚):低电平时将移位寄存器的数据清零,通常将字接VCC CPSR(11脚):上升沿时数据寄存器的数据移位。Q0-Q1-..Q7:下降沿移位寄存器数据不 变。(脉冲宽度:5V时,大于几十纳秒就行了,通常选微秒级) CPLA(12脚):高电平时移位寄存器的数据进入数据存储寄存器,低电平时存储寄存器数据 不变,通常将CPLA置为低电平,当移位结束后,在CPLA端产生一个正脉冲 (5V时,大于几十纳秒就行了,通常都选微秒级),更新显示数据。 EN(13脚):高电平时禁止输出(高阻态),如果单片机的引脚下不紧张,用一个引脚控制 它,可以方便的产生闪烁和熄灭的效果,比通过数据端移位控制要省时省力。
输出电压 VO -0.5~VCC+0.5 V
_____________________________________________________
钳位二极管电流 IIK/IOK ±20 mA
_________________________________________5芯片资料
极限参数:
参数 电源电压 输入电压 符号 VCC VI 参数范围 -0.5~7 -0.5~VCC+0.5 单位 V V

4位数码管引脚图及驱动办法

4位数码管引脚图及驱动办法

4位数码管引脚图及驱动办法4位数码管的引脚图
4位数码管的驱动办法
1、静态驱动也称直流驱动。

静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或许运用如BCD码二-十进制译码器译码进行驱动。

静态驱动的利益是编程简略,显现亮度高,缺陷是占用I/O端口多,如驱动5个数码管静态显现则需求5;x;8=40根I/O端口来驱动,要知道一个89S51单片机可用的I/O 端谈锋32个呢:),实习运用时有必要添加译码驱动器进行驱动,添加了硬件电路的杂乱性。

2、数码管动态显现接口是单片机中运用最为广泛的一种显现办法之一,动态驱动是将悉数数码管的8个显现笔划
a,b,c,d,e,f,g,dp的同名端连在一同,别的为每个数码管的公共极COM 添加位选通操控电路,位选通由各自独立的I/O线操控,当单片机输出字形码时,悉数数码管都接纳到相同的字形码,但终究是那个数码管会显现出字形,取决于单片机对位选通COM端电路的操控,所以咱们只需将需求显现的数码管的选通操控翻开,该位就显现出字形,没有选通的数码管就不会亮。

经过火时轮番操控各个数码管的的COM端,就使各个数码管轮番受控显现,这便是动态驱动。


轮番显现进程中,每位数码管的点亮时刻为1~2ms,因为人的视觉暂留景象及发光二极管的余辉效应,虽然实习上各位数码管并非一同点亮,但只需扫描的速度满意快,给人的形象便是一组安稳的显现数据,不会有闪耀感,动态显现的作用和静态显现是相同的,可以节约许多的I/O端口,并且功耗更低。

51单片机中4个数码管的显示实验

51单片机中4个数码管的显示实验

51单片机中4个数码管的显示实验一、实验目的:1、看懂电路原理图,明白4个共阳数码管的编程方式。

2、看懂参考程序,学会使用扫描法来对4个数码管进行扫描显示。

学会使用定时器。

二、实验设备:51通用实验板一个,51仿真器一个,40针仿真头一个,12V电源一个,串口线一条。

三、实验电路原理图:四、实验内容:4个数码管一次显示4个数字,下一次加4进行显示,数字最大为9,到9再从0重新进行显示。

中间有一定的时间延时。

改变数据用定时器进行设置。

五、实验步骤:安实物图的形式把实验设备连接在一起。

六、参考程序:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管的显示实验;使用70H,71H,72H,73H进行数码管显示数据存储。

75H进行定时器定时时间设置,发光二极管L1进行亮灭显示改变数据标志。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SETTIM EQU 75H;定时时间长短设定ORG 0000HLJMP MAINORG 000BHLJMP TIM0;定时器0中断ORG 0030HMAIN: ;主程序MOV SP,#07HMOV SETTIM ,#00HLCALL INIT;初始化数据MOV TMOD,#01H;设值定时器0MOV TH0,#00H;定时初值MOV TL0,#00HSETB EA;开总中断SETB ET0;开中断SETB TR0;开始定时器STAR:LCALL DISPLJMP STAR;****************************************;显示子程序DISP: MOV R0,#0FEHMOV R1,#70HDISP1:MOV A,R0MOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ALCALL DLYSINC R1MOV A,R0RL AMOV R0,AJB ACC.4,DISP1RET;***************************************;定时器0中断程序TIM0:CLR TR0CLR EAMOV A,SETTIMINC ACJNE A,#9,TM1LCALL CHGMOV A,#00HCPL P1.0;定时器运行标志,使L1灯不断闪动TM1: MOV SETTIM,AMOV TH0,#00HMOV TL0,#00HSETB EASETB TR0RETI;****************************改变要显示的值CHG:MOV R0,#70HMOV R3,#04HCH1:MOV A,@R0INC ACJNE A,#0AH,CH2MOV A,#00HCH2:MOV @R0,AINC R0DJNZ R3,CH1RET;********************************************;初始化程序INIT: ;初始化70H---73H中的数据,使用R0,R1,R3MOV R0,#00H;数据初值MOV R3,#04HMOV R1,#70H;4个数码管数据存储地址IN0:MOV A,R0MOV @R1,AINC R0INC R1DJNZ R3,IN0RET;*****************************************;延时程序DLYS: MOV R6,#5DLYS0:MOV R5,#150DJNZ R5,$DJNZ R6,DLYS0RET;*****************************************;数据表TAB:DB 0C0H,0F9H,0A4H,0B0H; 0,1,2,3DB 99H,92H,82H,0F8H;?,5,6,7DB 80H,90H,88H,83H;?,9,A,BDB 0C6H,0A1H,86H,8EH;C,D,E,FDB 8CH,89H,07fh,0bFH;P,H,.,-11001011END七、思考:修改一下程序,使用定时器2进行定时改变数据进显示。

单片机 4位时钟数码管

单片机 4位时钟数码管

单片机控制4位时钟数码管的方法如下:
连接硬件:将4位数码管的共阳(或共阴)引脚连接到单片机的I/O口,连接数码管的段选引脚到单片机的另外4个I/O口。

同时,连接一个晶振和相关的电容电阻到单片机的时钟输入引脚和地。

设置引脚:在代码中定义每个数码管引脚对应的I/O口为输出模式,用于控制数码管的显示。

编写代码:使用单片机的定时器功能,通过编程计算出每个数码管显示的数字对应的段选编码,并在定时器中断服务程序中更新数码管的显示。

调试程序:将程序下载到单片机中,通过观察数码管的显示效果,调整程序中的参数或代码,以达到预期的显示效果。

需要注意的是,具体的实现方式可能因单片机的型号和数码管的类型而有所不同,需要根据实际情况进行相应的调整。

51单片机(四位数码管的显示)程序

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***************************************/。

一个单片机4键控制四个数码管显示的程序或思路

一个单片机4键控制四个数码管显示的程序或思路
Tags:,单片机,控制,数码
例如你刚上电单片机复位你的单片机先是p1口输出高电平到数码管的段选然后p2口ቤተ መጻሕፍቲ ባይዱ出高电平到反相器然后再输出低电平到数码管的位选
[单片机][控制][数码]求一个单片机4键控制四个数码管显示的程序或思路
应该是P2.0-P2.3控制四个位选码 P2.0-P2.78个段选码
使用两个74HC573 锁存器 并另外用两个端口入P1.0 P1.1分别控制段选使能和位选使能 1^0 1^1 写程序时,先开位选dula=1 再送数P2=0xxx 关段选dula=0 位选操作如上
/*********************************************************
164串行输出段码:
P4.4 U164CP
P4.5 U164D
138输出位选
P4.3选通138
P4.0对应138A
P4.1对应138A
P4.2对应138A
*********************************************************/
}
&= ~BIT3;
}
首先你要看你的数码管是哪类啊?是共阳极还是共阴极。如果你全部都是亮的话,而且是显示个8字的。那么你控制位选,可以改变数码管的显示个数。如果你想改变数码管显示的数字,就改变段选吧。其实你这个一接电源就亮着是有原因的,你接上电源时,单片机的输出端口P0,P1,P2,P3都是复位的。除了P0口外,其他都处于高电平输出。当然,你的板子上也是肯定有个反相器,使高电平变成低电平。例如你刚上电,单片机复位,你的单片机先是P1口输出高电平到数码管的段选,然后P2口输出高电平到反相器,然后再输出低电平到数码管的位选。这样数码管就亮着啦。(我举例的数码管是共阴极的)

单片机驱动数码管设计详解(用74HC595实现)

单片机驱动数码管设计详解(用74HC595实现)

单⽚机驱动数码管设计详解(⽤74HC595实现)简单设计了⼀个单⽚机驱动数码管的电路,该设计中只使⽤了4位数码管,占⽤了单⽚机3个IO⼝,如果驱动芯⽚全⽤满可以驱动8位数码管。

仅供初学者分享学习。

1. 数码管显⽰设计本设计使⽤了⼀个4位的数码管,为共阳型,为了节省单⽚机的IO⼝,使⽤了两⽚74HC595作为数码管的驱动芯⽚,共占⽤3个IO⼝。

74HC595部分电路图如下:与单⽚机相连接的三个脚分别为:HC_DAT,HC_RCK,HC_CLK。

两⽚595采⽤级联⽅式,即U2的第9脚接到U3的第14引脚。

2. 74HC595简介74HC595是8位的移位寄存器,串⼊并出,并具有锁存功能,被⼴泛的⽤于数码管、点阵的驱动电路中。

其管脚介绍如下:15:数据输出A-接数码管数据A段;1:数据输出B-接数码管数据B段;2:数据输出C-接数码管数据C段;3:数据输出D-接数码管数据D段;4:数据输出E-接数码管数据E段;5:数据输出F-接数码管数据F段;6:数据输出G-接数码管数据G段;7:数据输出H-接数码管数据H段;16:电源正脚-接电源正;8:电源负脚-接电源负;14:数据输⼊脚-接单⽚机管脚;12:数据锁存时钟-接单⽚机管脚;11:数据输⼊时钟-接单⽚机管脚;13:使能输出脚-低电平有效,接低电平;10:数据清零-不清零,接⾼电平;9:数据级联输出-接下⼀⽚595的数据输⼊脚;74HC595的真值表如下:知道了74HC595的引脚定义和真值表,那该如何编程呢?下⾯重点来了,通过时序图来编程。

看重点!!!3. 74HC595时序图我是重点!我是重点!我是重点!通过时序可以看出:1. SCK是上升沿的时候要把数据写⼊;2. RCK是上升沿的时候数据才能锁存显⽰;3. 有数据操作的过程中RESET必须是⾼电平;4. EN必须是低电平,595才能⼯作;知道了以上4点就可以写程序了。

其中3、4条是硬件连接上的事情(也可以⽤单⽚机的IO⼝来连接,这样的话可以随时控制74HC595的⼯作与否情况)。

四位数码管时钟程序

四位数码管时钟程序

#include <reg52.h>#define uint unsigned int#define uchar unsigned charuint n,tt;uchar qian,bai,shi,ge;sbit key1=P3^2;sbit key2=P3^3;sbit key3=P3^4;sbit key4=P3^5;void delay(uint x){uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}uchar code tab[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};void init(){n=1752;qian=n/1000;bai=(n%1000)/100;shi=((n%1000)%100)/10;ge=((n%1000)%100)%10;}void keyscan(){if(key4==0){delay(10);if(key4==0){while(!key4);switch(ge){case 0:ge++;break;case 1:ge++;break;case 2:ge++;break;case 3:ge++;break;case 4:ge++;break;case 5:ge++;break;case 6:ge++;break;case 7:ge++;break;case 8:ge++;break;case 9:ge=0;break;}}}if(key3==0){delay(10);if(key3==0){while(!key3);switch(shi){case 0:shi++;break;case 1:shi++;break;case 2:shi++;break;case 3:shi++;break;case 4:shi++;break;case 5:shi=0;break;}}}if(key2==0){delay(10);if(key2==0){while(!key2);if(qian==0){switch(bai){case 0:bai++;break;case 1:bai++;break;case 2:bai++;break;case 3:bai++;break;case 4:bai++;break;case 5:bai++;break;case 6:bai++;break;case 7:bai++;break;case 8:bai++;break;case 9:bai=0;break;}}if(qian==1){switch(bai){case 0:bai++;break;case 1:bai++;break;case 2:bai++;break;case 3:bai++;break;case 4:bai++;break;case 5:bai++;break;case 6:bai++;break;case 7:bai++;break;case 8:bai++;break;case 9:bai=0;break;}}if(qian==2){switch(bai){case 0:bai++;break;case 1:bai++;break;case 2:bai++;break;case 3:bai=0;break;}}}}if(key1==0){delay(10);if(key1==0){while(!key1);if(bai==0){switch(qian)case 0:qian++;break;case 1:qian++;break;case 2:qian=0;break;}}if(bai==1){switch(qian){case 0:qian++;break;case 1:qian++;break;case 2:qian=0;break;}}if(bai==2){switch(qian){case 0:qian++;break;case 1:qian++;break;case 2:qian=0;break;}}if(bai==3){switch(qian){case 0:qian++;break;case 1:qian++;break;case 2:qian=0;break;}}if(bai==4){switch(qian){case 0:qian++;break;case 1:qian=0;break;}}if(bai==4){switch(qian)case 0:qian++;break;case 1:qian=0;break;}}if(bai==5){switch(qian){case 0:qian++;break;case 1:qian=0;break;}}if(bai==6){switch(qian){case 0:qian++;break;case 1:qian=0;break;}}if(bai==7){switch(qian){case 0:qian++;break;case 1:qian=0;break;}}if(bai==8){switch(qian){case 0:qian++;break;case 1:qian=0;break;}}if(bai==9){switch(qian){case 0:qian++;break;case 1:qian=0;break;}}}}}void main (){P3=0xff;init();TMOD=0x01; //È·¶¨¶¨Ê±Æ÷0¹¤×÷·½Ê½Îª01TH0=(65536-50000)/256;//×°³õÖµTL0=(65536-50000)%256;EA=1;//´ò¿ª×ÜÖжÏET0=1;//¿ª¶¨Ê±Æ÷0ÖжÏTR0=1;//¿ªÊ¼¼Æʱ//EX0=1;EX1=1;IT0=1;IT1=1;while(1){P0=0xfe;P2=tab[ge];delay(1);P0=0xff;P2=0xff;P0=0xfd;P2=tab[shi];delay(1);P0=0xff;P2=0xff;P0=0xfb;P2=tab[bai]-0x80;delay(1);P0=0xff;P2=0xff;P0=0xf7;P2=tab[qian];delay(1);P0=0xff;P2=0xff;keyscan();}}void zijia() interrupt 1{TH0=(65536-50000)/256;//ÖØ×°³õÖµTL0=(65536-50000)%256;tt++;if(tt==1200){tt=0;ge++;if(ge==10){ge=0;shi++;if(shi==6){shi=0;bai++;if(qian==0){if(bai==10){bai=0;qian++;}}if(qian==1){if(bai==10){bai=0;qian++;}}if(qian==2){if(bai==4){bai=0;qian=0;}}}}}}。

51单片机驱动4位数码管的实现方法

51单片机驱动4位数码管的实现方法

51单片机驱动4位数码管的实现方法EA /VP 31X119X218RE SET 9RD 17W R 16INT 012INT 113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSE N29AL E/P 30TX D 11RX D 10U18051AB C D abcd efg d pL1A 7B 1C 2D 6LT 3BI 4LE5A 13B 12C 11D 10E 9F 15G14U24511VCCY1CRYSTA LC133pC233pR110kC310uFS1VCCR21k R31k R41k R51k R61k R71k R81k12345678161514131211109RP 1VCCS2电路如图所示。

相应的C 语言程序为: #includeunsigned int a0,a1,a2,a3,a; int t;sbit key=P0^2;void showit();//用于在数码管上显示的子程序 void delay_n40us(unsigned int n);void delay_n40us(unsigned int n) {unsigned int i; unsigned char j; for(i=n;i>0;i--) for(j=0;j<2;j++) ; }void showit() { t=10;while(t--) { a3=a/1000; a2=(a00)/100; a1=(a0)/10; a0=a;P1=0xe0+a0;delay_n40us(200);P1=0xd0+a1;delay_n40us(200);P1=0xb0+a2;delay_n40us(200);P1=0x70+a3;delay_n40us(200);}}void main(){a=6999;while(1){if(key==1){a=a-1;showit();}else showit();}}最后说说这个电路都实现了什么功能:即整机供电后,数码管从“6999”开始倒计数,此过程中如果开关S2被按下,则会停止倒计时,松开开关后倒计时继续。

51单片机C编程(74HC595控制四位数码管)

51单片机C编程(74HC595控制四位数码管)
sbit P20=P2^0;
sbit P21=P2^1;
sbit P22=P2^2;
sbit P23=P2^3;
sbit P24=P2^4;
sbit P25=P2^5;
sbit P26=P2^6;
sbit P27=P2^7;
sbit P30=P3^0;
sbit P31=P3^1;
uchar temp;
void delay(int ms)
{
int k;
while(ms--)
{
for(k=0;k<250;k++)
{
_nop_();
_nop_();
}
}
}void WR_59来自(void) //将显示数据送入74HC595内部移位寄存器
{
uchar j;
for(j=0;j<8;j++)
{
temp=temp<<1;
[转] 51单片机C编程(74HC595控制四位数码管)2011.3.3阅读(0)下一篇:51单片机C编程(... |返回日志列表赞赞赞赞转载(6)分享评论复制地址编辑
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
temp=DAT[8];
WR_595();
OUT_595();
}
if(P30==0)
{
while(P30==0);
temp=DAT[9];
WR_595();
OUT_595();
}

4位数码管驱动芯片

4位数码管驱动芯片

4位数码管驱动芯片4位数码管驱动芯片是一种集成电路芯片,用于控制和驱动四位数码管显示器。

它通常包含多个功能模块,如扫描驱动、段选驱动、亮度调节等,以完成对数码管显示的控制。

4位数码管驱动芯片的核心功能是实现对4个数码管的控制和驱动。

它往往具备以下特点和功能:1. 扫描驱动:可以通过扫描方式实现对多位数码管的驱动。

通过扫描驱动的方式,可以轮流控制每个数码管的选通,从而实现多位数码管的显示。

2. 段选驱动:对于每个数码管的每个段(例如A、B、C、D、E、F、G等),能够通过相应控制信号的输入,实现对特定段的亮灭控制。

这样可以根据需要显示不同的数字、字母或符号。

3. 亮度调节:可以通过外部控制信号,调节数码管的亮度。

通常使用PWM(脉冲宽度调制)技术来实现亮度的调节。

4. 时钟控制:数码管的刷新速度需要一个时钟信号来驱动,4位数码管驱动芯片可以内部产生相应的时钟信号,也可以通过外部输入时钟信号来控制。

5. 输入控制:芯片通常提供多个输入引脚,用以接收外部控制信号,实现对数码管的控制和显示。

6. 常用功能和显示模式支持:该芯片通常支持常用的显示模式,例如静态显示模式、动态扫描显示模式、按键扫描模式等,以满足不同场景下的需求。

7. 多数字管级联:该芯片通常支持多位数码管的级联。

通过级联,可以按照需要来扩展显示位数,并通过芯片的控制实现对多位数码管的统一控制。

总之,4位数码管驱动芯片是一种专门用于控制和驱动4位数码管显示器的集成电路芯片。

它具备扫描驱动、段选驱动、亮度调节、时钟控制以及常用功能和显示模式支持等功能,可以满足各种场景下的数码管显示需求。

4位数码管循环

4位数码管循环

4位数码管循环4位数字管循环是一种电子显示器件,通常用于显示数字。

它由一系列的发光二极管(LED)组成,可以通过控制LED的亮灭来显示不同的数字。

每个数字由7个LED组成,分别代表该数字的不同部分,例如上、上左、上右、中、下左、下右和下。

通过控制每个LED是否亮灭,可以显示任意数字。

4位数字管循环具有很多应用,可以用于时钟、计时器、温度显示器、计数器等。

它非常常见,几乎可以在生活的各个领域见到它的身影。

接下来,我们将从原理、显示方式和应用三个方面详细介绍4位数字管循环。

首先,我们来了解一下4位数字管循环的原理。

它由一个计数器和一个编码器组成。

计数器用来递增数字,从0到9,然后循环到0。

编码器用来将计数器的输出转换为对应的LED亮灭状态,以显示相应的数字。

计数器和编码器之间通过电子部件连接,控制信号流动,从而实现数字的循环显示。

接下来,我们来了解一下4位数字管循环的显示方式。

在每一个时刻,4位数字管循环只显示一个数字。

显示的四位数字依次排列,从左到右。

通过计数器和编码器的控制,依次显示0、1、2、3……9,然后再循环回0。

这种循环显示的方式使得数字能够连续地在4位数字管上显示,给人一种流动的感觉。

最后,我们来了解一下4位数字管循环的应用。

它广泛应用于各种计时和计数设备中。

例如,我们可以将它用于显示时钟。

通过将4位数字管循环与时钟芯片连接,可以实现精准的时间显示。

此外,它还可以用于计时器,例如比赛计时器、烹饪计时器等。

通过控制4位数字管循环的显示,可以实现秒表功能。

另外,它还可以用于温度显示器,通过将4位数字管循环与温度传感器连接,可以实时显示当前温度。

这样,人们可以方便地了解当前环境的温度变化。

除了以上应用外,4位数字管循环还可以用于计数器。

例如,我们可以将它用于自动售货机中,通过计数器对销售商品的数量进行统计和显示。

此外,它还可以用于电子秤,通过显示当前物品的重量。

这样,人们可以方便地了解物品的重量信息。

51单片机(四位数码管的显示)程序

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***************************************/。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档