找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2100|回复: 1
收起左侧

C语言if(p=='\0') //字符串判断结束标志的问题

[复制链接]
ID:639140 发表于 2020-2-21 23:48 | 显示全部楼层 |阅读模式
if(p=='\0') //字符串判断结束标志  其中这个p是从哪里来的  倒数第二行

程序如下 1602LCD 显示函数中的一段  注释我自己加的 错啦请大家指教

*void xianshi(uchar x,uchar y,uchar *str) //*str是指针字符串的指针,xy可能是数据指针函数
{

uint i=0; //声明函数i并且赋值0

if(y==0) //当函数y=0时 为真  可能是写在第一行的意思

write_cmd(0x80|x); //执行命令x和0x80(1000 0000)相与 全1是1得出命令 执行

if(y==1)  //当函数y=1时 为真  可能是写在第二行的意思

write_cmd(0xc0|x); //执行命令x和0xc0(1100 0000|x)相与 全1是1得出命令 执行 0xc0=0x80+0x40

for(i=0;i<16;i++) //i值循环增加

{


write_data(str[ i]); //*str是指针字符串的指针,
                    //str[ i]的意思可能是把i变成字符串 当数据执行


if(p=='\0') //字符串判断结束标志  


break;

}
} */
回复

使用道具 举报

ID:639140 发表于 2020-2-21 23:49 | 显示全部楼层
完全代码
百度文库搜集  控制端子已经匹配普中6800开发板
每隔一分钟,蜂鸣器响一次,按键按一下,计数器清0
#include<reg51.h>

#include<intrins.h>  //intrins.h,函数,应用于程序设计,一般出现在C51单片机编程中,一般程序中需要使用到空指令_nop_();字符循环移位指令_crol_等时使用。
                     //crol_ 字符循环左移

                       //_cror_ 字符循环右移

    //_irol_ 整数循环左移

    //_iror_ 整数循环右移

    //_lrol_ 长整数循环左移

    //_lror_ 长整数循环右移

    //_nop_ 空操作 (相当于8051 NOP 指令)

    //_testbit_ 测试并清零位 (相当于8051 JBC 指令)




#define uchar unsigned char

#define uint unsigned int

sbit RS=P2^6;

sbit RW=P2^5;

sbit EN=P2^7;  

uchar code dis2[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};  //1-9

uchar code p[]="-";//code


  

uchar j,k,kk,miao,miao1,fen,fen1,shi,shi1;

void delay_ms(int x)//延时程序,延时1ms

{



uint i;



while(x--)



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

}  

uchar busy()//对LCD1602         判断是否忙



{



uchar status; //声明函数status



RS=0; //读内部寄存器状态算是读指令选择  RS=0指令选择



RW=1; //读操作



EN=1;//使能信号也就是开始工作的意思 ,读操作一直高电平,写操作只是高脉冲


delay_ms(1);



status=P0;  //函数定义为P0,就是说p0是数据口 00-07 8个端子要是07是高电位就是1602忙碌 07是低电平就是闲


EN=0; //读操作完成 拉低使能信号,为下次工作做准备



return status; //return 返回函数 读取完P0口数据返回主函数

}  

void write_cmd(uchar cmd)//写命令程序,首先对其进行判忙



{



while((busy()&0x80)==0x80);//对返回进行或运算判断全1则1,如果为忙就进行等待





RS=0; //命令选择



RW=0; //写操作



EN=0;// 片选信号拉低准备工作



P0=cmd; //函数cmd的数据放到P0上



EN=1; //片选信号开始工作



delay_ms(1);



EN=0;//拉低片选为下次做准备

}  

void write_data(uchar dat) //写数据函数函数dat

{
while((busy()&0x80)==0x80); //忙判断 或-全1则1



RS=1; //数据选择



RW=0; //写操作



EN=0; //片选信号



P0=dat; //P0读取dat



EN=1; //开始传送



delay_ms(1);



EN=0; //拉低片选信号

}  

void canshu() //初始化函数

{



write_cmd(0x38);



delay_ms(1);



write_cmd(0x01);



delay_ms(1);



write_cmd(0x06);



delay_ms(1);



write_cmd(0x0c);



delay_ms(1);

}  

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




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

/*void xianshi(uchar x,uchar y,uchar *str) //*str是指针字符串的指针,xy可能是数据指针函数

{



uint i=0; //声明函数i并且赋值0



if(y==0) //当函数y=0时 为真  可能是写在第一行的意思



write_cmd(0x80|x); //执行命令x和0x80(1000 0000)相与 全1是1得出命令 执行



if(y==1)  //当函数y=1时 为真  可能是写在第二行的意思




write_cmd(0xc0|x); //执行命令x和0xc0(1100 0000|x)相与 全1是1得出命令 执行 0xc0=0x80+0x40



for(i=0;i<16;i++) //i值循环增加



{





write_data(str[i]); //*str是指针字符串的指针,
                    //str[i]的意思可能是把i变成字符串 当数据执行




if(p=='\0') //字符串判断结束标志  如果p的ascii码为0  好像是把一个字符串赋值给数组:u8 str1[]={"cxjr.21ic.org"};
              //实际上数组str1在内存中的实际存放情况为:
            //  c x j r . 2 1 i c . o r g '\0'

               //这后面的'\0'是由C编译系统自动加上的。所以在用字符串赋初值时一般无须指定数组的长度, 而由系统自行处理。






break;



}

} */

  

void aaa() interrupt 1 //定时器aaa函数中断入口1
{



TH0=(65535-50000)/256; //50ms一中断



TL0=(65535-50000)%256;



if(++kk==40) //k先+在判断是否=18 kk可能是中断函数 先++在计算是为了从0开始计数 后++可能从1 开始
{
miao++; //kk中断18次时间秒自加1
if(miao==10) //当个位=10
{

    if(miao1++==5) //miao1 自加一次 直到5次以后秒数达到59 后条件导通程序往下一步走

      {

       if(fen++==10)
        {

         if(fen1++==5)

           {
            if(shi++==10)

             {
              
              if(shi1++==1)
                {
                  shi1=0;
                   shi=0;
                 }
   
                 shi=0;
             }
              fen1=0;
            }
          fen=0;
          }
       miao1=0;
       }
      miao=0;
      }
      kk=0;
     }
    }

void main()  
{
P1=0x00;
P2=0X06;   
canshu();
//xianshi(0,0,p);
//xianshi(0,1,p+16);
EA=1;
  ET0=1;
TMOD=0x01;
TH0=(65535-50000)/256;//如果不准可对其进行修改,比如4000可能更准确  TL0=(65535-50000)%256;
TL0=(65535-50000)%256;  TR0=1;
  while(1)
   {
     write_cmd(0x80|1); //1000 0001  相与有1则一 这个是时的位置
   
     write_data(dis2[shi]); //dis2[]1-9数组名字 这个是时的显示
     
     write_cmd(0x80|2);//10000010 也就是十六进制0x82代表时的个位显示位置
     
     write_data(dis2[shi1]);//1-9数组选择小时的个位
     
     write_cmd(0x80|3);//地址0x83 在这个地址上写
   
     write_data(p[0]);//数据为第二个数组的0位 这个数组就一个-符号

     write_cmd(0x80|4); //地址0x84  也就是分的十位
     
     write_data(dis2[fen1]); //写数据函数 写数组制定数据到分的十位
     
     write_cmd(0x80|5);
   
     write_data(dis2[fen]);
     
     write_cmd(0x80|6);
   
     write_data(p[0]);

     write_cmd(0x80|7);
     
     write_data(dis2[miao1]);
       
     write_cmd(0x80|8);
     write_data(dis2[miao]);
    }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表