1602c语言(1602代码)

本篇文章给大家谈谈1602c语言,以及1602代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

1、51单片机C语言1602液晶显示程序解析2、用C语言来编写用1602来显示的计数器3、1602 定时器基本任务:采用定时器编程(1秒计时),循环计数(00~99),在1602上显示。用C语言的程序4、用C语言怎么清除1602中的一小段数据5、51单片机1602怎么显示一行字符,c语言的6、1602显示超声波测距的C语言程序和Proteus仿真图

51单片机C语言1602液晶显示程序解析

这个是1602内部结构决定的,你只需要在初始化的时候先设置三次显示,然后再设置你的其他要求。

芯片厂家推荐的用法:

INT:

MOV

A,#30H

MOV

DATR,#CW_ADD

MOV

R2,#03H

INT1:

MOVX

@DPTR,A

CALL

DELAY

DJNZ

R2,INT1

这上面就是1602对于51单片机推荐的初始化之前加的三次模式设置

1602c语言(1602代码)

用C语言来编写用1602来显示的计数器

我才学C。你说的我就能帮你搞个加减乘除运算了。以下是代码。#includestdio.h

main()

{

int i=1,flag=0; float a,b,c; char v;

printf(“输入数字完成运算”);

scanf(“%f%c%f”,a,v,b);

while(v!=’#’)

{ switch(v)

{ case ‘+’:c=a+b;break;

case ‘-‘:c=a-b;break;

case ‘*’:c=a*b;break;

case ‘/’:

if(b==0) flag=1;

else c=a/b; break;

default: flag=2;

}

if(flag==0)

{

printf(“%f%c%f=%f\n”,a,v,b,c);

i++;

}

if(flag==1) printf(“shucuole”);

if(flag==2) printf(“zifucuole”);

printf(“jixushuchu”);

scanf(“%f%c%f”,a,v,b);

}

}我是个新手。但可以保证代码的正确

1602 定时器基本任务:采用定时器编程(1秒计时),循环计数(00~99),在1602上显示。用C语言的程序

程序我已在1602上显示正确!

#includereg52.h

#define uchar unsigned char

#define uint unsigned int

sbit rs= P2^0;

sbit rw = P2^1;

sbit ep = P2^2;

char i,j,n=0;

uchar num,count,con;

uchar code table2[]=” 00″;

void lcd_com(uchar com);

void lcd_date(uchar date);

void lcd_init();

void lcd_sfm(uchar add,uchar date);

void delay(uint t)

{

uint i,j;

for(i=0;it;i++)

for(j=0;j120;j++)

;

}

void lcd_com(uchar com)

{

rs=0;

rw=0;

ep=0;

P0=com;

delay(1);

ep=1;

delay(1);

ep=0;

}

void lcd_date(uchar date)//显示字符

{

rs=1;

rw=0;

ep=0;

P0=date;

delay(1);

ep=1;

delay(1);

ep=0;

}

void lcd_init()// 初始化LCD

{

rw=0;

ep=0;

lcd_com(0x38);

lcd_com(0x0c);

lcd_com(0x06);

lcd_com(0x01);

lcd_com(0x80+0x40);

for(num=0;num6;num++)

{

lcd_date(table2[num]);

delay(1);

}

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;

ET0=1;

TR0=1;

}

void lcd_sfm(uchar add,uchar date)//显示位置和数据

{

uchar shi,ge;

shi=date/10;

ge=date%10;

lcd_com(0x80+0x40+add);

lcd_date(0x30+shi);

lcd_date(0x30+ge);

}

void main()

{

lcd_init();

while(1)

{

}

}

void timer0() interrupt 1

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

count++;

if(count==20)

{

count=0;

n++;

if(n==100)

{

n=0;

}

lcd_sfm(7,n);

}

}

用C语言怎么清除1602中的一小段数据

1、设置指针void *P,p=1602,memset()函数清零,如果是动态开辟的就要用free。

2、例程:

/* ME300B单片机开发系统演示程序 – DS18B20温度显示     */

/* LCD1602显示                                       */

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

#include  reg51.h 

#include  intrins.h 

#define uchar unsigned char

#define uint   unsigned int

sbit DQ = P3^3 ;   //定义DS18B20端口DQ  

sbit BEEP=P3^7   ; //蜂鸣器驱动线

bit presence   ;

sbit LCD_RS = P2^0 ;             

sbit LCD_RW = P2^1 ;

sbit LCD_EN = P2^2 ;

uchar code   cdis1[ ] =  ;

uchar code   cdis2[ ] =  ;

uchar code   cdis3[ ] =  ;

uchar code   cdis4[ ] =  ;

unsigned char data   temp_data[2] =  ;

unsigned char data   display[5] =     ;

unsigned char code   ditab[16] =     {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,

                                                         0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09} ;

void beep() ; 

unsigned char code   mytab[8] =  ;

#define delayNOP() ;  ;

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

void delay1(int ms)

{

unsigned char y ;

   while(ms–)

{

   for(y = 0 ; y250 ; y++)

   {

    _nop_() ;

    _nop_() ;

    _nop_() ;

    _nop_() ;

   }

}

}

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

/*检查LCD忙状态                                                    */

/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。    */

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

bit lcd_busy()

{                          

     bit result ;

     LCD_RS = 0 ;

     LCD_RW = 1 ;

     LCD_EN = 1 ;

     delayNOP() ;

     result = (bit)(P00x80) ;

     LCD_EN = 0 ;

     return(result) ; 

}

/*写指令数据到LCD                                                   */

/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。           */

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

void lcd_wcmd(uchar cmd)

{                          

    while(lcd_busy()) ;

     LCD_RS = 0 ;

     LCD_RW = 0 ;

     LCD_EN = 0 ;

     _nop_() ;

     _nop_() ; 

     P0 = cmd ;

     delayNOP() ;

     LCD_EN = 1 ;

     delayNOP() ;

     LCD_EN = 0 ;  

}

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

/*写显示数据到LCD                             */

/*RS=H,RW=L,E=高脉冲,D0-D7=数据。        */

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

void lcd_wdat(uchar dat)

{                          

    while(lcd_busy()) ;

     LCD_RS = 1 ;

     LCD_RW = 0 ;

     LCD_EN = 0 ;

     P0 = dat ;

     delayNOP() ;

     LCD_EN = 1 ;

     delayNOP() ;

     LCD_EN = 0 ; 

}

/*   LCD初始化设定                                                   */

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

void lcd_init()

     delay1(15) ;   

     lcd_wcmd(0x01) ;       //清除LCD的显示内容            

     lcd_wcmd(0x38) ;       //16*2显示,5*7点阵,8位数据

     delay1(5) ;

     lcd_wcmd(0x38) ;         

     delay1(5) ;

     lcd_wcmd(0x38) ;         

     delay1(5) ;

     lcd_wcmd(0x0c) ;       //显示开,关光标

     delay1(5) ;

     lcd_wcmd(0x06) ;       //移动光标

     delay1(5) ;

     lcd_wcmd(0x01) ;       //清除LCD的显示内容

     delay1(5) ;

}

/*   设定显示位置                                     */

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

void lcd_pos(uchar pos)

{                          

   lcd_wcmd(pos | 0x80) ;   //数据指针=80+地址变量

}

/*自定义字符写入CGRAM                                    */

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

void   writetab()  

{  

     unsigned char i ;

     lcd_wcmd(0x40) ;             //写CGRAM

     for (i = 0 ; i 8 ; i++)       

     lcd_wdat(mytab[ i ]) ;        

}

/*us级延时函数                                         */

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

void Delay(unsigned int num)

{

   while( –num ) ;

}

/*初始化ds1820                                       */

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

Init_DS18B20(void)

{  

      DQ = 1 ;       //DQ复位

      Delay(8) ;     //稍做延时

      DQ = 0 ;       //单片机将DQ拉低

      Delay(90) ;    //精确延时 大于 480us

      DQ = 1 ;        //拉高总线

      Delay(8) ;

      presence = DQ ;     //如果=0则初始化成功 =1则初始化失败

      Delay(100) ;

      DQ = 1 ; 

     

      return(presence) ; //返回信号,0=presence,1= no presence

}

/* 读一个字节                      */

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

ReadOneChar(void)

{

unsigned char i = 0 ;

unsigned char dat = 0 ;

for (i = 8 ; i  0 ; i–)

   {

     DQ = 0 ; // 给脉冲信号

     dat = 1 ;

     DQ = 1 ; // 给脉冲信号

     if(DQ)

      dat |= 0x80 ;

     Delay(4) ;

   }

     return (dat) ;

}

/* 写一个字节                                          */

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

WriteOneChar(unsigned char dat)

{

   unsigned char i = 0 ;

   for (i = 8 ; i  0 ; i–)

   {

     DQ = 0 ;

     DQ = dat0x01 ;

     Delay(5) ;

     DQ = 1 ;

     dat=1 ;

   }

}

/* 读取温度                             */

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

Read_Temperature(void)

{

      Init_DS18B20() ;

  

      WriteOneChar(0xCC) ;   // 跳过读序号列号的操作

      WriteOneChar(0x44) ;   // 启动温度转换

      Init_DS18B20() ;

      WriteOneChar(0xCC) ;   //跳过读序号列号的操作

      WriteOneChar(0xBE) ;   //读取温度寄存器

      temp_data[0] = ReadOneChar() ;    //温度低8位

      temp_data[1] = ReadOneChar() ;    //温度高8位 

}

/* 数据转换与温度显示                                               */

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

Disp_Temperature()

{

   display[4]=temp_data[0]0x0f ;

   display[0]=ditab[display[4]]+0x30 ;      //查表得小数位的值

  

   display[4]=((temp_data[0]0xf0)4)|((temp_data[1]0x0f)4) ;

   display[3]=display[4]/100+0x30 ;

   display[1]=display[4]%100 ;

   display[2]=display[1]/10+0x30 ;

   display[1]=display[1]%10+0x30 ;

     if(display[3]==0x30)         //高位为0,不显示

    { 

      display[3]=0x20 ;              

      if(display[2]==0x30)       //次高位为0,不显示

      display[2]=0x20 ;

    }

      lcd_pos(0x48) ;             

      lcd_wdat(display[3]) ;         //百位数显示 

      lcd_pos(0x49) ;             

      lcd_wdat(display[2]) ;         //十位数显示 

   lcd_pos(0x4a) ;             

      lcd_wdat(display[1]) ;         //个位数显示 

   lcd_pos(0x4c) ;             

      lcd_wdat(display[0]) ;         //小数位数显示 

}  

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

/* 蜂鸣器响一声                  */

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

void beep()

   {

     unsigned char y ;

     for (y=0 ;y100 ;y++)

     {

       Delay(60) ;

       BEEP=!BEEP ;                 //BEEP取反

     } 

     BEEP=1 ;                       //关闭蜂鸣器

Delay(40000) ;

   }

/* DS18B20 OK 显示菜单                                              */

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

void   Ok_Menu ()

     uchar   m ;

     lcd_init() ;                 //初始化LCD 

            

     lcd_pos(0) ;                 //设置显示位置为第一行的第1个字符

      m = 0 ;

     while(cdis1[m] != ‘\0’)

      {                          //显示字符

        lcd_wdat(cdis1[m]) ;

        m++ ;

      }

     lcd_pos(0x40) ;              //设置显示位置为第二行第1个字符

      m = 0 ;

     while(cdis2[m] != ‘\0’)

      {

        lcd_wdat(cdis2[m]) ;       //显示字符

        m++ ;

      }

      writetab() ;                //自定义字符写入CGRAM

      delay1(5) ;

      lcd_pos(0x4d) ;

      lcd_wdat(0x00) ;           //显示自定义字符

}

/* DS18B20 ERROR 显示菜单                              */

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

void   Error_Menu ()

{

      uchar   m ;

      lcd_init() ;                 //初始化LCD 

     lcd_pos(0) ;                 //设置显示位置为第一行的第1个字符

      m = 0 ;

      while(cdis3[m] != ‘\0’)

      {                          //显示字符

        lcd_wdat(cdis3[m]) ;

        m++ ;

      }

      lcd_pos(0x40) ;              //设置显示位置为第二行第1个字符

      m = 0 ;

      while(cdis4[m] != ‘\0’)

      {

        lcd_wdat(cdis4[m]) ;       //显示字符

        m++ ;

      }

}

/* 主函数      */

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

void main()

{

      Ok_Menu () ;

do

   {

       Read_Temperature() ;

    Disp_Temperature() ;

      }

     while(!presence)   ;

      Error_Menu () ;

do

   {  

     Init_DS18B20() ;

     beep() ;

      }

while(presence) ;

}

51单片机1602怎么显示一行字符,c语言的

#define LCD1602_FLAG

#define LCD1602_PORT P0

#includereg51.h

#includestddef.h

#define uchar unsigned char

sbit lcd1602_rs=P2^0;

sbit lcd1602_e=P2^2;

sbit lcd1602_rw=P2^1;

sbit lcd1602_busy=P0^7;

uchar str[]=”This is Key Test”;

uchar keyval,keystr[16];

void delay(uchar a)

{

uchar i;

while(a–)for(i=0;i120;i++);

}

/*

************************************

 * 函数名称:lcd1602_CheckBusy()

 * 函数功能:状态查询

************************************

*/

void lcd1602_CheckBusy()

{

    do

    {

    lcd1602_busy=1;

    lcd1602_rs=0;

    lcd1602_rw=1;

    lcd1602_e=0;

    lcd1602_e=1;

    }

while(lcd1602_busy);

}

/*

***************************************

 * 函数名称: lcd1602_WriteCmd()

 * 函数功能:写命令

 * 入口参数:命令字

 * 出口参数:无

***************************************

*/

void lcd1602_WriteCmd(const uchar cmd)

{

    lcd1602_CheckBusy();

lcd1602_rs=0;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=cmd;

lcd1602_e=0;

}

/*

*******************************************

 * 函数名称:lcd1602_WriteData()

 * 函数功能:写数据

 * 入口参数:c–待写数据

 * 出口参数:无

*********************************************

*/

void lcd1602_WriteData(const uchar c)

{

    lcd1602_CheckBusy();

lcd1602_rs=1;

lcd1602_rw=0;

lcd1602_e=1;

LCD1602_PORT=c;

lcd1602_e=0;

}

/*

***********************************************

 * 函数名称:lcd1602_Init()

 * 函数功能:初始化LCD

 * 入口参数:无

 * 出口参数:无

***********************************************

*/

void lcd1602_Init()

{

    lcd1602_WriteCmd(0x38);//显示模式为8位2行5*7点阵

    lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable,

    lcd1602_WriteCmd(0x06); //flag move to right,screen don’t move

    lcd1602_WriteCmd(0x01); //clear screen

}

/*

************************************************

 * 函数名称:lcd1602_Display()

 * 函数功能: 字符显示

 * 入口参数:ptr–字符或字符串指针

 * 出口参数:无

 * 说    明:用户可通过以下方式来调用:

 *           1)lcd1602_Display(“Hello,world!”);

 *           2) INT8U 存储类型 txt[]=”要显示的字符串”;

 *              或者 INT8U 存储类型 txt[]={‘t’,’x’,’t’,..,’\0′};

 *              INT8U *ptr;

 *              ptr=txt;

 *              lcd1602_Display(ptr);

 *              或 lcd1602_Display(txt);

 *              或 lcd1602_Display(txt);

************************************************

*/

void lcd1602_Display(const uchar *ptr,uchar line)

{

    uchar data i=0;

uchar *data q;

q=ptr;

switch(line)

{

case 0:

lcd1602_WriteCmd(0x80);

while(q!=NULL  (*q!=’\0′)  i16)

    {

lcd1602_WriteData(*q);

q++;

i++;

    }

break;

case 1:

lcd1602_WriteCmd(0xc0);

while(q!=NULL  (*q!=’\0′)  i16)

    {

lcd1602_WriteData(*q);

q++;

i++;

}

break;

}

}

uchar kbscan(void)

{

unsigned char sccode,recode;

P3=0x0f;  //发0扫描,列线输入

if ((P3  0x0f) != 0x0f)  //有键按下

{

delay(20);   //延时去抖动

if ((P30x0f)!= 0x0f)

{

sccode = 0xef;    //逐行扫描初值

while((sccode0x01)!=0)

{

    P3=sccode;

if((P30x0f)!=0x0f)

{

    recode=(P30x0f)|0xf0;

while((P30x0f)!=0x0f);//等待键抬起

return((~sccode)+(~recode));

 }

        else

sccode=(sccode1)|0x01;

}

}

}

return 0;  //无键按下,返回0

}

uchar getkey(void)

{

uchar key;

key=kbscan();

if(key==0){keyval=0xff;return(0);}

switch(key)

{

case 0x11:keyval=7;break;

case 0x12:keyval=4;break;

case 0x14:keyval=1;break;

case 0x18:keyval=10;break;

case 0x21:keyval=8;break;

case 0x22:keyval=5;break;

case 0x24:keyval=2;break;

case 0x28:keyval=0;break;

case 0x41:keyval=9;break;

case 0x42:keyval=6;break;

case 0x44:keyval=3;break;

case 0x48:keyval=11;break;

case 0x81:keyval=12;break;

case 0x82:keyval=13;break;

case 0x84:keyval=14;break;

case 0x88:keyval=15;break;

default:keyval=0xff;break;

}

if(keyval!=0xff)return(1);

else return(0);

}

main()

{

uchar num;

lcd1602_Init();

lcd1602_Display(str,0);

while(1)

{

if(getkey())

{

keystr[num]=keyval+0x30;

lcd1602_Display(keystr,1);

num++;

num%=16;

}

}

}

1602显示超声波测距的C语言程序和Proteus仿真图

#include”reg52.h”

#include”intrins.h”

#define uchar unsigned char //无符号8位

#define uint unsigned int //无符号16位

#define ulong unsigned long //无符号32位

sbit K1=P1^0; //按下K1后,开始测距

sbit LEDRed=P1^1; //测距指示灯,亮表示正在测距,灭表示测距完成

//sbit BEEP=P1^2; //报警测量超出范围

sbit Trig=P2^5; //HC-SR04触发信号输入

sbit Echo=P2^6; //HC-SR04回响信号输出

float xdata DistanceValue=0.0; //测量的距离值

float xdata SPEEDSOUND; //声速

float xdata XTALTIME; //单片机计数周期

uchar xdata stringBuf[6]; //数值转字符串缓冲

//LCD1602提示信息

uchar code Prompts[][16]=

{

{“Measure Distance”}, //测量距离

{“- Out of Range -“}, //超出测量范围

{“MAX range 400cm “}, //测距最大值400cm

{“MIN range 2cm “}, //测距最小值2cm

{” “}, //清屏

{” Press K1 Start “} //按键开始测量

};

uchar xdata DistanceText[]=”Range: “; //测量结果字符串

uchar xdata TemperatureText[]=”Temperature: “;//测量温度值

extern void LCD_Initialize(); //LCD初始化

extern void LCD_Display_String(uchar *, uchar); //字符串显示

extern void ReadTemperatureFromDS18B20(); //从DS18B20读取温度值

extern int xdata CurTempInteger;

//毫秒延时函数

void DelayMS(uint ms);

//20微秒延时函数

void Delay20us();

//HCSR04初始化

void HCSR04_Initialize();

//测量距离

float MeasuringDistance();

//测距的数值排序求平均

float DistanceStatistics();

//输出距离值到LCD1602上

void DisplayDistanceValue(float dat);

//将无符号的整数转成字符串,返回字符串长度,不包括’\0’结束符

uchar UnsigedIntToString(uint value);

//蜂鸣器

//void Beep(uchar time);

//显示温度值

void DisplayTemperatureValue();

void main()

{

LCD_Initialize();//LCD1602初始化

LCD_Display_String(Prompts[0],0x00);

LCD_Display_String(Prompts[5],0x40);

ReadTemperatureFromDS18B20(); //测温度

HCSR04_Initialize(); //HC-SR04初始化

while(1)

{

if(K1==0)

{

DelayMS(5);

if(K1==0)

{

//Beep(1);

while(K1==0);

LEDRed=0;

ReadTemperatureFromDS18B20();//测温度

DisplayTemperatureValue();

if(CurTempInteger14)

CurTempInteger=14;

else if(CurTempInteger26)

CurTempInteger=26;

SPEEDSOUND=334.1+CurTempInteger*0.61;//计算声速

DistanceValue=DistanceStatistics(); //测距并返回距离值

DisplayDistanceValue(DistanceValue); //显示距离值

LEDRed=1;

}

}

}

}

//测距的数值排序求平均

float DistanceStatistics()

{

uchar i,j;

float disData[7],t;

//连续测距

for(i=0;i7;i++)

{

disData=MeasuringDistance();

DelayMS(80);

}

//排序

for(j=0;j=6;j++)

{

for(i=0;i7-j;i++)

{

if(disDatadisData[i+1])

{

t=disData;

disData=disData[i+1];

disData[i+1]=t;

}

}

}

return (disData[2]+disData[3]+disData[4])/3;

}

//测量距离

float MeasuringDistance()

{

//最大定时时间约65ms

TH0=0;

TL0=0;

//生成20us的脉冲宽度的触发信号

Trig=1;

Delay20us();

Trig=0;

//等待回响信号变高电平

while(!Echo);

TR0=1; //启动定时器0

//等待回响信号变低电平

while(Echo);

TR0=0; //关闭定时器0

//返回距离值(mm)

return (SPEEDSOUND*XTALTIME*((float)TH0*256+(float)TL0))/2000;

}

//HCSR04初始化

void HCSR04_Initialize()

{

//计算单片机计数周期 晶振=11.953M 单位us

XTALTIME=12/11.953;

//温度25度时声速的值

SPEEDSOUND=334.1+25*0.61;

Trig=0;

Echo=0;

TMOD=0x01;

}

//输出距离值到LCD1602上

void DisplayDistanceValue(float dat)

{

uchar i=0,j=0,len;

uint value;

value=(uint)dat;

//范围检查大于4000mm和小于20mm都为超出测量范围

if(value4000)

{

LCD_Display_String(Prompts[1],0x00);

LCD_Display_String(Prompts[2],0x40);

//Beep(2);

}

else if(value20)

{

LCD_Display_String(Prompts[1],0x00);

LCD_Display_String(Prompts[3],0x40);

//Beep(2);

}

else

{

//将数值转换成字符串

len=UnsigedIntToString(value);

//保留1位小数

while(stringBuf!=’\0′)

{

if(len-j==1)

{

DistanceText[6+j]=’.’;

j++;

}else

{

DistanceText[6+j]=stringBuf;

i++;

j++;

}

}

DistanceText[6+j]=’c’;

j++;

DistanceText[6+j]=’m’;

i=7+j;

//剩余位置补空格

while(i16)

{

DistanceText=’ ‘;

i++;

}

//LCD_Display_String(Prompts[0],0x00);

LCD_Display_String(DistanceText,0x40);

}

}

//显示温度值

void DisplayTemperatureValue()

{

TemperatureText[13]=CurTempInteger/10+’0′;

TemperatureText[14]=CurTempInteger+’0′;

TemperatureText[15]=’C’;

LCD_Display_String(TemperatureText,0x00);

}

//将无符号的整数转成字符串,返回字符串长度

uchar UnsigedIntToString(uint value)

{

uchar i=0,t,length;

//从个位开始转换

do

{

stringBuf=’0’+value;

value=value/10;

i++;

}while(value!=0);

length=i;

//将字符串颠倒顺序

for(i=0;i(length/2);i++)

{

t=stringBuf;

stringBuf=stringBuf[length-i-1];

stringBuf[length-i-1]=t;

}

stringBuf[length]=’\0′;

return length;

}

//蜂鸣器

//延时函数 毫秒 @12.000MHz

void DelayMS(uint ms)

{

uchar i, j;

while(ms–)

{

_nop_();

i = 2;

j = 239;

do

{

while (–j);

}while (–i);

}

}

//延时函数 20微秒 @12.000MHz

void Delay20us()

{

uchar i;

_nop_();

i = 7;

while (–i);

}

//定时器0中断

void Timer0() interrupt 1

{

}

//DS18B20代码:

#include

#include

#define uchar unsigned char //无符号8位

#define uint unsigned int //无符号16位

//定义DS18B20端口DS18B20_DQ

sbit DS18B20_DQ = P2^7;

//当前采集的温度值整数部分

int xdata CurTempInteger;

//当前采集的温度值小数部分

int xdata CurTempDecimal;

void Delayus(uint count)

{

while (–count);

}

uchar Reset_DS18B20()

{

uchar status;

DS18B20_DQ=1;

Delayus(1);

//开始复位过程

DS18B20_DQ=0; //数据线拉低

Delayus(100); //延时480us-960us

DS18B20_DQ=1; //数据线拉高

Delayus(10); //延时15us-60us

status=DS18B20_DQ; //读取数据线上的状态

Delayus(120);

return status;

}

void WriteByteToDS18B20(uchar dat)

{

uchar i;

for(i=0;i8;i++)

{

DS18B20_DQ=0;

DS18B20_DQ=dat0x01; //发送1位数据

Delayus(15); //延时60us以上

DS18B20_DQ=1; //释放总线,等待总线恢复

dat=1; //准备下一位数据

}

}

uchar ReadByteFromDS18B20()

{

uchar i,dat=0;

for(i=0;i8;i++)

{

DS18B20_DQ=0; //拉低总线,产生读信号

dat=1;

DS18B20_DQ=1; //释放总线,准备读1位数据

Delayus(2); //延时4us

if(DS18B20_DQ) dat|=0x80; //合并每位数据

Delayus(15); //延时60us

DS18B20_DQ=1; //拉高总线,准备读下1位数据

}

return dat;

}

void ReadTemperatureFromDS18B20()

{

uchar flag=0;//正负符号标志

//存储当前采集的温度值

uchar TempValue[]={0,0};

if(Reset_DS18B20())

{

CurTempInteger=255;

CurTempDecimal=0;

}

else

{

WriteByteToDS18B20(0xCC);//跳过ROM命令

WriteByteToDS18B20(0x44);//温度转换命令

Reset_DS18B20();//复位

WriteByteToDS18B20(0xCC);//跳过ROM命令

WriteByteToDS18B20(0xBE);//读取温度暂存器命令

TempValue[0]=ReadByteFromDS18B20();//先读低字节温度值

TempValue[1]=ReadByteFromDS18B20();//后读高字节温度值

Reset_DS18B20();//复位

//计算温度值

//先进行正温度与负温度判断,高5位全为1(0xF8)则为负数

if((TempValue[1]0xF8)==0xF8)

{

//负温度计算:取反加1,低字节为0时,高字节取反加1,否则不需要。

TempValue[1]=~TempValue[1];

TempValue[0]=~TempValue[0]+1;

if(TempValue[0]==0x00) TempValue[1]++;

flag=1;//负数标志

}

//将温度值分为整数和小数两部分存储(默认为12位精度)

CurTempInteger=((TempValue[1]0x07)4)|((TempValue[0]0xF0)4); if(flag) CurTempInteger=-CurTempInteger;

CurTempDecimal=(TempValue[0]0x0F)*625;

}

}

//LCD1602程序代码:

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define Delay4us(){_nop_();_nop_();_nop_();_nop_();}

sbit LCD_RS=P2^0;

sbit LCD_RW=P2^1;

sbit LCD_EN=P2^2;

void LCDDelay(uint ms)

{

uchar i, j;

while(ms–)

{

_nop_();

i = 2;

j = 239;

do

{

while (–j);

}while (–i);

}

}

bit LCD_Busy_Check()

{

bit result;

LCD_RS=0; LCD_RW=1; LCD_EN=1;

Delay4us();

result=(bit)(P00x80);

LCD_EN=0;

return result;

}

void Write_LCD_Command(uchar cmd)

{

while(LCD_Busy_Check());

LCD_RS=0; LCD_RW=0; LCD_EN=0; _nop_(); _nop_();

P0=cmd; Delay4us();

LCD_EN=1; Delay4us(); LCD_EN=0;

}

void Write_LCD_Data(uchar dat)

{

while(LCD_Busy_Check());

LCD_RS=1;LCD_RW=0;LCD_EN=0;

P0=dat;Delay4us();

LCD_EN=1;Delay4us();LCD_EN=0;

}

void LCD_Set_POS(uchar pos)

{

Write_LCD_Command(pos|0x80);

}

void LCD_Initialize()

{

Write_LCD_Command(0x01); LCDDelay(5);

Write_LCD_Command(0x38); LCDDelay(5);

Write_LCD_Command(0x0C); LCDDelay(5);

Write_LCD_Command(0x06); LCDDelay(5);

}

void LCD_Display_String(uchar *str, uchar LineNo)

{

uchar k;

LCD_Set_POS(LineNo);

for(k=0;k16;k++)

{

Write_LCD_Data(str[k]);

}

}

void LCD_Display_OneChar(uchar Dat, uchar X, uchar Y)

{

Y = 0x01; //限制Y不能大于1(2行,0-1)

X = 0x0F; //限制X不能大于15(16个字符,0-15)

if(Y) {X |= 0x40;} //当要在第二行显示时地址码+0x40;

X |= 0x80; //算出指令码

Write_LCD_Command(X);

Write_LCD_Data(Dat);

}

关于1602c语言和1602代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

本文来自投稿,不代表【】观点,发布者:【

本文地址: ,如若转载,请注明出处!

举报投诉邮箱:253000106@qq.com

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2024年3月31日 17:35:38
下一篇 2024年3月31日 17:43:58

相关推荐

  • c语言改写模式,c语言实现修改功能

    c语言程序修改? 1、这个程序有4个错误,我都加粗了,第一个是m没有赋初值,第二个是while表达式中的ch=getchar()需要括号括起来,第三个是m=m*10+ch-0中的0也需要用单引号括起来,第四个是第2个while中为m!=0。 2、define容易造成误会,因为不符合一般的编程习惯,false 0, true 1;scanf放在你的那个地方是达…

    2024年5月23日
    4100
  • c语言控制代码的换码序列,c语言交换代码

    求C语言编程大神解答一下下面这个编程代码? k==5,用5去除125余0,所以r=125%5中r为0。由于!0为1,所以执行while循环体:先打印出5(k的值),再n=n/k==125/5=25;由于251则再打印出*号。这一循环结果输出是5*。 下面是我的代码,三个函数分别对应三个问题。 在实现基本要求的前提下,拓展了可以从键盘输入的功能,以下为各题代码…

    2024年5月23日
    5800
  • c语言扫描io脚状态,c语言端口扫描

    求51单片机的上升沿和下降沿C语言检测程序列子,端口就是普通IO口。 上升沿触发是当信号有上升沿时的开关动作,当电位由低变高而触发输出变化的就叫上升沿触发。也就是当测到的信号电位是从低到高也就是上升时就触发,叫做上升沿触发。 单片机怎么计算1s内下降沿的个数的C语言程序或者计算两个下降沿的时间(检测脉冲频率)计算1s内下降沿的个数方法是,一个定时器设置定时1…

    2024年5月23日
    4500
  • c语言mallloc使用的简单介绍

    C语言中使用malloc必须加#includemallo.h? 1、在C语言中使用malloc函数进行动态内存分配。malloc的全称是memory allocation,中文叫动态内存分配。原型:extern void malloc(unsigned int num_bytes);功能:分配长度为num_bytes字节的内存块。 2、你可以看一下C语言那本…

    2024年5月23日
    4500
  • c语言三位小数,C语言三位小数

    怎样用C++语言输出精确到小数点后三位的数? 1、用C++语言输出精确到小数点后三位的数,可以参考下面给出的代码:coutsetiosflags(ios:fixed)setprecision(3)。其中 setiosflags中set是设置的意思。ios是iostream的缩写,即输入输出流。flags是标志的意思。 2、要精确到小数点后若干位,则数据类型为…

    2024年5月23日
    7500
  • c语言21点游戏,二十一点游戏代码c语言

    如何使用C语言编写简单小游戏? 1、数学知识:长方形的面积S=a*b 长方形周长L=2*(a+b)其中a b分别为长方形的宽和高。算法分析:长方形面积及周长均依赖于宽和高,所以先要输入宽高值,然后根据公式计算,输出结果即可。 2、/*也不知道你是什么级别的,我是一个新手,刚接触编程语言,以下是我自己变得一个小程序,在所有c语言的编译器(vc++0、turbo…

    2024年5月23日
    6500
  • c语言当中的null,C语言当中的符号

    C/C++中,NULL和null的区别是什么? nul 和 null要看编译器,不同的编译器有所区别。 所以C或者C++中都使用一个特殊定义NULL表示无效值,其本质就是未定义具体数据类型的0值。 null是是什么都没有的意思。在java中表示空对象。 本意是“空的;元素只有零的”意思。计算机中通常表示空值,无结果,或是空集合。\x0d\x0a在ASCII码…

    2024年5月23日
    4700
  • 包含c语言对txt文件命名的词条

    如何在C语言编程里面修改源文件名字 如果你是在WINDOWS的话,简单了,随便用个编辑器,比如记事本,然后写c源程序,保存到你想要保存的位置。如果你在DOS下,可以用edit,写好以后,按alt键,选择文件菜单,然后保存。 用open打开文件,注意操作模式使用“修改”或者“添加” 用write或者fprintf向文件中写入你的内容。 用close关闭文件。 …

    2024年5月23日
    5000
  • 学c语言编程,学c语言编程用什么软件

    编程开发必须要学C语言吗? 1、要学习。编程开发的学习内容主要包括c语言、python和c+语言。C语言作为一种简单灵活的高级编程语言,它是一个面向过程的语言,一般是作为计算机专业的基础入门语言课程。 2、C语言。对于刚接触编程的人来说,先学习C语言是非常重要的。C语言可以说是是计算机编程语言的鼻祖,其他的编程语言几乎全是由C语言变化衍生出来的。 3、不需要…

    2024年5月23日
    3500
  • 黑客代码软件学习推荐歌曲的简单介绍

    我想自学编程代码,,目地是“黑”网站,开发出破解代码。有没有这方面的… 这个迭代周期不应该以周为周期或以月为周期发生,而是应该以日为周期。知识等待使用的时间越久,知识这把斧头就越钝。等待学习新知识的时间越长,你就越难以将其融入到代码中。 我认为这个问题问得本身就显得有点矛盾,想学却担心自己看不懂代码学不来,试问哪个编程人员不是从零开始的。坚定信念…

    2024年5月23日
    4800

发表回复

登录后才能评论



关注微信