|
|
在單片機開發(fā)過程中,單片機的引腳不足,我們首先想到的是需要更換單片機,譬如用51單片機的P3口驅(qū)動一位數(shù)碼管作靜態(tài)顯示,但缺少P35,其它完整的8位端口也沒有,這時候也并不是沒有辦法解決,我們可以用其它P口的某一位來替換。本文提供了一種解決這個問題的方法。 按照數(shù)碼管與單片機的接口,a~g、dp接單片機的P30~P37,字段碼還采用標準的字段碼,由于缺少P35,也就是缺少f段的數(shù)據(jù)碼,這時候可以用P17代替,觀察0~9的數(shù)字,發(fā)現(xiàn)數(shù)字1、2、3、7的f段不亮,因此在顯示這幾個數(shù)字時,P17輸出1(熄滅),而顯示其它數(shù)字時,P17輸出0(亮)。
- /* ch4-12.c - 七段數(shù)碼管驅(qū)動程序 *///==聲明區(qū)============================================#include<reg52.h> //包含單片機寄存器定義的頭文件
- #define SEG P3 //宏定義,用標識符SEG代替P0
- #define uint unsigned int //宏定義,用uint代替unsigned int#define uchar unsigned char //宏定義,uchar代替unsigned char
- //0~9的共陽數(shù)碼管段碼表code uchar TAB2[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};sbit PD5=P1^7;void delay(uint ms); // 聲明延遲函數(shù) //==主程序區(qū)========================================
- void main(void) //主程序開始 { uchar i; //聲明無符號整數(shù)變量i while(1) //無窮循環(huán),程序一直跑 for(i=0;i<10;i++) //顯示0-9,共10次 { SEG=TAB2[i]; //共陽數(shù)碼管顯示數(shù)字0~9 if((1 == i)||(2 == i)|| (3 == i)||(7 == i)) PD5 = 1; else PD5 =0; delay(500); //延遲500*1m=0.5秒 } //for循環(huán)結束 } //主程序結束
- //==子程序區(qū)==========================================/* 延遲函數(shù),延遲約x*1ms */void delay(uint x) //延遲函數(shù)開始 { uint i,j; //聲明無符號整數(shù)變量i,j for(i=0;i<x;i++) //計數(shù)x次,延遲x*1ms for(j=0;j<120;j++); //計數(shù)120次,延遲1ms } //延遲函數(shù)結束
復制代碼
可見即使沒有完整的8位端口也可以驅(qū)動數(shù)碼管作靜態(tài)顯示,硬件有不足可以用軟件來彌補。如果想顯示其他字符,也可以作類似的改動。
|
評分
-
查看全部評分
|