?? prog.c
字號:
/*************************
* 名稱:prog.c
* 功能:子程序
* 日期:2008-3-20
*
*****************************/
/**************************************************************************
public bit D_FLASHB
閃爍標志
byte D_LIG D_FLASH D_LED(12)
亮度 閃爍位 顯存
word D_LEDA D_WEI1 D_WEI2
段碼 3-0 11-4
external bit
byte M_FU
監控方式
word
**************************************************************************/
#include <REG51.H>
#include <ABSACC.h>
unsigned char data M_FU,M_FU1;
unsigned char data D_LIG,D_FLASH;
bit D_FLASHB;
unsigned char data D_LED[12];
/*
SCH_DISP: 顯示初始化
* D_DISP: LED 顯示功能
段地址:(C000H) 位0-3 地址: (C800H) 位4-11地址:(D000H)
1, O_BCD:接收顯示一位十進制數
2, I_BCD:接收顯示一位十進制數
3, O_HEX:接收顯示一位十六進制數
4, I_HEX:接收顯示一位十六進制數
5, O_ADDR:接收顯示地址
6, I_ADDR:接收顯示地址
7, IO_MEM:接收顯示連續HEX碼
************************************************/
void SCH_DISP(void)
{
extern unsigned char data D_LED[12];
D_FLASH=0;
D_FLASHB=0; /*不閃爍*/
for(D_LIG=0;D_LIG<12;D_LIG++)
{ D_LED[D_LIG]=16;
}
D_LIG=1; /* 亮度 */
}
// 77H,14H,0B3H,0B6H,0D4H,0E6H,0E7H,74H,0F7H,0F6H,0F5H,0C7H,63H,
// /*0 1 2 3 4 5 6 7 8 9 A B C*/
// 97H,0E3H,0E1H,00H,08H,0F1H,0CBH,57H,17H,80H,81H,87H,0C3H,0E7H,
// /*D E F [] . P |_. U J - r o k G
// 13 14 15 16 17 18 19 20 21 22 23 24 25 26*/
// 0D5H,0A0H,082H);
// /*H = =
// 27 28 29*/
/*************************************************
* 5 *
* -- *
* 6 | | 4 *
* -- *
* 0 | 7 | 2 *
* __ . *
* 1 3 *
*************************************************/
/*********************************
* 名稱:LED顯示程序 *
* 功能:LED[12]顯存->顯示 *
* 日期:2008-3-25 *
*********************************/
void D_DISP(void)
{
extern unsigned char data D_LED[12];
unsigned char code D_TAB[31]={0x77,0x14,0xB3,0xB6,0xD4,0xE6,0xE7,0x74,0xF7,0xF6,0xF5,0xC7,0x63,0x97,0xE3,0xE1,0x00,0x08,0xF1,0xCB,0x57,0x17,0x80,0x81,0x87,0xC3,0xE7,0xD5,0xA0,0x82,0x75};
//0 1 2 3 4 5 6 7 8 9 A B C D E F [] . P |_. U J - r o t G H `= = M
// 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
unsigned char data D_WEI,D_Y,D_FLA,D_NUM,j;
bit D_FLASHT;
D_FLA++;/* 閃爍時間 */
if(D_FLA>50)
{
D_FLA=0;
D_FLASHT=!(D_FLASHT);
}
// XBYTE[0xC800]=0;
D_WEI=1; /* 0000 0001*/
XBYTE[0xD000]=0;
for(D_NUM=0;D_NUM<12;D_NUM++)
{
if(D_NUM<4)
{
if(D_FLASHB==1 && D_FLASHT==1 && D_NUM==D_FLASH)/* 暗 */
{
goto D_NEXT;
}
XBYTE[0xC800]=D_WEI; //4 位碼
D_Y=D_TAB[D_LED[D_NUM]];
if(M_FU==1 && D_NUM==2)
D_Y=D_Y | 0x08;
if(M_FU==5 && D_FLASHB==0 && D_NUM==2)
D_Y=D_Y | 0x08;
}
if(D_NUM==4) //關4位碼
{
XBYTE[0xC800]=0;
D_WEI=1;
}
if(D_NUM>=4)
{
if(D_FLASHB==1 && D_FLASHT==1 && D_NUM==D_FLASH)/* 暗 */
{
goto D_NEXT;
}
XBYTE[0xD000]=D_WEI;
D_Y=D_TAB[D_LED[D_NUM]];
if(M_FU==1)
{ if(D_NUM==4 || D_NUM==6)
D_Y=D_Y | 0x08;
}
if(M_FU==5)
{
if(D_FLASHB==1)
{ if(D_NUM==9 || D_NUM==10)
D_Y=D_Y | 0x08;
}
else
{ if(D_NUM==10 || D_NUM==8 || D_NUM==4)
D_Y=D_Y | 0x08;
}
}
}
XBYTE[0xC000]=D_Y;
D_NEXT: for(j=0;j<D_LIG;j++) //亮延時
{;}
XBYTE[0xC000]=0;//暗延?
for(j=0;j<(30-D_LIG);j++)
{;}
D_WEI=D_WEI<<1;
}
}
/***********************************
* 1 2 顯示 接收 一位十進制數
* D_BCD(LED,BCD,B)
* (顯示位,十進制數,I/O)
* HIGH(BCD) -> D_LED(LED) *
* LOW(BCD) -> D_LED(LED-1) *
***********************************/
void O_BCD(unsigned char LED,unsigned char BCD)
{
D_LED[LED]=BCD/10;
D_LED[LED-1]=BCD%10;
}
unsigned char I_BCD(unsigned char LED)
{
return(D_LED[LED]*10+D_LED[LED-1]);
}
/***********************************
* 3 4 顯示 接收 一位十六進制數
* IO_HEX(LED,D_HEX,B)
* (顯示位,十六進制數,I/O)
* HIGH(BCD) -> D_LED(LED) *
* LOW(BCD) -> D_LED(LED-1) *
***********************************/
void O_HEX(unsigned char LED,unsigned char D_HEX)
{
D_LED[LED]=D_HEX>>4;
D_LED[LED-1]=D_HEX&0x0F;
}
unsigned char I_HEX(unsigned char LED)
{
return(D_LED[LED]<<4 | D_LED[LED-1]);
}
/*******************************************
* 5 6 顯示接收 地址ADDR
* ( ) *
* *
*******************************************/
void O_ADDR(unsigned char LED,unsigned int ADDR)
{
D_LED[LED]=ADDR>>12;
D_LED[LED-1]=ADDR>>8&0x0F;
D_LED[LED-2]=ADDR>>4&0x0F;
D_LED[LED-3]=ADDR&0x0F;
}
void SCH_IADDR(void)
{
D_FLASH=8;
D_FLASHB=1;
for(D_FLASH=0;D_FLASH<=8;D_FLASH++)
{
D_LED[D_FLASH]=0;
}
D_LED[4]=22;
}
unsigned int I_ADDR(unsigned char LED)
{ unsigned int ADDR,ADDR0;
ADDR0=D_LED[LED];
ADDR=ADDR0<<12;
ADDR0=D_LED[LED-1];
ADDR=ADDR0<<8|ADDR;
ADDR0=D_LED[LED-2];
ADDR=ADDR0<<4|ADDR;
return(ADDR|D_LED[LED-3]);
}
/*******************************************
* 7 顯示接收連續HEX碼<—>外存(ADDR) *
* ( 顯示位,地址,位數,I/O) *
* *
*******************************************/
void IO_MEM(unsigned char LED,signed int ADDR,unsigned char NO,bit B)
{ unsigned char Y;
for(Y=1;Y<=NO;Y++)
{ if(!B)
{
D_LED[LED]=XBYTE[ADDR]>>4;
D_LED[LED-1]=XBYTE[ADDR]&0x0F;
}
else
XBYTE[ADDR]=D_LED[LED]<<4|D_LED[LED-1];
ADDR++;
LED=LED-2;
}
}
/*******************************************
* 7 顯示接收連續HEX碼<—>外存(ADDR) *
* ( 顯示位,地址,位數,I/O) *
* *
*******************************************/
void reset (void)
{
((void (code *) (void)) 0x0000) ();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -