?? show.c
字號:
//由于是共陽極,段碼要低電平點亮。位選碼(若采用9012放大)也為低電平點亮
// 若位選和段選分開在兩個端口控制,,則只能點亮三個數碼管,若同在一個端口則可以點亮四個。什么原因?
//可以用128Hz的時基中斷來延時,每中斷一次就送出一位、位選碼,每一秒就送出段選碼
//要清看門程序
//要使用的端口開始要初始化為相反電平,因為開始是不點亮的
//利用中斷延時為避免占用太多CPU的資源
//該程序是數據自動按順序顯示,
#include<spce061a_chf.h>
unsigned int j;
unsigned int i;
unsigned int count;
unsigned int a[16]={0x0011,0x00d7,0x0049,0x0045,0x0087,0x0025,0x0021,0x0057,0x0001,
0x0005,0x0003,0x00a1,0x0039,0x00c1,0x0029,0x002b };//段選碼,a-IOB7,dp-IOB0
unsigned int b[4]={0xfffe,0xfffd,0xfffb,0xfff7};//位選碼*/低電平點亮
//void display(void);
//void delay(void);
void main()
{
//unsigned int i;//中斷服務程序適合定義變量嗎?
Set_IOA_Dir(0x000f);//低4位為高電平輸出,送出位選碼
Set_IOA_Attrib(0x000f);
Set_IOA_Data(0x000f);
Set_IOB_Dir(0x00ff);//低8位為高電平輸出,送出段碼
Set_IOB_Attrib(0x00ff);
Set_IOB_Data(0x00ff);???????????
asm("INT OFF");
Set_TimeBase(0x0000);//選擇TMB1的128Hz
*P_INT_Ctrl=C_IRQ6_TMB2;
//或者可以Set_INT_Ctrl(0x0002);
asm("int irq");
while(1)
{
*P_Watchdog_Clear=0x0001;
*P_IOA_Data=b[j];
*P_IOB_Data=a[i];
if(count<=128)//,每中斷一次就送出一位位選碼
{
j++;
if(j==4)
j=0;
}
else
{
count=0;//夠1秒就清0
i++;
if(i==16)
i=0;
}
}
}
//此延時函數剛好合適,不閃爍。
/*void delay()
{
unsigned int i,j;
for(i=0;i<150;i++)
for(j=0;j<255;j++);
}*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -