第一范文网 - 专业文章范例文档资料分享平台

郭天祥之十天学会单片机视频配套程序-实用!

来源:用户分享 时间:2025/5/21 8:29:58 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

#include

#define uint unsigned int #define uchar unsigned char

/****************12864液晶接口定义********************/ sbit rs = P2^5; sbit std = P2^6; sbit sclk = P2^7; sbit psb = P2^4; sbit rst = P2^2;

sbit D1820 = P3^7; /*************定义18b20总线**********************/ uchar code tab0[]=\ 当前温度 %uchar code tab1[]=\ %uchar code tab2[]=\ ℃ %uchar code tab3[]=\ %uint i,j,s1num,num2; void delay(uint z) {

uint x,y;

for(x=z;x>0;x--) for(y=110;y>0;y--); }

void wr_date(uchar date)//写数据 {

uchar a,p; delay(10); a=date;

rs=1; //数据命令选择=1时读取数据 sclk=0; //串口时钟,未开 std=1; //选择串口方式 for(i=0;i<5;i++) //开启字节 {

sclk=1; sclk=0;

}

std=0; // 写 sclk=1; //开启时钟脉冲 sclk=0;

std=1; //选择数据 sclk=1; sclk=0;

std=0; sclk=1;

sclk=0;

for(p=0;p<2;p++) {

for(i=0;i<4;i++) {

a=a<<1; //左移目的是为了将溢出数据(即0或1)赋予std std=CY; //单片机特殊功能寄存器,“CY”用于存放字符串溢出字符 sclk=1; //一开一锁将数据显示 sclk=0; }

std=0; for(i=0;i<4;i++) {

sclk=1; sclk=0; } } }

void wr_com(uchar com) //写命令 {

uchar a,p; delay(10); a=com;

rs=1; //数据命令选择=1时读取数据 sclk=0; //串口时钟,未开 std=1; //选择串口方式 for(i=0;i<5;i++) //开启字节 {

sclk=1; sclk=0; }

std=0;

sclk=1; //开启时钟脉冲 sclk=0;

std=0; sclk=1; sclk=0;

std=0; sclk=1; sclk=0;

for(p=0;p<2;p++) {

for(i=0;i<4;i++)

{

a=a<<1;//左移目的是为了将溢出数据(即0或1)赋予std

std=CY;//单片机特殊功能寄存器,“CY”用于存放字符串溢出字符 sclk=1;//一开一锁将数据显示 sclk=0; }

std=0;

for(i=0;i<4;i++)//延时一下为下一数据到来做准备 { sclk=1; sclk=0; } } }

void write_lcd() //向液晶写入显示内容 {

uchar num;

wr_com(0x80);

for(num=0;num<16;num++) {

wr_date(tab0[num]); delay(1); }

wr_com(0x90);

for(num=0;num<16;num++) {

wr_date(tab1[num]); delay(1); }

wr_com(0x88);

for(num=0;num<16;num++) {

wr_date(tab2[num]); delay(1); }

wr_com(0x98);

for(num=0;num<16;num++) {

wr_date(tab3[num]); delay(1); } }

void init_lcd()

{

rst=1;

psb=0; //选串口

wr_com(0x30); //30---基本指令动作 wr_com(0x01); //清屏,地址指针指向00H delay(1);

wr_com(0x06); //光标的移动方向即读入或写入数据后指针加一 wr_com(0x0c); //开显示,关游标类似1602 return; } void init() {

init_lcd(); write_lcd(); }

void Delay_xus(uint i)//(16+9*i)us(51) {

while(i--); }

void Delay_100us(uchar j)//(16+9*i)us(51) {

uchar i = 15; i = i*j; while(i--); }

void init_18b20() //18b20初始化 {

uchar i,count=5; D1820 = 1; D1820 = 0;

Delay_100us(5); //500us D1820 = 1;

Delay_xus(2); //35us

i = D1820; //i为0则18b20初始化成功

while(i&&count--); //检测i为0,若为1,count=0后退出循环 D1820 = 1;

Delay_xus(10); //拉高电平,完成初始化

}

void write_18b20(uchar data_1820)//********************写数据********************* {

uchar i=0; D1820 = 1; for(i=0;i<8;i++) {

D1820 = 0; //产生下降沿,进入写时序(15us内送上数据) D1820 = data_1820&0x01; //从低位开始送数

Delay_xus(3); //延时45us,保证18b20采样到数据 D1820 = 1; //拉高电平完成送数

Delay_xus(1); //连续送数要间隔至少1us(这里25us) data_1820>>=1; //移位 } }

uchar read_18b20() //********************读数据***********************

{

uchar i=0 ; uchar temp =0;

D1820 = 1; for(i=0;i<8;i++)

{

D1820 = 0; //拉低电平准备产生读时序

temp>>=1; //先移位,方便i=7时接到最后移位 D1820 = 1; //拉高电平进入读时序

if(D1820) //取18b20传送的数据(先送低位) {

temp|=0x80; }

Delay_xus(1);

D1820 = 1; //拉高电平完成读时序 Delay_xus(1);//与下一位读取间隔一下 }

return(temp); }

uint read_temper() //*******************读取温度值***************************

郭天祥之十天学会单片机视频配套程序-实用!.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c17qzv7ranv9vfqx3dfqk_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top