当前位置 - 무료 법률 상담 플랫폼 - 법률 지식 - 51 마이크로컨트롤러를 사용하여 특정 핀에서 높은 수준의 발생 횟수를 계산합니다.

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]);

}

방금 작성한 내용이 통과되었습니다. 디지털 디스플레이 부분을 직접 변경해 보세요!