基于51单片机利用八个数码管花样显示如下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于51单片机利用八个数码管花样显示如下相关的知识,希望对你有一定的参考价值。

xxx11xxx→xx2222xx→x333333x→44444444→x555555x→xx6666xx→x777777x→88888888每个状态各一秒,显示反复循环,其中x表示对应的数码管熄灭
是共阳极的数码管 就是利用595芯片输入的 采用C语言

其实很简单,你把1--8对应的共阴极或共阳极的编码寻在一个数组里(C语言)或者表里(汇编语言查表法),在P0口和P2口接上8个7段数码管,P2口做位选,P0口做段选,每次从表中查询你要显示的数据的编码写到P0口,再把你要在哪一个数码管上显示写到P2口(比如位选为低电平有效,向P2口写入0xFE就能显示在P2.0对应的数码管上)。有不懂得可以QQ我。 参考技术A 进来无聊又帮你看了下没用595 就是P2接的位选 P0接的段选已经测试达到了你的要求你可以自己试下
#include <reg51.h>

void delay(unsigned int i); //函数声名

//此表为 LED 的字模, 共阴数码管 0-9 -
unsigned char code Disp_Tab[] = 0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; //段码控制

//此表为8个数码管位选控制, 共阴数码管 1-8个 -
unsigned char code dispbit[8]=0xe7,0xc3,0x81,0x00,0x81,0xc3,0x81,0x00; //位选控制 查表的方法控制

main()


while(1)

unsigned int i;
for(i=0;i<8;i++)

P0=Disp_Tab[i];
P2=dispbit[i];
delay(65500);





void delay(unsigned int i)

char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);

PS:要是想精确定时一秒就用个定时器 这个我就不帮你写了很简单
参考技术B 动态显示...

利用单片机的数码管模拟时钟的显示时间


#include <reg52.h>

#define SEGPORT P0
sbit seg_select = P2^1;        
sbit bit_select = P2^0;          

unsigned char duanma[10] = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;               
unsigned char weima[8] = 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; 
unsigned char TempData[8];

unsigned char shi = 20, fen = 54, miao = 55;

void display()

	  static unsigned char i = 0;
	  SEGPORT = 0x0;
	  seg_select = 1;
	  seg_select = 0;
	  
	  SEGPORT = 0xff;
	  bit_select = 1;
	  bit_select = 0;
	
	  SEGPORT = TempData[i];
	  seg_select = 1;
	  seg_select = 0;
	  
	  SEGPORT = weima[i];
	  bit_select = 1;
	  bit_select = 0;
	  
		i++;
	
	  if(8 == i)
		
				i = 0;
      


void time0_init(void)

	  EA = 1;                              //打开总中断
	  TMOD |= 0x01;                        //设置定时器工作方式
	  TH0 = (65536 - 20000) / 256;
	  TL0 = (65536 - 20000) % 256;        //设置定时器初值
	  ET0 = 1;                           //打开定时器中断
	  TR0 = 1;



void timer0_isr() interrupt 1

	  static unsigned char i = 0;
          TH0 = (65536 - 20000) / 256;
	  TL0 = (65536 - 20000) % 256;    //设置定时器初值,
	  i++;	
	  
		if(50 == i)	
		
				i = 0;
				miao++;
				if(60 == miao)
				
			 
						miao = 0;
						fen++;
				  
						if(60 == fen)
						
								fen = 0;
								shi++;
						  
								if(24 == shi)
								
										shi = 0;
							  
								
						
					
		
		
		TempData[0] = duanma[shi / 10];
		TempData[1] = duanma[shi % 10];
		TempData[2] = 0x40;
		TempData[3] = duanma[fen / 10];
		TempData[4] = duanma[fen % 10];
		TempData[5] = 0x40;
		TempData[6] = duanma[miao / 10];
		TempData[7] = duanma[miao % 10];


void time1_init(void)

          EA = 1;
	  TMOD |= 0x10;
	  TH1 = (65536 - 20000) / 256;
	  TL1 = (65536 - 20000) % 256;
	  ET1 = 1;
	  TR1 = 1;
		
	 


void time1_isr() interrupt 3

          TH1 = (65536 - 1000) / 256;
	  TL1 = (65536 - 1000) % 256;     
	  display();
		
               

void main()

	 time0_init();
	 time1_init();
	 while(1)
	 
   
         
						   



以上是关于基于51单片机利用八个数码管花样显示如下的主要内容,如果未能解决你的问题,请参考以下文章

让51单片机八段数码管亮起来(静态显示和动态显示共阴极和共阳极位码和段码)

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。

80c51单片机驱动LED显示。。。急急急

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。

跪求基于MCS-51单片机的旅馆房价电子报价系统设计——软件部分 的文献综述,毕业论文

基于51单片机动态数码管显示protues仿真设计(源码+仿真)