已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
代码  功能  1602   看门小时狗, 定时器, 步进电机 2相6线2拍半控制法,加速起动过程,


#include <reg51.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char

typedef unsigned char BYTE;
typedef unsigned int WORD;
typedef bit BOOL ;
unsigned char aa,b2,d1,d11,d12;
unsigned int m,m1,m2,ty,s1,m1,h1,a2,ty1,dsrw,bb,a1,i1,b1;
void akey(void);
void delaymma(uint z);
void delay(BYTE ms);
void delay2(void);
void wy(void);
void xs(void);

sbit key1 = P3^2;    
sbit key2 = P3^3;
sbit key3 = P3^4;
sbit key4 = P3^5;
sbit key5 = P3^6;
sbit key6 = P3^7;
sbit rs    = P2^0;        //
sbit rw = P2^1;
sbit ep = P2^2;
sfr WDT_COUTR = 0xc1; //小狗狗起床了

BYTE code  dis_code[11]={"01234567890"};
unsigned char data   dis_buf[8];
unsigned char data   dis_buf2[2];
//uchar xdata cl[4][20]={{1,2,3,0},{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}};
BYTE code dis1[] = {"||  Greenbird ||"};
BYTE code dis2[] = {"||    JRCSH   ||"};


uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //P10~3. P20-3
uchar code FFW[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //P10~3. P20-3
//uchar code REV1[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; ////P14~7.
//uchar code fj2[8]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10}; ////P14~7.


uchar rate ;

void delay(BYTE ms)
{                            // 延时子程序
    BYTE i;
    while(ms--)
    {
        for(i = 0; i< 250; i++)
        {
            _nop_();
            _nop_();
            _nop_();
            _nop_();
        }
    }
}

BOOL lcd_bz()
{                            // 测试LCD忙碌状态
    BOOL result;
    rs = 0;
    rw = 1;
    ep = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    result = (BOOL)(P0 & 0x80);
    ep = 0;
    return result;    
}

lcd_wcmd(BYTE cmd)
{                            // 写入指令数据到LCD
    while(lcd_bz());
    rs = 0;
    rw = 0;
    ep = 0;
    _nop_();
    _nop_();    
    P0 = cmd;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 0;        
}

lcd_pos(BYTE pos)
{                            //设定显示位置
    lcd_wcmd(pos | 0x80);
    WDT_COUTR =0X3f; //3F <10S  //0X3C < 1S//小狗狗乖
}

lcd_wdat(BYTE dat)    
{                            //写入字符显示数据到LCD
    while(lcd_bz());
    rs = 1;
    rw = 0;
    ep = 0;
    P0 = dat;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    ep = 0;    
}

lcd_init()
{                            //LCD初始化设定
    lcd_wcmd(0x38);            //
    delay(1);
    lcd_wcmd(0x0c);            //
    delay(1);
    lcd_wcmd(0x06);            //
    delay(1);
    lcd_wcmd(0x01);            //清除LCD的显示内容
    delay(1);
}
void delay2()
{                          
   uchar k,t;
   k = rate;
   t = 0x00;

   do{
       do{ _nop_();_nop_();_nop_();_nop_();
             _nop_();_nop_();_nop_();_nop_();
         }while(--t);
        
     }while(--k);
}
/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{
   uchar i;

      for (i=0; i<8; i++)     //一个周期转30度
        {
          P1 = FFW[i];        //取数据
          delay2();            //调节转速
        }
}

/********************************************************
*                                                      
*  主程序                                              
*                                                      
*********************************************************/

main()
{  
BYTE i;
    lcd_init();                // 初始化LCD            
delay(10);
delaymma(7);
for(m=0;m<3;m++)
{
    lcd_pos(0);                // 设置显示位置为第一行的第5个字符
    i = 0;
    while(dis1[i] != '\\0')
    {                        // 显示字符"jrcsh"
        lcd_wdat(dis1[i]);
        i++;
    }



    lcd_pos(0x40);            // 设置显示位置为第二行第二个字符
    i = 0;
    while(dis2[i] != '\\0')
    {
        lcd_wdat(dis2[i]);    // 显示字符"   jrcsh@qq   "
        i++;
    }
delaymma(800);
for(i=0;i<80;i++)
{
lcd_pos(i);
    lcd_wdat(' ');
}
delaymma(560);
}// for m
lcd_pos(0);                // 设置显示位置为第一行的第5个字符
    i = 0;
    while(dis1[i] != '\\0')
    {                        // 显示字符"jrcsh"
        lcd_wdat(dis1[i]);
      delaymma(100);
        i++;
    }



    lcd_pos(0x40);            // 设置显示位置为第二行第二个字符
    i = 0;
    while(dis2[i] != '\\0')
    {
        lcd_wdat(dis2[i]);    // 显示字符"   jrcsh@qq   "
delaymma(200);
        i++;
    }
delaymma(800);
for(i=0;i<80;i++)
{
lcd_pos(i);
    lcd_wdat(' ');
}

                    // 显示"-"
TMOD = 0x11;
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1;//开定时器0中断
TH0 = 0x28;
TL0 = 0x00;
TH1 = 0x28;
TL1 = 0x00;
TR1=1;
TR0=1;//定时器开
//TR0=0;//停定时器0
P1=0xff;
d1=1;

m2=0;
m1=0;
h1=0;
s1=0;
a1=0;
a2=1;
i1=0;
/*
for(m=0;m<4;m++)
{
for(m1=0;m1<20;m1++)
{
cl[m][m1]=m1+m*10;
}
}
*/
m1=0;
dis_buf[0] = dis_code[h1 / 10];        // 时十位
    dis_buf[1] = dis_code[h1 % 10];        // 时个位
    dis_buf[3] = dis_code[m1 / 10];        // 分十位
    dis_buf[4] = dis_code[m1 % 10];        // 分个位
    dis_buf[6] = dis_code[s1 / 10];        // 秒十位
    dis_buf[7] = dis_code[s1 % 10];        // 秒个位
    dis_buf[2] = ':';                        // 显示"-"
    dis_buf[5] = ':';    
/*
lcd_pos(8);
    lcd_wdat(' ');
lcd_pos(7);
    lcd_wdat(' ');
for(i=64;i<80;i++)
{
lcd_pos(i);
    lcd_wdat(' ');
}
*/
aa=0;  
rate = 0x10;
b1=1;
b2=1;
d1=0;
while(1)                    
{
WDT_COUTR =0X3f; //3F <10S  //0X3C < 1S//小狗狗乖
//---------------------------------------
if(key1==0)
{
aa=99;
}
if(aa==99)
{
b1++;
motor_ffw();  
if(rate>2)
rate--;
}    
if(b1 > 4)
{
if(rate>2)
rate--;
if(key1==1)
{
b1=1;
aa=0;
P1=0xff;
rate = 0x10;
}
}  
//---------------------------------------
//0000000000000000000000000000000000

  
if(a1==0)
{

if(a2==1)
{
lcd_pos(0);

lcd_wdat(' ');
}
if(a2==0)
{
lcd_pos(6);
    lcd_wdat(' ');
}
/*
   lcd_pos(a2);                // 设置显示位置为第一行的第5个字符
    i = 0;
    while(dis1[i] != '\\0')
    {                        // 显示字符"jrcsh"
        lcd_wdat(dis1[i]);
        i++;
    }

    lcd_pos(0x40);            // 设置显示位置为第二行第二个字符
    i = 0;
    while(dis2[i] != '\\0')
    {
        lcd_wdat(dis2[i]);    // 显示字符"  jrcsh@qq  "
        i++;
    }
*/

xs();


/*
lcd_pos(0x43);            // 设置显示位置为第二行第二个字符
    i = 0;
    while(i<4)

    {  
m=dis_code[cl[i][i1] / 10];
        lcd_wdat(m);    // 策略显示
m=dis_code[cl[i][i1] % 10];
        lcd_wdat(m);    // 策略显示
    lcd_wdat('-');
        i++;
    }
*/
a1=1;
}//a1=0
//时间设定部分-----------------------------------
if(key2==0)
{
delaymma(7);
while(!key2)
delaymma(7);
h1++;
xs();
}
if(key3==0)
{
delaymma(7);
while(!key3)
delaymma(7);
h1--;
xs();
}
if(key4==0)
{
delaymma(7);
while(!key4)
delaymma(7);
m1++;
xs();
}
if(key5==0)
{
delaymma(7);
while(!key5)
delaymma(7);
m1--;
xs();
}
if(key6==0)
{
delaymma(17);
while(!key6)
delaymma(17);
d1=0;
xs();
}

//时间设定部分-----------------------------------


//工作记录显示===================================





//工作记录显示===================================


if(s1 > 59)
{
s1=0;
m1++;
dis_buf[3] = dis_code[m1 / 10];        // 分十位
dis_buf[4] = dis_code[m1 % 10];        // 分个位


}


if(m1 > 59)
{
m1=0;
h1++;
dis_buf[0] = dis_code[h1 / 10];        // 时十位
dis_buf[1] = dis_code[h1 % 10];        // 时个位
rate = 0x15;
if(h1<20) //定里处理部分--------------小于21点  大于 6点着手 每小时 放一次 食料 ---------------------
{
if(h1>5)
{
for(m=0;m<170;m++)
{
wy();
}
d1++;
}
}
}
if(h1 > 23)
{
h1=0;
      }
if(a1==0)
{
akey() ;
dis_buf[0] = dis_code[h1 / 10];        // 时十位
dis_buf[1] = dis_code[h1 % 10];        // 时个位
dis_buf[3] = dis_code[m1 / 10];        // 分十位
dis_buf[4] = dis_code[m1 % 10];        // 分个位
}//a1
//0000000000000000000000000000000000000000000
    } // wa
}//ma

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



void delaymma(uint z)
{                
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);    
}


void akey(void)
{
/*
if(key1==0)
{
while(!key1)
a1++;
if(a1 > 99)
{
a1 =0;
}
delaymma(100);
}

if(key2==0)
{
while(!key1)
a1--;
if(a1 < 1)
{
a1 =99;
}
delaymma(100);
}
*/
}


void timer0() interrupt 1
{  
TH0 = 0x28;
TL0 = 0x00;
ty=ty++;
if(ty > 20)
{
ty=0;
s1=s1++;



    

}
}

void timer1() interrupt 3
{
TR1=1;
TH1 = 0x28;
TL1 = 0x00;


ty1=ty1++;
WDT_COUTR =0X3f; //3F <10S  //0X3C < 1S//小狗狗乖

if(ty1 > 20)
{
dis_buf2[0] = dis_code[d1 / 10];        // 时十位
dis_buf2[1] = dis_code[d1 % 10];        // 时个位
dis_buf[6] = dis_code[s1 / 10];        // 秒十位
dis_buf[7] = dis_code[s1 % 10];        // 秒个位
a1=0;
ty1=0;
if(a2==0)
{
a2=1;
}
else
{
a2=0;
}
}
}

  
void wy()
{
WDT_COUTR =0X3f; //3F <10S  //0X3C < 1S//小狗狗乖
motor_ffw();
P1=0xff;  
if(rate>2)
rate--;
}    

void xs()  
{
uchar i;
lcd_pos(8);                // 设置显示位置为第一行的第9个字符
    i = 0;
    while(i<8)
    {                        
        lcd_wdat(dis_buf[i]);
        i++;
    }

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

    lcd_wdat('W');
    lcd_wdat('Y');
    lcd_wdat('=');  
    lcd_wdat(dis_buf2[0]);    // 策略显示
    lcd_wdat(dis_buf2[1]);    // 策略显示

}        



/*
key 1   电机转动
2  小时 ++
3   小时 --
4  分钟 ++
5分钟 --
6 喂食次数 归0

*/
文号 / 258045

千古风流
名片发私信
学术分 4
总主题 494 帖总回复 6744 楼拥有证书:学者 笔友
注册于 2009-01-02 22:19最后登录 2018-01-10 01:36
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步

个人简介

.

文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
插入公式
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
ID: {{user.uid}}