本帖最后由 aqa 于 2019-8-21 18:40 編輯
新入職了一家公司,負(fù)責(zé)消費(fèi)電子,,接觸到了應(yīng)廣單片機(jī),,現(xiàn)在談?wù)剳?yīng)廣單片機(jī)相關(guān)的問題,后續(xù)還會(huì)更新,,本人也只是初學(xué)者,,發(fā)現(xiàn)網(wǎng)上應(yīng)廣單片機(jī)相關(guān)的資料太少了,一是把自己所知道的發(fā)出來,,幫助像我這樣的初學(xué)者,,方便學(xué)習(xí),二是記錄自己的學(xué)習(xí)歷程,。
先從一些基礎(chǔ)的開始吧,,有關(guān)于IDE的使用我就不多敘述了,資料連接里面有一個(gè)文件介紹了怎么使用,,需要的也可以下載,,目前我所使用的的僅限于應(yīng)廣的單核單片機(jī),所以這邊的都是單核的相關(guān)資料,,應(yīng)該單片機(jī)的開發(fā)語言是MINI-C語言,,屬于匯編和標(biāo)準(zhǔn)C的合體吧,,哈哈哈,具體了解可以去網(wǎng)上查相關(guān)資料,,資料鏈接里面也有一個(gè)開發(fā)語言的介紹,,下面是一個(gè)簡(jiǎn)單的例程,驅(qū)動(dòng)車載MP3數(shù)碼管,,展示部分程序,,需要的可以點(diǎn)擊鏈接下載
/****************************************************************
函數(shù)名稱:void Set_User_T16(void)
函數(shù)功能:定時(shí)器計(jì)數(shù)定時(shí)256us
函數(shù)參數(shù):無
函數(shù)返回值:無
函數(shù)說明:
****************************************************************/
#define USER_TIMER_CONFIG() $ T16M IHRC, /4, BIT10
#define ENABLE_TIMER() SET1 INTEN.2 //$ INTEN T16 //開定時(shí)器中斷
#define DISENABLE_TIMER() SET0 INTEN.2 //關(guān)定時(shí)器中斷
#define INIT_TIMER_VALUE(n) STT16 n//裝載定時(shí)器計(jì)數(shù)值
#define CONST_TIMER_VALUE 0
#define EA_INT() ENGINT//開總中斷
#define DIS_INT() DISGINT//關(guān)總中斷
/**************************************************************/
void Set_User_T16(void)/*定時(shí)256us進(jìn)一次中斷 2^10/(16/) = 256us*/
{
//SET0 T16flag;//reset the flag
USER_TIMER_CONFIG();
T16val = CONST_TIMER_VALUE;//256us
INIT_TIMER_VALUE(T16val);
INTRQ = 0;//清除INTRQ
EA_INT();
ENABLE_TIMER();
}
/************************************************
中斷服務(wù)函數(shù)
************************************************/
void Interrupt (void)
{
pushaf;
if (Intrq.T16)/*256us進(jìn)入一次中斷*/
{ // T16 Trig
// User can add code
Intrq.T16 = 0;
T16val = CONST_TIMER_VALUE;
INIT_TIMER_VALUE(T16val);
LED_Scan1();
//LED_scan2();
}
popaf;
}
復(fù)制代碼 我目前用的是PMS132B芯片驅(qū)動(dòng)的,上面是一個(gè)16位計(jì)數(shù)器寫的計(jì)數(shù)中斷程序,,計(jì)數(shù)256us進(jìn)入一次中斷/****************************************************************
函數(shù)名稱:void LED_Scan(void)
函數(shù)功能:掃描函數(shù),,掃描要顯示13:14,其他圖標(biāo)都亮
函數(shù)參數(shù):無
函數(shù)返回值:無
函數(shù)說明:沒有用到的引腳設(shè)置為高阻態(tài)
if語句里面注釋的pbc位所有LED數(shù)碼管全亮
****************************************************************/
void LED_Scan1(void)
{
static u8 cnt = 0;
SetPortIn();//設(shè)置高阻態(tài),,關(guān)閉上拉
//SetPortOut();
$ pbdier = 0;
switch (cnt)//輪詢一個(gè)引腳為高電平
{
case 0:
pbc.0 = 1;//設(shè)置pb0輸出
pb.0 = 1;//輸出高電平
break;
case 1:
pbc.1 = 1;
pb.1 = 1;
break;
case 2:
pbc.2 = 1;
pb.2 = 1;
break;
case 3:
pbc.3 = 1;
pb.3 = 1;
break;
case 4:
pbc.4 = 1;
pb.4 = 1;
break;
case 5:
pbc.5 = 1;
pb.5 = 1;
break;
case 6:
pbc.6 = 1;
pb.6 = 1;
break;
default:
break;
}
//將發(fā)生變化的引腳所對(duì)應(yīng)要顯示的內(nèi)容更改
if (PIN1)
{
//pbc = 0x3f;
pbc = 0x35;//配置輸出引腳 0:輸入 1:輸出
pb = 0X01;//
}
if (PIN2)
{
//pbc = 0x3f;
pbc = 0x2e;
pb = 0x02;
}
if (PIN3)
{
//pbc = 0x7f;
pbc = 0x7c;
pb = 0x04;
}
if (PIN4)
{
//pbc = 0x3f;
pbc = 0x1b;
pb = 0x08;
}
if (PIN5)
{
//pbc = 0x7f;
pbc = 0x72;
pb = 0x10;
}
if (PIN6)
{
//pbc = 0x7f;
pbc = 0x72;
pb = 0x20;
}
if (PIN7)
{
//pbc = 0x64;
pbc = 0x44;
pb = 0x40;
}
cnt++;
if(cnt >= 7)
{
cnt = 0;
}
//cnt = (cnt >= 8)?0:cnt+1;
}
復(fù)制代碼 上面這個(gè)是LED數(shù)碼管動(dòng)態(tài)掃描程序,,與一般的數(shù)碼管有所區(qū)別,一般數(shù)碼管有共陰和共陽之分,,這個(gè)沒有,,動(dòng)態(tài)掃描的原理這里不細(xì)說了,不清楚的去網(wǎng)上查找,,這個(gè)相當(dāng)于是7個(gè)引腳驅(qū)動(dòng)五位七段數(shù)碼管,,相關(guān)引腳定義見下圖
數(shù)碼管引腳定義圖
數(shù)碼管實(shí)物圖 引腳定義圖是用萬用表測(cè)出來的,測(cè)量方法有很多,,我用的這種方法而以,,陽極和陰極就代表該引腳接在萬用表的正極和負(fù)極,每一段LED組合在一起形成以以為數(shù)碼管,,上面有五位數(shù)碼(第五位是將SD,、||、USB,、 : 等一共七個(gè)圖標(biāo)組成了第五位數(shù)碼管),,舉個(gè)例子方便大家理解,假如現(xiàn)在要點(diǎn)亮第一位數(shù)碼管的第一段(也就是1A),,此時(shí)P1引腳輸入高電平,,P2引腳輸入低電平或者接地,1A就亮了,。
以上兩個(gè)圖片是動(dòng)態(tài)掃描程序掃描后所能顯示的兩種效果,圖一在掃描程序里為注釋的部分
所用仿真開發(fā)板型號(hào)
|