define SEG_Num6//数码管位数 define SEG_DataP1//数码管段驱动接口 define SEG_EnP3//数码管位驱动接口 define SEG_AllOff(SEG_En&=0xc0)//关闭所有数码管(位驱动)define DisTimeAt1msCount3//单'位'数码管显示时间
假设为共阴极数码管,驱动输入端接单片机P1口,共阴极接P2口的0.1.2.脚。我的程序如下,当前显示数字123 include
define smg P2 unsigned char tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};void main(){ smg=tab[0];} //程序就到这里 tab[]这个中括号里面的数字可以随意为0-9 数码管显示为对应的数字
/*声明七段LED数码管驱动信号数组(共阳)*/ char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4 0x92,0x83,0xf8,0x80,0x98}; //数字5-9 void delay(int); //声明延迟函数 //==主程序==
求单片机实验七段数码管显示实验程序
共阴极数码管表共阴极:位选为低电平(即0)选中数码管,各段选为高电平(即1接+5V时)选中各数码段。”,只需要将b、c段点亮即可,若是共阴极,片选是低电平选中,某一段输出高电平点亮,即显示码为00000110即0x06,
LED数码管的段码确定排列是:上段为a段,顺时针旋转依次为bcdef段,中间为g段、俗称七段数码管、右下角为小数点段、共计8段。
共阴数码管管码表(0-9):0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F。共阳数码管管码表(0-9):0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90。现在让我
确定数码管段码表方法如下:共阴:0、0x3f 1、 0x06 2、0x5b 3、0x4f 4、0x66 5、0x6d 6、0x7d 7、0x07 8、0x7f 9、0x6f A、0x77 B、0x7c C、0x39 D、0x5e E、0x79 F、0x71 无显示:0x00 只显示
如何确定数码管段码表
在共阴七段数码管中,各个数码管的阳极(即数码管的LED灯的正极)都是独立的,而七段数码管的阴极(即数码管的LED灯的负极)是共用的。因此,当数码管需要显示某个数字时,需要先将该数字的代码输出到相应的七段数码管的
共阴数码管,顾名思义,所有的阴极是连接在一起的。当对应的段被接通时,该段将会亮起。因此,每个数字或字符的编码将决定哪些段被接通,从而显示出相应的形状。例如,数字“0”的编码是0x3F,这意味着在这个编码下,对应
为公共端。共阴极:共阴极LED显示器的发光二极管的所有阴极连接在一起,为公共端。共阴极七段数码管显示数字9时对应的代码为(6fh)计算机通信的工作方式有(单工)(半双工)(全双工)。10101100B=(ACH)。在共阴七段
共阴极数码管编码表:0:ABCDEF1:BC2:ABGED3:ABCDG4:FGBC5:AFGCD6:FGCDE7:ABC8:ABCDEFG9:ABCDFG关于共阴极数码管,还可以拓展到其它方面,比如共阴极数码管的工作原理、其在工程应用中的使用场景以及相关技术参数
DB 66H,6DH,7DH,07H;4-7 DB 7FH,6FH,77H,7CH;8-B DB 39H,5EH,79H,71H;C-F 编码规则:a-dp分别对应0-7,小数点dp默认是低电平。
1、TAB:DB3FH,06H,5BH,4FH;0-3DB66H,6DH,7DH,07H;4-7DB7FH,6FH,77H,7CH;8-BDB39H,5EH,79H,71H;C-F编码规则:a-dp分别对应0-7,小数点dp默认是低电平。2、比如0是要让a,b,c,d,
| 数字/字母 | 二进制代码 | 七段显示 | | --- | --- | --- | | 0 | 0000 | ABCDEF | | 1 | 0001 | BC | | 2 | 0010 | ABDEG | | 3 | 0011 | ABCDG | | 4 | 0100 | BCDFG | | 5
写出共阴极七段数码显示管的0~9,A~F对应的译码
共阴极字段码:LED显示0~9某个字符时,则要求在a~dp送固定的字段码,如要使LED显示“0”,则要求a、b、c、d、f各引脚为高电平,g和dp为低电平,字段码为“3fh”。dpgfedcba001111113fh共阴极字符0~9七段码如下:
这种确定方法是根据数码管某段位亮或者不亮确定的。七段数码管段码是根据数码管某段位亮或者不亮,确定其对应数据为1或者为0(共阴极接法),将对应七段码的对应的七个数据算出,即为对应段码(习惯转化为十六进制)。七
数码管每一段相当于二极管,连接PLC输出点,要显示数字几,就将对应段点亮,几输入端有就输入。plc七段数码管显示梯形图是由人为规定的,都是这个规定。然后就好弄了,如果想显示零这个数那么就点亮A,B,C,D,E,F这几个
2、CD4511和CD4518配合而成一位计数显示电路,要多位计数,只需将计数器级联,每级输出接一只CD4511和LED数码管就可以了。所谓共阴LED数码管是指7段LED的阴极是连在一起的,在应用中应接地。3、计算器工作原理:计算器里
共阴七段数码管0~9代码怎么设置的,设置原理是什么
好像是BCD码!先上数码管的引脚图 首先,数码管的原理是,给数码管的某段加一个合适的电压,该段就会发亮。七段式数码管有七段加一点(DP),这种数码管有两种,一种是共阳极,这种接低电平时亮,另一种就是共阴极,就是楼主用的这种,通高电平亮。 数码管左边的引脚从上至下依次是接a,b,c,d,e,f,g,dp。要让数码管显示数字,就是需要指定部分亮,比如0,就是需要a,b,c,d,e,f这六段亮,也就是P0.0~P0.5为1,即P0=00111111=0x3f,而现在shuma[0]=0xc0是用来点亮0的,这两个是取反的关系,即~0xc0=0x3f,你当然可以直接设置shuma[0]=0x3f,就不需要取反了。至于为何要这样做呢,统计不亮的段比较方便,毕竟不亮的少嘛,也许只是习惯问题。
每一节可亮的为一个灯,它们的按一定顺序连接,然后让一些组合的灯点亮就得到一定的数字和字母,它们的顺序为:DP-->G-->F-->...-->A,要它亮则该段为0或1(看你是共阳还是共阴),把它们拼接起来转换成16进制就是它的编码了, 比如只显示一个点就只让DP等于1其余为0,则其编码为:0x80(共阴) 示图为共阴接法的示例 不知道你是不是想问这个,你说的也不是很具体,语文差了,我表示理解不能啊
相当于做个延时,当count的28-25位变化时才改变给数码管的段码,其实数码管显示是一个时间段只有一个数码管点亮,其他都灭,但因为人眼的视觉延时,数码管循环点亮速度快,好像数码管同时都亮了,如果要改变不同时间数码管的显示就得延时一定时间再改,要不太快了看不清啦
我给你一个数码管代码,自己修改: /******************************************************************************* * 标题: 伟纳电子ME300B单片机开发系统演示程序 - LED数码管显示1-8 * * 文件: wl004.C * * 日期: 2004-1-5 * * 版本: 1.0 * * 作者: 伟纳电子 - Freeman * * 邮箱: freeman@willar.com * * 网站: http://www.willar.com * ******************************************************************************** * 描述: * * LED数码管显示演示程序 * * 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 * * * * * ******************************************************************************** * 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved * * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! * *******************************************************************************/ #include #include unsigned char data dis_digit; unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3 0x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, off unsigned char data dis_buf[8]; unsigned char data dis_index; void main() { P0 = 0xff; P2 = 0xff; TMOD = 0x01; TH0 = 0xFC; TL0 = 0x17; IE = 0x82; dis_buf[0] = dis_code[0x1]; dis_buf[1] = dis_code[0x2]; dis_buf[2] = dis_code[0x3]; dis_buf[3] = dis_code[0x4]; dis_buf[4] = dis_code[0x5]; dis_buf[5] = dis_code[0x6]; dis_buf[6] = dis_code[0x7]; dis_buf[7] = dis_code[0x8]; dis_digit = 0xfe; dis_index = 0; TR0 = 1; while(1); } void timer0() interrupt 1 // 定时器0中断服务程序, 用于数码管的动态扫描 // dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 // dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, // 选通P2.0口数码管 // dis_buf --- 显于缓冲区基地址 { TH0 = 0xFC; TL0 = 0x17; P2 = 0xff; // 先关闭所有数码管 P0 = dis_buf[dis_index]; // 显示代码传送到P0口 P2 = dis_digit; // dis_digit = _crol_(dis_digit,1); // 位选通值左移, 下次中断时选通下一位数码管 dis_index++; // dis_index &= 0x07; // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描 } ;******************************************************************************** ;* 标题: 伟纳电子ME300B单片机开发系统演示程序 - LED数码管显示1-8 * ;* 文件: wl004.asm * ;* 日期: 2004-1-5 * ;* 版本: 1.0 * ;* 作者: 伟纳电子 - Freeman * ;* 邮箱: freeman@willar.com * ;* 网站: http://www.willar.com * ;******************************************************************************** ;* 描述: * ;* LED数码管显示演示程序 * ;* 在8个LED数码管上依次显示1,2,3,4,5,6,7,8 * ;* * ;* * ;******************************************************************************** ;* 【版权】 Copyright(C)伟纳电子 www.willar.com All Rights Reserved * ;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! * ;******************************************************************************** CODE_SEG SEGMENT CODE DATA_SEG SEGMENT DATA RSEG DATA_SEG dis_digit: DS 1 dis_index: DS 1 dis_buf: DS 8 stack: DS 20 ;=========================================================== CSEG AT 00000H ; Reset向量 LJMP MAIN CSEG AT 0000BH ; 定时器0中断向量 LJMP TIMER0 ;=========================================================== RSEG CODE_SEG MAIN: MOV SP,#(stack-1) ; 初始化堆栈指针 MOV P0,#0FFH ; 初始化I/O口 MOV P2,#0FFH MOV TMOD,#01H ; 初始化timer0 MOV TH0,#0FCH MOV TL0,#017H MOV IE,#082H MOV DPTR, #DIS_CODE ; 设定显示初值 MOV A,#1 MOVC A,@A+DPTR MOV dis_buf,A MOV A,#2 MOVC A,@A+DPTR MOV dis_buf+01H,A MOV A,#3 MOVC A,@A+DPTR MOV dis_buf+02H,A MOV A,#4 MOVC A,@A+DPTR MOV dis_buf+03H,A MOV A,#5 MOVC A,@A+DPTR MOV dis_buf+04H,A MOV A,#6 MOVC A,@A+DPTR MOV dis_buf+05H,A MOV A,#7 MOVC A,@A+DPTR MOV dis_buf+06H,A MOV A,#8 MOVC A,@A+DPTR MOV dis_buf+07H,A MOV dis_digit,#0FEH ; 初始从第一个数码管开始扫描 MOV dis_index,A SETB TR0 ; 启动定时器0,开始动态扫描显示 MAIN_LP: ; 主程序循环,增加其它代码 SJMP MAIN_LP ; END OF main ;=========================================================== USING 0 TIMER0: ; 定时器0中断服程序, 用于数码管的动态扫描 ; DIS_INDEX --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 ; DIS_DIGIT --- 位选通值, 传送到P2口用于选通当前数码管的数值, 如等于0xfe时, ; 选通P2.0口数码管 ; DIS_BUF --- 显于缓冲区基地址 PUSH ACC PUSH PSW PUSH AR0 MOV TH0,#0FCH MOV TL0,#017H MOV P2,#0FFH ; 先关闭所有数码管 MOV A,#DIS_BUF ; 获得显示缓冲区基地址 ADD A,DIS_INDEX ; 获得偏移量 MOV R0,A ; R0 = 基地址 + 偏移量 MOV A,@R0 ; 获得显示代码 MOV P0,A ; 显示代码传送到P0口 MOV P2,DIS_DIGIT ; MOV A,DIS_DIGIT ; 位选通值左移, 下次中断时选通下一位数码管 RL A MOV DIS_DIGIT,A INC DIS_INDEX ; DIS_INDEX加1, 下次中断时显示下一位 ANL DIS_INDEX,#0x07 ; 当DIS_INDEX等于8(0000 1000)时, 清0 POP AR0 POP PSW POP ACC RETI ; END OF timer0 ;=========================================================== RSEG CODE_SEG DIS_CODE: DB 0C0H DB 0F9H DB 0A4H DB 0B0H DB 099H DB 092H DB 082H DB 0F8H DB 080H DB 090H DB 0FFH END
/***数显秒表,范围0~999999***/ /***源程序默认硬件环境:52单片机,12MHz晶振,6位共阳数码管,P1 口段选,P30~P35 高电平位选(NPN三极管驱动),P35为最高位数码管***/ #include"reg52.h" //包含52头文件 #define TRUE 1 //定义布尔量'1':真 #define FALSE 0 //定义布尔量'0':假 #define uchar unsigned char //定义 无符号字符型数据 简称 #define uint unsigned int //定义 无符号整型数据 简称 #define ulong unsigned long //定义 无符号长整型数据 简称 #define th0 0xfc #define tl0 0x18 //1ms at 12MHz(定时器工作模式1 状态) #define SEG_Num 6 //数码管位数 #define SEG_Data P1 //数码管段驱动接口 #define SEG_En P3 //数码管位驱动接口 #define SEG_AllOff (SEG_En&=0xc0) //关闭所有数码管(位驱动) #define DisTimeAt1msCount 3 //单'位'数码管显示时间,数码管刷新频率f=1/(N×t),其中 N为数码管位数, t为单'位'数码管显示时间 #define T1sAt1msCount 1000 //1秒 计数值(在定时器为1ms 情况下计数) #define TimesEnd 1000000 //显示内容范围 0~999999 uchar code SEG_B_List[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管代码表"0-9" ulong Sec; uchar bdata Flag=1; sbit DisplayFlag=Flag^0; //显示标志位 sbit TimesUpFlag=Flag^1; //时间更新标志位 void Timer0() interrupt 1 //定时器0中断函数 { static uchar t1ms; //定义静态变量 t1ms 定时计数寄存空间 static uint t1ms_sec; TL0=tl0; TH0=th0; //重赋 1ms 定时初值 t1ms=++t1ms%DisTimeAt1msCount; //先计数值加1,后对计数范围进行限制0~(DisTimeAt1msCount-1) if(!t1ms) DisplayFlag=TRUE; //若定时计数值归0,则表示计数值曾到达 单'位'显示时间(DisTimeAt1msCount),显示标志 置位 t1ms_sec=++t1ms_sec%T1sAt1msCount; //在 T1sAt1msCount(1000) 范围内加1 if(!t1ms_sec) TimesUpFlag=TRUE; //若 归0,则1s 时间到,时间更新标志位 置位 } void SystemInit() //系统初始化函数 { TMOD=0x01; //关闭定时器1,开启定时器0,且工作在模式1(16位定时器) TH0=th0; TL0=tl0; //装定时初值(1ms at 12MHz) TR0=1; //启动计时 ET0=1; //允许定时器0中断 EA=1; //开启系统中断功能 } float Pow_Self(float x,uint y)//自编简易 x 的 y 次方函数,y只能是 非负整数 { float sum; if(x==0 && y==0) return; //0 的 0 次方无意义 else if(x==0) sum=0; //可有可无,y!=0的情况已经包含x=0,不加不影响结果,但影响运算速度 else if(y==0) sum=1; //除上述情况外,任何数的 0 次方均为 1 else if(y==1) sum=x; //任何数的 1 次方 均为 本身 else if(y>1) sum=Pow_Self(x,--y)*x; //递归调用,降幂 return sum; //返回计算结果 } void TimesUpdata() //时间更新 函数 { if(TimesUpFlag) //若 时间更新标志 为真 { Sec=++Sec%TimesEnd; //Sec (秒)在 TimesEnd (0~999) 范围内加1 TimesUpFlag=FALSE; //清 时间更新标志位 } } void Display(ulong dis_num) //显示函数,显示内容为 无符号整型数据 dis_num { static uchar dis_loca; //定义静态变量 显示位置 if(DisplayFlag) //若显示标志位为真(单'位'显示时间结束),则执行以下任务 { DisplayFlag=FALSE; //清显示标志位 dis_loca=++dis_loca%SEG_Num; //先对 显示位置 加1,后对变量范围进行限制 0~(SEG_Num-1) SEG_AllOff; //关闭所有数码管显示(位驱动) SEG_Data=SEG_B_List[(dis_num/(ulong)(Pow_Self(10,dis_loca)))%10]; //将显示内容(dis_num) 本次需显示的位(dis_loca)上的数值转成代码,并送到数据端口 SEG_En|=1<<dis_loca; //开启本次需要显示的位驱动 } } void main() //主函数 { SystemInit(); //调用 系统初始化函数 while(1) //循环系统 { TimesUpdata(); //调用 时间更新函数 Display(Sec); //调用 显示函数 显示内容为 Sec } }