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驱动四位数码管程序
#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驱动四位数码管

_____________________________________________________
电源端/地端电流 ±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位数码管的驱动办法
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个数码管的显示实验一、实验目的: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位数码管的共阳(或共阴)引脚连接到单片机的I/O口,连接数码管的段选引脚到单片机的另外4个I/O口。
同时,连接一个晶振和相关的电容电阻到单片机的时钟输入引脚和地。
设置引脚:在代码中定义每个数码管引脚对应的I/O口为输出模式,用于控制数码管的显示。
编写代码:使用单片机的定时器功能,通过编程计算出每个数码管显示的数字对应的段选编码,并在定时器中断服务程序中更新数码管的显示。
调试程序:将程序下载到单片机中,通过观察数码管的显示效果,调整程序中的参数或代码,以达到预期的显示效果。
需要注意的是,具体的实现方式可能因单片机的型号和数码管的类型而有所不同,需要根据实际情况进行相应的调整。
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键控制四个数码管显示的程序或思路

例如你刚上电单片机复位你的单片机先是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口输出高电平到反相器,然后再输出低电平到数码管的位选。这样数码管就亮着啦。(我举例的数码管是共阴极的)