掉电记忆程序.docx
- 文档编号:25704021
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:19
- 大小:382.66KB
掉电记忆程序.docx
《掉电记忆程序.docx》由会员分享,可在线阅读,更多相关《掉电记忆程序.docx(19页珍藏版)》请在冰豆网上搜索。
掉电记忆程序
三:
功能
//基于mcs51-u的按键计数器(产品计数器,含掉电记忆)
//功能:
s1用于加计数,s2用于计数归零;s3用于减计数
#include
unsignedintCount;
//*************键盘子程序*************
sbitpl=P3^6; //165锁存
sbitclk_j=P3^7; //165时钟
sbitDo=P3^5; //165串口数据
unsignedcharbdatakey;
sbits1=key^0;
sbits2=key^1;
sbits3=key^2;
sbits4=key^3;
sbits5=key^4;
sbits6=key^5;
sbits7=key^6;
sbits8=key^7;
Readkey()
{
unsignedchari;
clk_j=0;
pl=0;
pl=1;
for(i=0;i<8;i++)
{key<<=1;
key|=(bit)Do;
clk_j=1;
clk_j=0;
}
}
//*************以上键盘子程序***************
//*************以下数码管显示子程序*********
sbitdat=P1^0; //定义驱动74595的数据脚为p1.0
sbitclk=P1^1; //74595的时钟
sbitlat=P1^2; //栓锁
sbit gw=P1^3; //个位显示控制脚
sbit sw=P1^4; //十位
sbit bw=P3^3; //百位
sbit qw=P3^4; //千位
//------字表------------------------------
unsignedcharcodetab[]=
{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()
{
unsignedchard;
for(d=0;d<250;d++);
}
//------74HC595段输出循环-------------------------
dsout(unsignedcharj)
{
unsignedchari;
for(i=0;i<8;i++)
{
dat=j&0x80; //提取高位
clk=1;
clk=0;
j<<=1;
}
lat=1;
lat=0; //锁存
}
//----74HC595位输出循环--------------------
display(unsignedcharsjqw,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读写子程序**************/
sbitWP=P2^1; //写保护
sbitSCL=P2^2; //2402IO口定义
sbitSDA=P2^3;
#defineW_cmd0xa0 //写指令
#defineR_cmd0xa1 //读指令
voidDely24(void)
{unsignedchari;
for(i=0;i<6;i++);
}
//*************************************
voidDely24_10ms(void)
{unsignedinti;
for(i=0;i<500;i++);
}
//***************24x02开始程序**********************
voidstar24(void)
{Dely24();
SDA=0;
Dely24();
SCL=0;
Dely24();
}
//***************24停止程序***********************
voidstop24(void)
{Dely24();
SCL=1;
Dely24();
SDA=1;
Dely24();
}
//********************************
unsignedcharReadByte(void)
{
unsignedchari,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);
}
//***********************************
voidSendByte(unsignedcharSendDat)
{
unsignedchari,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();
}
//****写一字节*********************************
voidWriIIC(unsignedcharWcmd,add,dat)
{
SDA=1;
SCL=1;
Dely24();
star24(); //开始
SendByte(Wcmd); //命令
SendByte(add); //地址
SendByte(dat); //数据
stop24();
Dely24_10ms();
}
//****读一字节************************************
unsignedcharReadIIC(unsignedcharWcmd,add,Rcmd)
{
unsignedchari;
SDA=1;
SCL=1;
Dely24();
star24(); //开始
SendByte(Wcmd); //命令
SendByte(add); //地址
SDA=1;
SCL=1;
star24();
SendByte(Rcmd); //读取
i=ReadByte();
stop24();
return(i);
}
//***************以上24读写子程序*******************
//***********开关延时***********
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--);
}
//*************************************************
voidmain(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);
}
}
}
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 掉电 记忆 程序