51 마이크로컨트롤러를 사용하여 특정 핀에서 높은 수준의 발생 횟수를 계산합니다.
//main.c
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit ?level?=?P1^0;
int?num, num3, num2, num1, num0;
void?DelayMs(uint?ms)
{ unsigned?int?i,j; for(?i?=?0;?i?lt;?ms;?i? ?) for(?j?=?115;?j?gt;?0;?j ?--);
}
void?main()
{ LcdReset() num?=?0; ?=?0;? DisplayListChar(0,0,"num:",5);? if?(level?==?1) num3?(num/1000)10; /100)10; num1?(num/10)10; num0?=?num10;? DelayMs(20); DispOneChar(6,0,num3?'0'); ?'0'); DispOneChar(8, 0, num1?'0'); DispOneChar(9, 0, num0? ?'0') }
}?
//1602.h?
#define?dataport?P0?//8비트 데이터 포트(하드웨어)
#define?buly?0x80 / /바쁨 감지 DB7
sbit?rs=P2^6;?//선택 입력 등록(하드웨어)
sbit?rw=P2^5;?//읽기 및 쓰기 제어 입력 단자(하드웨어)
sbit?e?=P2^7;?//신호 입력 단자 활성화(하드웨어)
/************ *******************LCD 헤더 파일**************************** ** ****/
/*---------?간단한 지연 기능?---------*/
void?delay ( unsigned?int?j)?
{
for(j;jgt;0;j--);
}
void?Delay5Ms(void)
{
unsigned?int?TempCyc?=?4552;
while(TempCyc--);
}
/*-------------지연---------*/
void?Lcddelay(unsigned ?char?MS)
{ unsigned?char?i,j; while(MS!=0)
{?j?=?4;
while(j!=0) { i=0xf0; while(i!=0){i--;} j-- }
MS--;
}
}
/*---------------LCD 상태를 확인하시겠습니까?---------
-----------*/
void?WaitForEnable(void)
{ dataport=0xff rs=0; ;_nop_(); _nop_(); while(dataportamp;buly);
}
/*---- ---------------?제어 단어 쓰기?------------*/
void?LcdWriteCommand(unsigned?char ? CMD, unsigned?char?AttribC)
{ if(AttribC)?WaitForEnable(); _nop_(); ?Lcddelay(5); ; e=1; _nop_(); e=0;
}
/*----------- ----------*/
void?LocateXY(char?polx, char?poly)
{ unsigned?char?temp; ; 폴리앰프;=0x1; if(폴리)?temp|=0x40; LcdWriteCommand(temp, 0);
}
/*-- - -------?문자 쓰기?---------------*/
void?LcdWriteLata(char?lataW)
{ WaitForEnable(); _nop_(); Lcddelay(5); _nop_();
}
/*--------------지정된 위치에 단일 문자를 표시하시겠습니까?--------------- - --*/
void?DispOneChar(unsigned?char?x, unsigned?char?y, unsigned?char?Wlata)
{ LocateXY(x, y); ( Wlata);
}
/*---------?초기화?----------*/
void?LcdReset(void)
{ LcdWriteCommand(0x38, 0); LcdWriteCommand(0x38, 0); ) ; LcdWriteCommand(0x38, 1); //?화면 지우기 LcdWriteCommand(0x01, 1); LcdWriteCommand(0x0c, 1); }
/*---------------?지정된 위치에 문자열을 표시하시겠습니까?--- -- ----*/
<p>void?DisplayListChar(unsigned?char?X, ?unsigned?char?Y, ?unsigned?char?code?*DLata, unsigned?char?L)
{
unsigned?char?i;
for(i=0;ilt;L;i)
DispOneChar(X,Y,DLata[i]);
}
방금 작성한 내용이 통과되었습니다. 디지털 디스플레이 부분을 직접 변경해 보세요!