|
手電因小開發(fā)板有指示燈,休眠電流大點(diǎn),但實(shí)際能用,開機(jī)20MA.待機(jī)10MA.休眠3MA。。其實(shí)沒有燈或換個(gè)低功耗的單片就完美了。。。
制作出來的實(shí)物圖如下:
20190119_173959.jpg (320.75 KB, 下載次數(shù): 79)
下載附件
2019-1-19 17:47 上傳
20190119_174008.jpg (333.89 KB, 下載次數(shù): 103)
下載附件
2019-1-19 17:47 上傳
20190119_174015.jpg (330.58 KB, 下載次數(shù): 77)
下載附件
2019-1-19 17:47 上傳
單片機(jī)程序源碼:
#include <reg52.h> //52系列單片機(jī)頭文件
#define uchar unsigned char
#define uint unsigned int
sbit RS = P2^6 ;
sbit RW = P2^5 ;
sbit EN = P2^7 ;
sbit STA7 = P0^7;
uint num,num1;
sbit led= P1^0 ;//燈
sbit k1= P3^2 ;//開關(guān)
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延時(shí)約xms毫秒
for(j=110;j>0;j--);
}
/**
* 等待繁忙標(biāo)志
*/
void wait(void)
{
P0 = 0xFF;
do
{
RS = 0;
RW = 1;
EN = 0;
EN = 1;
}while (STA7 == 1);
EN = 0;
}
/**
* 寫數(shù)據(jù)
*/
void w_dat(uint dat)
{
wait();
EN = 0;
P0 = dat;
RS = 1;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 寫命令
*/
void w_cmd(uint cmd)
{
wait();
EN = 0;
P0 = cmd;
RS = 0;
RW = 0;
EN = 1;
EN = 0;
}
/**
* 發(fā)送字符串到LCD
*/
void write_zfc(uchar *p)//定義一個(gè)帶指針的函數(shù)?(字符串)
{
while(*p!=0)//不能用";"
w_dat(*p++);
}
/**
* 初始化1602
*/
void Init_LCD1602(void)
{
w_cmd(0x38); // 16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
w_cmd(0x0C); // 顯示器開、光標(biāo)開、光標(biāo)允許閃爍
w_cmd(0x06); // 文字不動(dòng),光標(biāo)自動(dòng)右移
w_cmd(0x01); // 清屏
}
void main()
{
TMOD=0x01; //設(shè)置定時(shí)器0為工作方式1(0000 0001)
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
EX0=1;
EX1=1;
TR0=1;
delayms(15);
ET0=0;
PCON=0x02; //(或PCON=0x01;)
while(1)
{
delayms(15);
if(k1==0)//進(jìn)入空閑或休眠模式
{
while(!k1);
{
led=~led;//
delayms(50);
if(led==0)
{
delayms(3);
led=0;
}
else
{
ET0=0;
PCON=0x02; //(或PCON=0x01;)
}
}
}
}
}
void ex_int0() interrupt 0//外部中斷P3.2 進(jìn)行PCON=0;喚醒單片機(jī) CPU
{
PCON=0;
ET0=1;
}
|
評(píng)分
-
查看全部評(píng)分
|