|
程序是:
#include
#include
sbit rs = P3^5; //define P2.6 as rs
sbit lcde= P3^4; //define lcd enable signal is P2.7 pin .
unsigned int Freq = 100;
unsigned int Duty = 1;
unsigned int Time_H = 0;
unsigned int Time_L = 0;
sbit Pulse=P1^1;
sbit ADD_F = P1^4;
sbit SUB_F = P1^5;
sbit ADD_C = P1^6;
sbit SUB_C = P1^7;
unsigned char numpos = 0;
unsigned char mode = 0;
unsigned char temppos = 0xff;
void Delay1ms(void)
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void DelayNms(unsigned int dly)
{
while(dly > 0)
{
dly--;
Delay1ms();
}
}
// void Delay1ms(unsigned int c) //?? 0us
// {
// // unsigned char a, b;
// //
// // for (;c>0;c--)
// // {
// // for (b=38;b>0;b--)
// // {
// // for (a=13;a>0;a--);
// // }
// //
// // }
// }
/*****write command to lcd "com" is data to mcu by use P0.0 to P0.7 pin**********/
void sendcomandtolcd(unsigned char com)
{
rs=0; //fix format of send commond to lcd
P0=com; //transfer data of com to P0 (total 8 pin ).
DelayNms(1);
lcde=1; //enable signal to lcd .
DelayNms(1); //5ms time to let mcu read data from P0.0 to P0.7(com)
lcde=0; //end of enable signal :data transfer finish .
}
void senddatatolcd(unsigned char dat)
{
rs=1; //fix format of send commond to lcd
P0=dat; //transfer data of com to P0 (total 8 pin ).
DelayNms(1);
lcde=1; //enable signal to lcd .
DelayNms(1); //5ms time to let mcu read data from P0.0 to P0.7(com)
lcde=0; //end of enable signal :data transfer finish .
}
/************write normal word to screen*****************************************/
void lcdputstr(unsigned char *d)//lcd display a sentense of "d" ,d<16bit
{
while(*d>0)
{
senddatatolcd(*d++);
}
}
/*************lcd init commond will clear screen and set cursor to beganing of first line ****/
void lcd_init()
{
lcde=0; //Initliz the lcd enable signal to 0
sendcomandtolcd(0x01); //lcd clear screen
sendcomandtolcd(0x38); //fix format of lcd ,0x38 means select lcd screen 16*2 type .
sendcomandtolcd(0x0c); //0x0f =0b 0001 1111 ,last 111 means on display ,on cursor,and cursor blinking.
sendcomandtolcd(0x06); //0b 0000 0110, 11 1,means cursor move righ when receive 1 charactor .1,means:screen not move .
}
void display(void)
{
sendcomandtolcd(0x80);
senddatatolcd('F');
senddatatolcd('r');
senddatatolcd('e');
senddatatolcd('q');
senddatatolcd(':');
senddatatolcd('0'+Freq/100);
senddatatolcd('0'+Freq%100/10);
senddatatolcd('0'+Freq%10);
senddatatolcd('H');
senddatatolcd('z');
sendcomandtolcd(0x80+0x40);
senddatatolcd('D');
senddatatolcd('u');
senddatatolcd('t');
senddatatolcd('y');
senddatatolcd(':');
senddatatolcd('0'+Duty%10);
senddatatolcd('0');
senddatatolcd('%');
Time_H = (100*Duty)/Freq;
Time_L = (100*(10-Duty))/Freq;
sendcomandtolcd(0x80+0x40+ 10);
senddatatolcd('P');
senddatatolcd(':');
senddatatolcd('0'+Time_H/100);
senddatatolcd('0'+Time_H%100/10);
senddatatolcd('0'+Time_H%10);
senddatatolcd('m');
senddatatolcd('s');
}
void keyscan(void)
{
if(ADD_F == 0)
{
if(Freq < 300)
Freq += 1;
while(ADD_F == 0);
}
if(SUB_F == 0)
{
if(Freq > 1)
Freq -= 1;
while(SUB_F == 0);
}
if(ADD_C == 0)
{
if(Duty < 9)
Duty += 1;
while(ADD_C == 0);
}
if(SUB_C == 0)
{
if(Duty > 1)
Duty -= 1;
while(SUB_C == 0);
}
}
void exint0() interrupt 0 //(location at 0003H)
{
keyscan();
display();
}
void EX0_Init(void)
{
IT0 = 1; //set INT0 int type (1:Falling 0:Low level)
EX0 = 1; //enable INT0 interrupt
EA = 1; //open global interrupt switch
}
void main (void)
{
lcd_init();
EX0_Init();
display();
while(1)
{
Pulse = 0;
DelayNms(Time_H);
Pulse = 1;
DelayNms(Time_L);
}
}
|
|