三、单片机软件设计
1、首先是系统初始化
? ?? ???//lcdrw = 0; //关闭? ?? ?? ?? ?? ?
? ? TRISE = 0x00; //输出口? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
? ? PORTE = 0x00;
? ? TRISD = 0x00; // 输出口? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?
? ? TRISB = 0x0f; // 输入? ?? ???
? ? TRISC = 0x00; // 输出
? ? TRISA=0x04;
? ? PORTA=0;
Lcd_Initial();? ???//LCD初始化
Reset_DS18B20();
? ?? ?T1CKPS0=1;? ?? ?? ???//定时器分频器8分频
??T1CKPS1=1;? ?? ?? ?? ?? ? //定时器分频器8分频
??TMR1CS=0;? ?? ?? ?? ?? ???//TMR1工作于定时器方式
??TMR1L=(65536-100)%256;??//定时12500个时钟初始值
??TMR1H=(65536-100)/256;??//定时12500个时钟初始值
??GIE=1;? ???//总中断允许
??PEIE=1;? ? //外围功能模块中断允许
??TMR1IE=1;??//TMR1中断允许
??TMR1ON=1;??//启动TMR1
??pwm(20);
2、液晶显示程序
/********************************************************************************************
* 函数名称:Lcd_Write_Command()
* 功? ? 能:写指令代码
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Command(uchar temp)
{??
? ?port=temp;
? ?rs=0;
? ?rw=0;
? ?e=1;
? ?e=0;??
}
/********************************************************************************************
* 函数名称:Lcd_Write_Byte()
* 功? ? 能:写数据
* 入口参数:无
* 出口参数:无
*********************************************************************************************/
void Lcd_Write_Byte(uchar temp)
{??
? ?port=temp;
? ?rs=1;
? ?rw=0;
? ?e=1;
? ?e=0;??
}
3、按键程序
void key()
{
? ?? ???if (RB0 == 0)//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
? ?? ???{
? ?? ?? ?? ?? ?? ?? ???delay(10); //延时
? ?? ?? ?? ?? ???if (RB0 == 0)//? ?? ???
? ?? ?? ?? ?{
? ?? ?? ?? ???while (RB0== 0);? ?
? ?? ?? ? mode=!mode;
? ?? ?? ? if(mode==0){ dangwei=2;pwm(20);}
? ?? ?? ???}
? ?? ???}
? ?? ? if (RB1 == 0)//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
? ?? ???{
? ?? ?? ?? ?? ?? ?? ???delay(10); //延时
? ?? ?? ?? ?? ???if (RB1== 0)//? ?? ???
? ?? ?? ?? ?{
? ?? ?? ?? ?while (RB1== 0);
? ?? ?? ?? ?? ???if(mode==1)??
? ?? ?? ?? ?? ???{
? ?? ?? ?? ?? ?? ?? ?dangwei++;
? ?? ?? ?? ?? ?? ?? ?if(dangwei>6)dangwei=1;
? ?? ?? ?? ?? ?? ?? ?pwm(dangwei*10);
? ?? ?? ?? ?? ???}
? ?? ?? ?? ?? ???}
? ?? ?? ?? ?}
? ???if (RB2 == 0)//? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???
? ?? ???{
? ?? ?? ?? ?? ?? ?? ???delay(10); //延时
? ?? ?? ?? ?? ???if (RB2 == 0)//? ?? ???
? ?? ?? ?? ?{
? ?? ?? ?? ???while (RB2== 0);? ?
? ?? ?? ?? ?? ?? ? if(mode==1)??
? ?? ?? ?? ?? ???{
? ?? ?? ?? ?? ?? ?? ?if(dangwei>1)dangwei--;
? ?? ?? ?? ?? ?? ?? ?pwm(dangwei*10);
? ?? ?? ?? ?? ???}
? ?? ?? ???}
? ?? ???}
}
4、核心算法程序
? ? while (1)
? ? {
? ?? ?? ?Lcd_Character_16X16(0,0,8,data_shuju[2]);? ?? ???//显示温
? ?? ?? ?? ?Lcd_Character_16X16(0,0,24,data_shuju[3]);? ?? ???//显示度
? ?? ?? ?Lcd_Character_16X8( 0,0,40, data_shuju1[10]);//显示:
? ?? ???Lcd_Character_16X8( 0,0,48, data_shuju1[ad/100]);//显示:
? ?? ?? ? Lcd_Character_16X8( 0,0,56, data_shuju1[ad%100/10]);//显示:
? ?? ?? ?Lcd_Character_16X8( 0,0,64, data_shuju1[ad%10]);//显示:
? ?? ?? ?Lcd_Character_16X16(0,2,8,data_shuju[0]);? ?? ???//显示温
? ?? ?? ?? ?Lcd_Character_16X16(0,2,24,data_shuju[1]);? ?? ???//显示度
? ?? ?? ?Lcd_Character_16X8( 0,2,40, data_shuju1[10]);//显示:
? ?? ???Lcd_Character_16X8( 0,2,48, data_shuju1[temp/10]);//显示:
? ?? ???Lcd_Character_16X8( 0,2,56, data_shuju1[temp%10]);//显示:
? ?? ?? ?? ? Lcd_Character_16X16(0,4,8,data_shuju[4]);? ?? ???//显示温
? ?? ?? ?? ?Lcd_Character_16X16(0,4,24,data_shuju[5]);? ?? ???//显示度
? ?? ?? ?Lcd_Character_16X8( 0,4,40, data_shuju1[10]);//显示:
? ?? ?? ?if(mode==0)
? ?? ?? ?{
? ?? ?? ?? ?Lcd_Character_16X16(0,4,48,data_shuju[6]);? ?? ???//显示温
? ?? ?? ?? ?Lcd_Character_16X16(0,4,64,data_shuju[7]);? ?? ???//显示度??
? ?? ?? ?}
? ?? ?? ?else
? ?? ?? ?{
? ?? ?? ?? ?? ?Lcd_Character_16X16(0,4,48,data_shuju[8]);? ?? ???//显示温
? ?? ?? ?? ?Lcd_Character_16X16(0,4,64,data_shuju[9]);? ?? ???//显示度??
? ?? ?? ?}
? ?? ?? ?? ?? ?Lcd_Character_16X16(0,6,8,data_shuju[10]);? ?? ???//显示温
? ?? ?? ?? ?Lcd_Character_16X16(0,6,24,data_shuju[11]);? ?? ???//显示度
? ?? ?? ?Lcd_Character_16X8( 0,6,40, data_shuju1[10]);//显示
? ?? ???Lcd_Character_16X8( 0,6,48, data_shuju1[dangwei]);//显示:
? ? ad=get_ad();
? ???key();
? ???temp=DS18B20_Get();
? ? if((ad>alarm)||(temp>th))??TMR1ON=1;
? ? else { TMR1ON=0;RC7=1;}
? ? }
没有合适的资源?快使用搜索试试~ 我知道了~
基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示(proteus仿真+源程序)
共3个文件
txt:2个
png:1个
需积分: 1 0 下载量 169 浏览量
2024-05-17
21:56:35
上传
评论 2
收藏 142KB RAR 举报
温馨提示
基于PIC单片机温度-脉搏-DS18B20温度-液晶12864显示(proteus仿真+源程序) 一、系统方案 1、上电初始化液晶第一行显示脉搏,第二行显示温度,第三行显示模式,第四行显示强度;按下K1按键可以选择模式,催眼模式或治疗模式。 2、治疗模块下,可以通过K2、K3修改强度。 Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
资源推荐
资源详情
资源评论
收起资源包目录
仿真.rar (3个子文件)
仿真
新建文本文档.txt 4KB
程序.txt 42B
仿真
162420t7eez6qll3vci3im.png 142KB
共 3 条
- 1
资源评论
无限虚空
- 粉丝: 606
- 资源: 154
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功