?? main.c
字號:
//================================================================================================
//Project Name: SPMC75F2413A EVM V1.2 演示程序2-Led
//hardware: SPMC75F2413A EVM v1.2開發(fā)板
//Function Description:實現(xiàn)跑馬燈效果,左右循環(huán)移動
// 通過AD轉換實現(xiàn)閃爍頻率的控制
//Hardware Resources: IOD 0-8
//================================================================================================
//作者:陳元虎
//EMAIL:chenyuanhu2@163.com
//日期:2007年12月21日
//================================================================================================
//================================================================================================
//Note: 此程序做調試之用。
//================================================================================================
#include "Spmc75_regs.h"
//定義寄存器的頭文件
#include "unspmacro.h"
//定義中斷開關等的頭文件
//================================================================================================
//系統(tǒng)變量聲明(全局變量在此聲明)
//================================================================================================
unsigned int ADC_Buffer;//AD轉換中間值
//================================================================================================
//系統(tǒng)函數(shù)聲明
//================================================================================================
main(void)
{
unsigned int i = 0;
//凌陽的編譯系統(tǒng)和TC有點不相同的,你定義以個變量,不能在程序的中間定義。
//不知道為什么會有這樣的問題。
//提醒編程的時候注意。
System_Init();//系統(tǒng)初始化函數(shù)
for(;;)
{
ADC_Conversion();//AD轉換獲取延時值
P_IOD_Buffer->W = 0x0001;
while(i < 7)
{
LeftMobile(1);
Delay(ADC_Buffer);
i += 1;
}
while(i > 0)
{
//這個地方開始的是我寫的是大于等于0,出現(xiàn)了一個問題,0-1之后,i的值變成了65535,這樣的話
//就一直在下面的循環(huán)里面了。
//在編程的時候這個地方要注意。
RightMobile(1);
Delay(ADC_Buffer);
i -= 1;
}
}
}
//================================================================================================
//子函數(shù)
//================================================================================================
//================================================================================================
//Name: System_Init();
//================================================================================================
System_Init()
{
//初始化IOD口為輸出端口。
P_IOD_Attrib->W = 0x00ff;//同相
P_IOD_Dir->W = 0x00ff;//輸出
P_IOD_Buffer->W = 0x0000;
//初始化IOA
P_IOA_Dir->W &= 0xff00; //從IOA0開始AD轉換
P_IOA_Attrib->W |= 0x00ff;
P_IOA_Buffer->W |= 0x00ff;
ADC_Init();//AD轉換初始化
}
//================================================================================================
//Name:void ADC_Init()
//================================================================================================
void ADC_Init()
{
//AD轉換初始化,75的程序有很強的規(guī)律性,掌握了這些規(guī)律之后
//能很快速的變成。
P_ADC_Channel->W = 0x0001;
P_ADC_Setup->B.ADCCS = CB_ADC_ADCCS_Select;
P_ADC_Setup->B.ADCEN = CB_ADC_ADCEN;
P_ADC_Setup->B.ADCFS = CB_ADC_ADCFS_CPUCLKdiv64;
P_ADC_Ctrl->B.ADCCHS = CB_ADC_ADCCHS_Ch0;
P_ADC_Ctrl->B.ADCSTR = 1;
}
//================================================================================================
//Name:unsigned int ADC_Conversion()
//================================================================================================
unsigned int ADC_Conversion()
{
//AD轉換,資料上面說第一次AD轉換的結果不是很精確
//所以這邊可以適當?shù)淖鲆韵绿幚怼? //我這里沒有做處理。
P_ADC_Ctrl->B.ADCCHS = CB_ADC_ADCCHS_Ch0;
P_ADC_Ctrl->B.ADCSTR = 1;
while((P_ADC_Ctrl->W & 0x0080) == 0)
{
NOP();
}
ADC_Buffer = P_ADC_Data->W >> 6;
return (ADC_Buffer);
//還要記得AD轉換函數(shù)值是要返回的,要不然AD轉換的值你這么辦呢?
}
//================================================================================================
//Name:void Delay(unsigned int Time)
//================================================================================================
void Delay(unsigned int Time)
{
int i,j;
for(i = 0;i<= Time;i++)
{
for(j = 0;j<=0x120; j++)
{
}
}
}
//=================================================================================================
//Name:LeftMobile(bit)
//=================================================================================================
void LeftMobile(bit)
{
//bit表示每次移動的位數(shù)
if(bit >= 8)
P_IOD_Buffer->W = 0x00ff;
else P_IOD_Buffer->W = P_IOD_Buffer->W << bit;
}
//=================================================================================================
//Name:RightMobile(bit)
//=================================================================================================
void RightMobile(bit)
{
//bit表示每次移動的位數(shù)
if(bit >= 8)
P_IOD_Buffer->W = 0x00ff;
else P_IOD_Buffer->W = P_IOD_Buffer->W >> bit;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -