?? mc145170.c
字號:
/**************************************
MC145170D的驅(qū)動程序
*************************************/
#include <regx52.h>
#include <intrins.h>
#include<absacc.h>
//#include "lcd1602.H"
/**************************************
MC145170D控制引腳宏定義
*************************************/
sbit CLK = P0^0; /*MC145170時鐘*/
sbit DIN = P0^2; /*MC145170輸入*/
sbit _ENB = P0^1 ;/*MC145170片選*/
//sbit _ENB = P1^1 ;
#define Uchar unsigned char
#define Uint unsigned int
#define Ulong unsigned long
Uint Frequence=5500;
#define BaseFre 400
#define uint unsigned int
#define uchar unsigned char
uchar code DisplayBuffer[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00,0x40,0xFF}; //顯示0到9和不顯示和顯示“-”負(fù)號,和顯示亂碼
uchar data c[8]={0,10,10,10,10,10,10,10}; //初始值為10是為了讓數(shù)碼管不顯示任何數(shù)字;c[5],c[4],c[3],c[2],c[1]分別顯示的萬位,千位,百位,十位,個位
void Delay400Ms(void)
{
Uchar i = 5;
Uint j;
while(i--)
{
j=7269;
while(j--);
};
}
// 短延時
void Delay5Ms(void)
{
Uint i = 552;
while(i--);
}
void delay_1ms() //延時?匯編是1ms
{ int q;
for(q=300;q>0;q--);
}
/**************************************
名稱:delay vf
功能:延時模塊
輸入?yún)?shù):n要延時的周期數(shù)
輸出參數(shù):無
*************************************/
/*void delay(uint n)
{
uchar i;
i=n;
while(i--);
}*/
/**************************************
名稱:write_MC145170D
功能:MC145170D驅(qū)動模塊
輸出參數(shù):CLK_mode所用時鐘數(shù),value為向Register所送數(shù)據(jù)值
說明:mode=C表示要向C Register送數(shù)據(jù),CLK=8;
mode=N表示要向N Register送數(shù)據(jù),CLK=16;
mode=R1或R2表示要向R Register送數(shù)據(jù),CLK=15或24;
C Register每位定義說明
C7 C7=HIGH時,PDout輸出正脈沖,PDout=PHR;C7=LOW時,PDout輸出負(fù)脈沖,PDout=PHV;PHR,PHV的輸出選擇,
C7=HIGH時PDout=PHR-PHV,C7=LOW時PDout=PHV-PHR;
C6 鑒相器輸出選擇 C6=HIGH時,從PDout輸出,否則從PHR,PHV輸出。
C5 =1時 鎖定輸出端 LD 有效
C4 C3 C2 REFout Frequency
0 0 0 dc (Static Low)
0 0 1 OSCin
0 1 0 OSCin /2
0 1 1 OSCin /4
1 0 0 OSCin /8 (POR Default)
1 0 1 OSCin /16
1 1 0 OSCin /8
1 1 1 OSCin /16
C1=1時 FVE啟動頻率輸出
C0=1時 fRE啟動頻率輸出
N Register取值范圍40 to 65535
R Register取值范圍5 to 32767
*************************************/
void writec(unsigned char d)
{
uchar i;
_ENB=1;
_nop_();
_ENB=0;//開始下降沿
_nop_();
for(i=0;i<8;i++)
{ CLK=0;
d=d<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
_ENB=1;
}
void write_R15(Uint r15)
{
uchar i,dh,dl;
dh=r15/256;
dl=r15%256;
dh=dh<<1;
_ENB=1;
_nop_();
_ENB=0;//開始下降沿
_nop_();
for(i=0;i<7;i++)
{ CLK=0;
dh=dh<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
for(i=0;i<8;i++)
{ CLK=0;
dl=dl<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
_ENB=1;
}
void write_N(Uint n)
{
uchar i,dh,dl;
dh=n/256;
dl=n%256;
_ENB=1;
_nop_();
_ENB=0;//開始下降沿
_nop_();
for(i=0;i<8;i++)
{ CLK=0;
dh=dh<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
for(i=0;i<8;i++)
{ CLK=0;
dl=dl<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
_ENB=1;
}
void write_R24(Uint r24)
{
uchar i,dh,dl;
dh=r24/256;
dl=r24%256;
_ENB=1;
_ENB=0;//開始下降沿
for(i=0;i<8;i++)
{ CLK=0;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
for(i=0;i<8;i++)
{ CLK=0;
dh=dh<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
for(i=0;i<8;i++)
{ CLK=0;
dl=dl<<1;
DIN=CY;//將數(shù)據(jù)放好等待讀入
_nop_();
CLK=1;//將數(shù)據(jù)讀入
_nop_();
}
_ENB=1;
}
/**************************************
名稱:mc145170復(fù)位函數(shù)
功能:主函數(shù)
輸入?yún)?shù):無
輸出參數(shù):無
*************************************/
void mc145170reset()
{
unsigned char i;
//4個以上脈沖
ENB=1;
for(i=0;i<10;i++)
{ CLK=0;
_nop_();
DIN=0;
_nop_();
CLK=1;
_nop_();
}
//
ENB=0;
for(i=0;i<8;i++)
{
CLK=0;
_nop_();
if(i==4)
DIN=1;
else
DIN=0;
CLK=1;
_nop_();
}
ENB=1;
}
/**************************************
名稱:changefrequence
功能:改變頻率的任務(wù)函數(shù)
輸入?yún)?shù):無
輸出參數(shù):無
*************************************/
/*void changefrequence(void)
{
switch(Menu1)
{ case 1: mc145170reset();
Delay5Ms();
writec(0x6f);
Delay5Ms();
write_R24(BaseFre);
Delay5Ms();
write_N(Frequence);
ePutUint(15,1,Frequence);
Delay5Ms();
Menu1=2;
break;
case 2://輸入的按鍵對應(yīng)的數(shù)碼從顯示屏右端移入
switch(MyKey)
{case 0:break;
case 1:
Frequence=Frequence+1;//遞增
write_N(Frequence);
ePutUint(15,1,Frequence);
MyKey=0;
break;
case 2:
Frequence=Frequence-5;//遞減
write_N(Frequence);
ePutUint(15,1,Frequence);
MyKey = 0;//清按鍵緩沖區(qū),表示按鍵值已經(jīng)取走
break;
case 3:
MyKey = 0;//清按鍵緩沖區(qū),表示按鍵值已經(jīng)取走
Menu1=1;
break;
}
break;
}
} */
Set_all_Mc145170()
{
mc145170reset();
Delay5Ms();
writec(0x6f);
Delay5Ms();
write_R24(BaseFre);
Delay5Ms();
write_N(Frequence);
Delay5Ms();
}
//////////////////////////////////////////數(shù)字各位分離程序/////////////////////////////
void MakeDate(int show_answer)
{ char i;
for(i=0;i<7;i++)
{c[i] = show_answer%10;
show_answer = show_answer/10;
}
if(c[6]==0)
{c[6]=10;
if(c[5]==0)
{c[5]=10;
if(c[4]==0)
{c[4]=10;
if(c[3]==0)
{c[3]=10;
if(c[2]==0)
{c[2]=10;
if(c[1]==0)
{c[1]=10;}
}
}
}
}
}
}
display_fre() //顯示頻率
{
char j = 0;
MakeDate(Frequence) ; //分離數(shù)字
for(j=0;j<8;j++)
{
XBYTE[0x8100]=~(0x80>>j); //選擇數(shù)碼管顯示位數(shù)
XBYTE[0x8200]=DisplayBuffer[c[j]]; //顯示數(shù)字
delay_1ms();
}
}
keybord()
{
XBYTE[0x8200] = 0;
if(P1_0 == 0)
{
Delay5Ms();
Delay5Ms();
Delay5Ms();
Delay5Ms();
Frequence = Frequence + 50;
write_N(Frequence);
}
else if(P1_1 == 0)
{
Delay5Ms();
Delay5Ms();
Delay5Ms();
Delay5Ms();
Frequence = Frequence - 50;
write_N(Frequence);
}
}
/**************************************
名稱:main
功能:主函數(shù)
輸入?yún)?shù):無
輸出參數(shù):無
*************************************/
main()
{
//EA = 0;
Set_all_Mc145170(); //一個函數(shù)把mc145170所有寄存器設(shè)置好
while(1)
{
display_fre();
keybord() ;
}
}
/*05級單片機(jī)板程序
main()
{
EA = 0;
Set_all_Mc145170(); //一個函數(shù)把mc145170所有寄存器設(shè)置好
while(1)
{
P3_7 = 1;
if(P3_2 == 0)
{
P3_7 = 0;
Delay400Ms() ;
Delay400Ms() ;
Frequence = Frequence + 100;
}
if(P3_3 == 0)
{
P3_7 = 0;
Delay400Ms() ;
Delay400Ms() ;
Frequence = Frequence - 100;
}
if(P3_4 == 0)
{
P3_7 = 0;
Delay400Ms() ;
mc145170reset();
Delay5Ms();
writec(0x6f);
Delay5Ms();
write_R24(BaseFre);
Delay5Ms();
write_N(Frequence);
// ePutUint(15,1,Frequence);
Delay5Ms();
}
}
} */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -