標(biāo)題:
pic12f675+74HC595驅(qū)動數(shù)碼管(求助)
[打印本頁]
作者:
huchunhb
時間:
2018-6-12 22:59
標(biāo)題:
pic12f675+74HC595驅(qū)動數(shù)碼管(求助)
pic12f675與pic12f629兩種不同型號的單片機共用一個說明書,675比629多了數(shù)模轉(zhuǎn)換,功能要多一些,本人想利用675的數(shù)模轉(zhuǎn)換來設(shè)計制作一個顯示電壓、電流、電量的多功能表,首先在利用74HC595來驅(qū)動數(shù)碼管這一關(guān)就無法通過,但相同的程序用pic12f629則能夠順利通過,本人認(rèn)為可能是對pic12f675的設(shè)置沒有對,特向高手們求助。以下是我編寫的程序:
#include<pic.h> //pic12f629通過,但pic12f765沒有任何反應(yīng)
__CONFIG(0x3F84);
//兩塊74HC595級聯(lián),前一塊驅(qū)動段,后一塊驅(qū)動位,驅(qū)動的是共陰四位數(shù)碼管
//本程序依次驅(qū)動八位數(shù)碼管,顯示01234567,12345678,23456789,……,89AbCdEF,.....
#define SH_CP GPIO0 // 74HC595時鐘輸入
#define DS GPIO1 // 74HC595數(shù)據(jù)端口
#define ST_CP GPIO4 // 74HC595數(shù)據(jù)鎖存
#define uchar unsigned char
#define uint unsigned int
void delay(uint);
void xians(uchar);
const uchar LED[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7d,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//段選
const uchar WEI[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //位選
main()
{
uint x,y,z,m;
OPTION=0b10000000; //禁止弱上拉
WPU= 0x00; //關(guān)閉弱上拉
TRISIO=0; //IO 口做輸出
CMCON=0x3f; // 設(shè)置全部為普通數(shù)字IO口 關(guān)閉所有比較器
GPIO=0x00; //端口0 輸出低電平
while(1)
{
for(x=0;x<17;x++)
{
for(z=0;z<500;z++)
{
for(y=0;y<8;y++)
{
xians(WEI[y]);
m=x+y;
if(m<16);
else m=m-16;
xians(LED[m]);
ST_CP=0;
asm("NOP");
asm("NOP");
ST_CP=1;
asm("NOP");
asm("NOP");
ST_CP=0;
}
}
delay(20);
}
}
}
void delay(uint x) //短暫延時程序
{
uint a,b;
for(a=x;a>0;a--)
for(b=100;b>0;b--);
}
void xians(uchar udata) //將數(shù)據(jù)寫入74HC164
{
uchar i;
for (i=0;i<8;i++)
{
if(udata&0x80)
{
DS=1;
SH_CP=0;
asm("NOP");
asm("NOP");
SH_CP=1;
udata = udata<<1;
}
else
{
DS=0;
SH_CP=0;
asm("NOP");
asm("NOP");
SH_CP=1;
udata = udata<<1;
}
}
}
作者:
huchunhb
時間:
2018-6-16 13:19
問題得到解決:在主程序main中設(shè)置
CMCON=0x07; // 關(guān)閉比較器,很重要,特別是低三位全部為1才能關(guān)閉比較器,使IO0和IO1為數(shù)字口。
ANSEL=0X0c;//將IO0(AN0)IO1(AN1)A兩個端口作為普通I/O口
也就是將兩個模數(shù)轉(zhuǎn)換復(fù)用端口中的模數(shù)功能關(guān)閉就OK了。
作者:
源木求魚
時間:
2018-6-16 15:57
同意
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1