收藏 分销(赏)

掉电记忆程序.doc

上传人:w****g 文档编号:1806098 上传时间:2024-05-09 格式:DOC 页数:16 大小:426.50KB 下载积分:8 金币
下载 相关 举报
掉电记忆程序.doc_第1页
第1页 / 共16页
掉电记忆程序.doc_第2页
第2页 / 共16页


点击查看更多>>
资源描述
. 三:功能 //基于mcs51-u的按键计数器(产品计数器,含掉电记忆) //功能:s1用于加计数,s2用于计数归零;s3用于减计数 #include <reg51.h> unsigned int Count; //*************键盘子程序************* sbit pl= P3^6;         //165锁存 sbit clk_j=P3^7;         //165时钟 sbit Do= P3^5;         //165串口数据 unsigned char bdata key;                         sbit s1=key^0;      sbit s2=key^1; sbit s3=key^2; sbit s4=key^3; sbit s5=key^4; sbit s6=key^5; sbit s7=key^6; sbit s8=key^7;     Readkey() {  unsigned char i;  clk_j=0;  pl=0;  pl=1;  for(i=0;i<8;i++)   {key<<=1;           key|=(bit)Do;    clk_j=1;    clk_j=0;   } } //*************以上键盘子程序*************** //*************以下数码管显示子程序********* sbit dat=P1^0;    //定义驱动74595的数据脚为p1.0 sbit clk=P1^1;    //74595的时钟 sbit lat=P1^2;    //栓锁 sbit  gw=P1^3;    //个位显示控制脚 sbit  sw=P1^4;    //十位 sbit  bw=P3^3;    //百位 sbit  qw=P3^4;    //千位 //------字表------------------------------ unsigned char code tab[]= { 0x3F,0x06,0x5B,0x4F,    //"0","1","2","3"   0x66,0x6D,0x7D,0x07,    //"4","5","6","7"   0x7F,0x6F,0x77,0x7c,    //"8","9","A","B"   0x39,0x5e,0x79,0x71,    //"C","D","E","F" } ; //------显示延时-------------------------- ds1ms() {  unsigned char d;    for(d=0;d<250;d++); } //------74HC595段输出循环------------------------- dsout(unsigned char j) {  unsigned char i;  for(i=0;i<8;i++)     {      dat=j&0x80;       //提取高位      clk=1;      clk=0;      j<<=1;     }   lat=1;   lat=0;               //锁存 } //----74HC595位输出循环-------------------- display(unsigned char sjqw,sjbw,sjsw,sjgw) {   dsout(tab[sjgw]);   //查表得到数据段码送显示   gw=0;   ds1ms();   gw=1;   dsout(tab[sjsw]);   sw=0;   ds1ms();   sw=1;   dsout(tab[sjbw]);   bw=0;   ds1ms();   bw=1;   dsout(tab[sjqw]);   qw=0;   ds1ms();   qw=1; } //********************以上数码管显示子程序*******   /**********以下2402读写子程序**************/ sbit WP=P2^1;        //写保护 sbit SCL=P2^2;       //2402 IO 口定义 sbit SDA=P2^3; #define W_cmd 0xa0   //写指令 #define R_cmd 0xa1   //读指令 void Dely24(void) {unsigned char i;    for(i=0;i<6;i++); } //************************************* void Dely24_10ms(void) {unsigned int i;    for(i=0;i<500;i++); } //***************24x02开始程序********************** void star24(void)      { Dely24();   SDA=0;              Dely24();   SCL=0;   Dely24();           } //***************24停止程序*********************** void stop24(void) { Dely24();   SCL=1;   Dely24();   SDA=1;   Dely24();           } //********************************  unsigned char ReadByte(void) {     unsigned char i,j;     for(i=0;i<8;i++)      //循环读8位       {            SDA=1;         //置高,不影响后续读取            Dely24();            SCL=1;            Dely24();            j<<=1;            j|=(bit)SDA;   //读1位            Dely24();            SCL=0;            Dely24();            }            SDA=0;       return(j); } //*********************************** void SendByte(unsigned char SendDat) {    unsigned char i,j;    for(i=0;i<8;i++)       //循环8次     {j=SendDat;      SDA=j&0x80;          //送出1位      Dely24();      SCL=1;      Dely24();      SCL=0;      SendDat<<=1;         //为下一位做准备     }    SDA=1;    Dely24();    SCL=1;    Dely24();    while(SDA==1);         //等待应答    SCL=0;    Dely24();    SDA=0;    Dely24(); } //****写一字节********************************* void WriIIC(unsigned char Wcmd,add,dat) {    SDA=1;    SCL=1;    Dely24();    star24();            //开始    SendByte(Wcmd);      //命令    SendByte(add);       //地址    SendByte(dat);       //数据    stop24();    Dely24_10ms(); } //****读一字节************************************ unsigned char ReadIIC(unsigned char Wcmd,add,Rcmd) {      unsigned char i;    SDA=1;    SCL=1;    Dely24();    star24();            //开始    SendByte(Wcmd);      //命令    SendByte(add);       //地址    SDA=1;    SCL=1;    star24();    SendByte(Rcmd);      //读取    i=ReadByte();    stop24();      return(i);  } //***************以上24读写子程序******************* //***********开关延时*********** void delay10ms(void)      {            unsigned char i,j;            for(i=20;i>0;i--)            for(j=248;j>0;j--);            } //************************************************* void main(void) {        WP=1;        Count=0;        Count=ReadIIC(W_cmd,0x00,R_cmd)+ReadIIC(W_cmd,0x01,R_cmd)*256;     // 读0x00,0X01地址数据送Count       while(1)                  {                  Readkey();                  display(Count/1000,Count%1000/100,Count%1000%100/10,Count%10);          if(s1==0)                {                                                delay10ms();                                                      if(s1==0)       //加计数程序                              {                                            Count++;                                                                        if(Count==10000)                                    {                                                Count=0;                                    }                                    delay10ms();                                  WP=0;                             // 允许写。                                    WriIIC(W_cmd,0x00,Count%256);                                     delay10ms();                                     WriIIC(W_cmd,0x01,Count/256);                                     delay10ms();                                     WP=1;                                     while(s1==0)                                           {                                          Readkey();                                          display(Count/1000,Count%1000/100,Count%1000%100/10,Count%10);                                     }                                                                }                 }                    if(s2==0)   //归零程序                    {                                Count=0;                              WP=0;                                                          WriIIC(W_cmd,0x00,0);                             delay10ms();                              WriIIC(W_cmd,0x01,0);                           delay10ms();                              WP=1;                    }          if(s3==0)     //减计数程序                {                                                delay10ms();                                                      if(s3==0)                              {                                            Count--;                                                                        if(Count>=10000)                                    {                                                Count=0;                                    }                                    delay10ms();                                  WP=0;                                                              WriIIC(W_cmd,0x00,Count%256);                                     delay10ms();                                     WriIIC(W_cmd,0x01,Count/256);                                     delay10ms();                                     WP=1;                                     while(s3==0)                                           {                                          Readkey();                                          display(Count/1000,Count%1000/100,Count%1000%100/10,Count%10);                                     }                                                                }                 }           } } 精选范本
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服