×
单片机 > 单片机程序设计 > 详情

51单片机视力保护-实物+原理图+程序

发布时间:2021-06-10 发布时间:
|

51单片机视力保护-实物+原理图+程序

单片机源程序如下:

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535

#include


sbit CS=P1^4; //CS定义,连接ADC0832CS脚

sbit SCL=P1^5; //SCL定义,连接ADC0832SCL脚

sbit DO=P1^6; //DO定义,连接ADC0832DO脚



//这三个引脚参考资料

sbit rs=P1^0; //1602数据/命令选择引脚 H:数据 L:命令

sbit rw=P1^1; //1602读写引脚 H:数据寄存器 L:指令寄存器

sbit e =P1^2; //1602使能引脚 下降沿触发


sbit c_send = P3^2; //超声波发射

sbit c_recive = P3^3; //超声波接收

uchar flag_hc_value; //超声波中间变量

long distance; //距离

uint set_d; //距离

bit flag_csb_juli; //超声波超出量程

uint flag_time0; //用来保存定时器0的时候的

bit flag_200ms = 1 ;


uchar guangxian; //光线的显示变量

uchar qiang_gx; //设置光线的强的变量

uchar ruo_gx; //设置光线的弱的变量

uchar value;

uchar flag_alarm; //报警变量


uchar miao = 0,fen = 0,shi;

uchar s_miao = 55,s_fen = 44,s_shi=0;

bit xuexi_start; //开始学习标志位

uchar menu_1; //菜单设置变量

uchar i;


uchar flag_gx ; //光线报警

uchar flag_juli ; //距离报警

uchar flag_time = 0; //时间报警


/***********************语音模块控制IO口的定义************************/

sbit VRST = P2^4;

sbit VBUSY= P2^3;

sbit VSDA = P2^2;

sbit VCS = P2^1;

sbit VSCL = P2^0;



/***********************1ms延时函数*****************************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}


/********************************************************************

* 名称 : delay()

* 功能 : 延时,延时时间大概为5US。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

while(q--);

}


/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}


/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}


/***********************lcd1602上显示两位十进制数************************/

void write_sfm2(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/10%10);

write_data(0x30+date%10);

}


/***********************lcd1602上显示超声波距离************************/

void write_sfm_csb(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/100%10);

write_data('.');

write_data(0x30+date/10%10);

write_data(0x30+date%10);

}



/********************************************************************

* 名称 : init_1602()

* 功能 : 1602初始化,请参考1602的资料

* 输入 : 无

* 输出 : 无

***********************************************************************/

void init_1602()

{

write_com(0x38); //

write_com(0x0c);

write_com(0x06);

}


/********************************************************************

* 名称 : write_string(uchar hang,uchar lie,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

***********************************************************************/

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == '


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C51 特殊功能寄存器SFR的名称和地址