|
楼主 |
发表于 2008-12-10 03:03:13
|
显示全部楼层
主程序(Main函数)如下:
void main()
{
uchar n,i;
init_devices();//端口初始化
LCD_Init();//LCD初始化
delay(5);
LCD_sendIN(0x01);//清屏
delay(50);
PORTB = 0x03;//PB.0/PB.1同时输出高电平,其中PB.0的高电平为感光LED加负偏压;
DDRB = 0x03; //PB.1的高电平用于关断用作指示灯的LED。
delay2(1);
while(1)
{
DDRB &=~ (1<<0);//DDRB &=~1(DDRB0 清零)
PORTB &=~ (1<<0);//PORTB &=~1(PORTB0 清零)
LCD_PlayLine(0x80,"光照检测:");//在LCD第1行第一位开始显示提示信息
n=0xff;
while (((PINB|0xfe)!=0xfe))
{
n--;
LCD_PlayNum(0x85,n);//在LCD第1行提示信息后显示当前的循环计数值,(主要用于程序调试时排错)
if (n==0x00) break;
}//当检测到PB.0变为低电平时结束循环;若长时间PB.0不变低,计数器累计255次后,
//认定当前亮度过低,跳出循环。
LCD_PlayLine(0x90,"当前亮度:");//在LCD第2行第一位开始显示提示信息
LCD_PlayNum(0x95,n);//在LCD第2行提示信息后显示最终的循环计数次数值,作为亮度的度量值。
if (n>220)
{
LED_ON(); //亮度高于指定值后,指示灯开启
LCD_Init();
pic_Disp(AVR1);
delay2(120); //同时屏幕上显示OURAVR的Logo,并持续一段时间
LCD_Init();
delay2(1);
}
if (n<100) //亮度低于指定值后,指示灯关闭,屏幕恢复正常显示
{
LED_OFF();
}
PORTB |=(1<<0);//PORTB |=1;//;(PB0置位)
DDRB |=(1<<0);//DDRB |=1;//(DDRB0置位),为感光LED加负偏压,进行下循环的检测。
delay2(10);
}
}
本贴被 i387DX 编辑过,最后修改时间:2008-12-10,13:14:15. |
|