|
在单片机开发过程中,单片机的引脚不足,我们首先想到的是需要更换单片机,譬如用51单片机的P3口驱动一位数码管作静态显示,但缺少P35,其它完整的8位端口也没有,这时候也并不是没有办法解决,我们可以用其它P口的某一位来替换。本文提供了一种解决这个问题的方法。 按照数码管与单片机的接口,a~g、dp接单片机的P30~P37,字段码还采用标准的字段码,由于缺少P35,也就是缺少f段的数据码,这时候可以用P17代替,观察0~9的数字,发现数字1、2、3、7的f段不亮,因此在显示这几个数字时,P17输出1(熄灭),而显示其它数字时,P17输出0(亮)。
- /* ch4-12.c - 七段数码管驱动程序 *///==声明区============================================#include<reg52.h> //包含单片机寄存器定义的头文件
- #define SEG P3 //宏定义,用标识符SEG代替P0
- #define uint unsigned int //宏定义,用uint代替unsigned int#define uchar unsigned char //宏定义,uchar代替unsigned char
- //0~9的共阳数码管段码表code uchar TAB2[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};sbit PD5=P1^7;void delay(uint ms); // 声明延迟函数 //==主程序区========================================
- void main(void) //主程序开始 { uchar i; //声明无符号整数变量i while(1) //无穷循环,程序一直跑 for(i=0;i<10;i++) //显示0-9,共10次 { SEG=TAB2[i]; //共阳数码管显示数字0~9 if((1 == i)||(2 == i)|| (3 == i)||(7 == i)) PD5 = 1; else PD5 =0; delay(500); //延迟500*1m=0.5秒 } //for循环结束 } //主程序结束
- //==子程序区==========================================/* 延迟函数,延迟约x*1ms */void delay(uint x) //延迟函数开始 { uint i,j; //声明无符号整数变量i,j for(i=0;i<x;i++) //计数x次,延迟x*1ms for(j=0;j<120;j++); //计数120次,延迟1ms } //延迟函数结束
复制代码
可见即使没有完整的8位端口也可以驱动数码管作静态显示,硬件有不足可以用软件来弥补。如果想显示其他字符,也可以作类似的改动。
|
评分
-
查看全部评分
|