sweetyy、

导航

数码管动态显示

数码管动态显示

1、Keil程序

(1)共阳极数码管

#include <reg51.h>
#include <intrins.h>   //包含循环移位函数的头文件
#define uchar unsigned char
#define uint unsigned int 
//共阳极数码管段码表
	uchar code dis_code[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0xc0};
	//延时函数,控制每位显示时间
	void delay(uint t)
	{
		uchar i;
		while(t--)
			for(i=0;i<100;i++);   
			               //减小i和delay函数参数,利用人眼余辉,可使各端口数字看起来一起显示“稳定显示”
	}
		
		void main()
		{
		//j的初值为1000 0000
			uchar i,j=0x80;
			while(1)
			{
				for(i=0;i<8;i++)
				{
				//循环移位函数_crol_(j,1)将j循环左移1位
				//先把j左移一位,变为0000 0001,即对应P2.0端口
					j=_crol_(j,1);
					//P0口输出段码,即要显示的数字
					P0=dis_code[i];
					//P2口输出位控码,即哪一个端口来亮
					P2=j;
					delay(200);
				}
			}
		}

(2)共阴极数码管

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int 

	uchar code dis_code[]={0x06,0x5b,0x4f,0x66};  
	//共阴极段码,分别对应1,2,3,4,参考数码管外形及引脚图
	//dp,g,f,e   d,c,b,a
   //例0,0,0,0   0,1,1,0 代表1
	
	
    //延时函数
	void delay(uint t)
	{
		uchar i;
		while(t--)
			for(i=0;i<200;i++);
	}
		
		void main()
		{
			while(1)
			{	
            //i控制循环,j的初值为1000 0000,共阴极是高电平亮,所以对应P2,7端口
		   	   uchar i,j=0x80;
				for(i=0;i<4;i++)
				{   
				/*j与0000 1000相或,P2.3端口始终为1,因为开发板P2.3端口对于蜂鸣器,且低电平有效,所以不                   能让这一位为0,否则触发蜂鸣器,一直响*/
				    j=j|0x08;
				    //P2口输出段码,即决定哪一位亮
				    P2=j;
				    //P0口输出位控码,即决定显示什么数字
					P0=dis_code[i];		
					delay(200);
					/*所用开发板数码管只有四位,且是高四位,所以从P2.7端口循环右移
					  i循环四次,j从1000 0000
					            ->0100 0000
					            ->0010 0000
					            ->0001 0000,然后循环结束,j重新赋初值*/
    			    j=_cror_(j,1);					 
				}
			}
		}

附:外形及引脚图

2、Proteus电路图

3.仿真软件效果演示

4、开发板演示结果

posted on 2021-12-02 14:52  sweetyy、  阅读(74)  评论(0)    收藏  举报