?? main.c
字號:
/****************************************************************************
* File: main.c
* 功能:向LCD輸出計數值
****************************************************************************/
#include "config.h"
#define rs (1<<8)
#define rw (1<<9)
#define en (1<<10)
#define busy (1<<7)
uint8 BCD[6]; //十位二進制的顯示碼分別是千百十個位的顯示
uint16 count=0;
/****************************************************************************
* File: enable_irq()
* 功能:中斷使能函數
****************************************************************************/
void delay(uint32 dly);
void timer0_init(void);
void __irq timerInt(void);
void int_init(void);
void ChkBusy(void);
void WrOp(uint8 dat);
void WrDat(uint8 dat);
void lcd_init(void);
void DisText(uint8 addr,uint8 *p);
void ShowInt(uint8 addr,uint16 num);
/****************************************************************************
* File: main()
* 功能:顯示計數值
****************************************************************************/
int main(void)
{
IO0DIR=0x7ff; //設置為輸出
IO0CLR=0x7ff;
lcd_init();
int_init();
timer0_init();
ShowInt(0x80,count++);
while(1);
}
/****************************************************************************
* File:delay()
* 功能:延時
****************************************************************************/
void delay(uint32 dly)
{ uint32 i;
for(; dly>0; dly--)
for(i=0; i<500; i++);
}
/****************************************************************************
* File:timer0_init
* 功能:定時器0初始化
****************************************************************************/
void timer0_init(void)
{//定時器計數器0設置,晶振為12M,1秒要運行1000000個周期,
T0PR=1000; //預分頻寄存器
T0MR0=1000; //匹配值
T0MCR=0x00000003; //開放匹配0中斷
T0TCR=0x00000003; //T0PC和T0TC復位
T0TCR=0x00000001; //T0PC和T0TC復位
}
/****************************************************************************
* File:timerInt
* 功能:中斷處理程序
****************************************************************************/
void __irq timerInt(void)
{
ShowInt(0x80,count++);
VICVectAddr=0;
T0IR=0x00000001;
}
/****************************************************************************
* File:int_init()
* 功能:中斷初始化
****************************************************************************/
void int_init(void)
{
VICIntSelect=0x00000000;
VICIntEnable=0x00000010;
VICVectCntl0=0x00000024;
VICVectAddr0=(int)timerInt;
}
/****************************************************************************
* 名稱:ChkBusy()
* 功能:檢查總線是否忙
****************************************************************************/
void ChkBusy()
{
IO0DIR=0x700;
while(1)
{
IO0CLR=rs;
IO0SET=rw;
IO0SET=en;
if(!(IO0PIN & busy))break;
IO0CLR=en;
}
IO0DIR=0x7ff;
}
/****************************************************************************
* 名稱:WrOp()
* 功能:寫函數
****************************************************************************/
void WrOp(uint8 dat)
{
ChkBusy();
IO0CLR=rs; //全部清零
IO0CLR=rw;
IO0CLR=0xff; //先清零
IO0SET=dat; //再送數
IO0SET=en;
IO0CLR=en;
}
/****************************************************************************
* 名稱:WrDat()
* 功能:寫數據函數
****************************************************************************/
void WrDat(uint8 dat)
{
ChkBusy();
IO0SET=rs;
IO0CLR=rw;
IO0CLR=0xff; //先清零
IO0SET=dat; //再送數
IO0SET=en;
IO0CLR=en;
}
/****************************************************************************
* 名稱:lcd_init()
* 功能:lcd初始化函數
****************************************************************************/
void lcd_init(void)
{
WrOp(0x38);
WrOp(0x06); //光標加1
WrOp(0x0c); //開顯示
}
/****************************************************************************
* 名稱:DisText()
* 功能:顯示文本函數
****************************************************************************/
void DisText(uint8 addr,uint8 *p)
{
WrOp(addr);
while(*p !='\0')WrDat(*(p++));
}
void ShowInt(uint8 addr,uint16 num) //在addr處顯示數字num
{//將num轉化成五個BCD碼存放在全局數組BCD[5]中
uint8 i;
for(i=5;i>0;i--) //將NUM數據轉化成ASCII碼,如521會轉化為00521
{
BCD[i-1]=(uint8)(num%10+0x30); //取出最低位
num/=10; //去掉最低位
}
i=0;
while(BCD[i] ==0x30 && i<4) BCD[i++]=' '; //NUM轉換成數組存放,但還沒有加上小數點
BCD[5]='\0';
DisText(addr,BCD);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -