数码管 通用驱动显示 LCD可借鉴此方法

/*一般来说,如果连接数码管的引脚是按顺序来驱动,那么,对于程序员来说,是减少一些工作。而对于不规则(当然按顺序的连接电路也可以用)的连接方式,本人总结一个比价快速的方法,如果电路连接正常,不用借助图纸和万用表即可快速写好程序。
第一步:取段显示对应的值,0~F;共阴极和共阳极都可以用,
   //取值时 SEG0对应P0.0,.....SEG7对应P0.7
const uint8 TabNum[17]={ //ABCDEFG
	
		0X3F,0X06,0x5b,0X4f,0X66,0X6d,//0-5
		0X7d,0X07,0X7f,0X6f,0X77, //6-A
		0X7c,0X39,0X5e,0X79,0X71,// B C D E F};
第二步:
确认是共阳极还是共阴极:1:使其中的任意COM1=1,任意SEG=0,如果点亮数码管,这是共阳极,不亮则为共阴极
第三步:
我们以共阳极为例

1:先宏定义,以便操作:
#define		SETB0		(unsigned char)0X01	
#define		SETB1 		(unsigned char)0X02	
#define		SETB2		(unsigned char)0X04	
#define		SETB3		(unsigned char)0X08	
#define		SETB4		(unsigned char)0X10	
#define		SETB5		(unsigned char)0X20	
#define		SETB6		(unsigned char)0X40	
#define		SETB7		(unsigned char)0X80	
//2:COM1=1//使其中一个数码管点亮
//3://先熄灭所有段
//SEG在 PC PG上
// PG_OUT=0XFF;
//PC_OUT=0XFF;
//4:			
// PC_OUT&=~SETB0;//从SET0循环到SET7
//PG_OUT&=~SETB0;//从SET0循环到SET7
//一直循环执行,直到找到对应所有的引脚
//比如当执行PC_OUT&=~SETB4; 点亮了G段,则说明PC的PC4脚连接到SEGG段
//5:
//至此,我们就可以组合来写整个程序了;
//以下是我个人项目的操作取值表
			//		点亮SEG         执行指令
			//SETB3     A			PC_OUT&=~SETB3;
			//SETB0 	B			PG_OUT&=~SETB0;
	    	//SETB7     C			PC_OUT&=~SETB7;
		    //SETB5     D			PC_OUT&=~SETB5;
			//SETB6     E			PC_OUT&=~SETB6
		    //SETB4     G	        PC_OUT&=~SETB4;
		    //SETB2 	F			PC_OUT&=~SETB2;
://6整个函数为:*/
/*
输入第一数码管显示数据:SHIWEI
输入第一数码管显示数据:GEWEI
*/
		PC_OUT&=~SETB1;//共阳极,熄灭第一个数码管,COM1脚连接在PC1上
		PG_OUT&=~SETB1;//共阳极,熄灭第二个数码管,COM2脚连接在PG1上
		/*
		PC_OUT |=SETB1;//共阳极,熄灭第一个数码管,COM1脚连接在PC1上
		PG_OUT|=SETB1;//共阳极,熄灭第二个数码管,COM2脚连接在PG1上
		*/
		sx_com ++;
		if(sx_com<=1) //显示第一位
		{												
			temp_zj=TabNum[SHIWEI];
			PG_OUT|=SETB1;//共阳极,
		//	PG_OUT&=~SETB1;//共阴极,
		}
		Else  if(sx_com>=2)//显示第二位
		{			
			sx_com=0;			
			temp_zj=TabNum[GEWEI];
			PC_OUT|=SETB1;//共阳极
			//	PC_OUT&=~SETB1;//共阴极,
		}	
		
			if(temp_zj&SETB0)//取SEG A 
				PC_OUT&=~SETB3;//共阴极则PC_OUT|=SETB3;//后面的类推
			else
		  		PC_OUT|=SETB3;	//共阴极则PC_OUT&=~SETB3;
			
			if(temp_zj&SETB1)//取SEG B 
				PG_OUT&=~SETB0;
			else
				PG_OUT|=SETB0;			

			if(temp_zj&SETB2)//取SEG C 
				 PC_OUT&=~SETB7;
			else
		  		 PC_OUT|=SETB7;
			
			if(temp_zj&SETB3)//取SEG D
				PC_OUT&=~SETB5;
			else
				PC_OUT|=SETB5;	

			if(temp_zj&SETB4)//取SEG E 
				PC_OUT&=~SETB6;		
			else		
	   			PC_OUT|=SETB6;	
			
			if(temp_zj&SETB5)//取SEG F 
				PC_OUT&=~SETB2;
			else
				PC_OUT|=SETB2;
			
			if(temp_zj&SETB6)//取SEG G 
				PC_OUT&=~SETB4;
			else
				PC_OUT|=SETB4;	
			


 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值