久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4478|回復: 9
收起左側

[討論]51單片機高手能看懂的!能解答的!!

[復制鏈接]
ID:40829 發表于 2012-5-25 12:42 | 顯示全部樓層 |閱讀模式
這里有三個程序,
一個main主程序,兩個子程序,分別是計時用的DS1302芯片,LCD顯示模塊。
主要功能 :
通過LCD顯示電機轉速、顯示DS1302芯片的時間,通過控制電路按鍵切換實現顯示切換,控制電機加速、減速功能。
 
求真正的高手給出本程序流程執行框圖。 不勝感激!!框圖可以發給我 gangbanfsk@foxmail.com
 
附帶兩張仿真圖:    

 

 

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:44 | 顯示全部樓層

這是程序內容

Main

#include <reg52.h>

#include "lcd1602.h"

#include "ds1302.h"

uchar phase; //電機4相的變換

uchar second ; //時間的計數

uchar change ; //設置電機轉速的中斷標志

uchar state ; //中斷源的選擇狀態

uchar speed=40 ; //電機初始的速度

uchar speed_up,slow_down; //電機的加速與減速

uchar mot_spee1[]={" The Speed is "};

uchar mot_spee2[]={" 000 r/min "};

// uchar four_single[]={0x01,0x02,0x04,0x08}; //4拍模式

uchar four_double[]={0x0c,0x06,0x03,0x09}; //4拍模式

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:45 | 顯示全部樓層
 

void init_break()                                                          //中斷初始化函數

{

       TMOD=0x11;

       TH0=0x00;

       TL0=0x00;

       TH1=(65536-5000)/256;                                               //定時5ms

       TL1=(65536-5000)%256;

       ET0=1;

       ET1=1;

       IT0=1;

       EX0=1;

       IT1=1;

       EX1=1;

       EA=1;

       TR0=1;

       TR1=1;

}

 

void main()

{

       init_break();

       lcd_init();

       set_time();

       while(1)

       {

              read_time();

              display();

       }

}

 

void int0()interrupt 0

{

       state=P1;

}

 

void int1()interrupt 2

{    

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:45 | 顯示全部樓層
 

uchar value  ;                                                               //電機的轉速

       value=60000000/(second*65536+TH0*256+TL0)+1;

       second=0;      

       TH0=0x00;

       TL0=0x00;

       mot_spee2[4]=value/100+'0';

       mot_spee2[5]=value%100/10+'0';

       mot_spee2[6]=value%100%10+'0';

}

 

void timer()interrupt 1

{    

       second++;

}

 

void timer1()interrupt 3

{

       TH1=(65536-5000)/256;                                               //定時5ms

       TL1=(65536-5000)%256;

       change++;

       if(change>=speed)

       {    

              change=0;

              P2=four_double[phase];                                  //電機以雙4拍的模式轉動

       //     P2=single_four[phase];                                   //電機以單4拍的模式轉動

              phase=++phase&0x03;

       }

}

 

 

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:47 | 顯示全部樓層

Ds1302

      #include<reg52.h>

#include<intrins.h>

#include "ds1302.h"

 

extern uchar clk_xian1[];                                                       //存放時鐘的數據

extern uchar clk_xian2[];

uchar time[]       ={12,3,28,17,46,30};

uchar write_add[]  ={0x8c,0x88,0x86,0x84,0x82,0x80};  //年月日時分秒的地址(寫)

uchar read_add []  ={0x8d,0x89,0x87,0x85,0x83,0x81};  //年月日時分秒的地址(讀)

 

void write_byte(uchar dat)

{

       uchar i;

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

       {

              clk=0;

              io=dat&0x01;                                                    

              dat=dat>>1;                                                            //從數據的低位開始寫

              clk=1;

       }

}

 

void write(uchar add,uchar date)

{

       rst=0;

       _nop_();

       clk=0;

       _nop_();

       rst=1;

       _nop_();

       write_byte(add);

       write_byte(date);

       rst=0;

       _nop_();

       clk=1;

       io=1;

}

 

uchar read(uchar addr)

{

       uchar i,temp;

       rst=0;

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:48 | 顯示全部樓層
 

_nop_();

       clk=0;

       _nop_();

       rst=1;

       _nop_();

       write_byte(addr);

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

       {

              clk=0;

              temp=temp>>1;

              if(io)

                     temp=temp|0x80;

              clk=1;    

       }

       rst=0;

       _nop_();

//     clk=0;

       _nop_();

//     clk=1;

       _nop_();

//     io=0;

       _nop_();

       io=1;

       return temp;

}

 

void set_time()

{    

        uchar i,j;

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

        {

              j=time/10;                                                            //數據轉換成BCD

               time=time%10;

               time=time+j*16;

        }

        write(0x8e,0x00);                                                           //去除寫保護

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

        {

               write(write_add,time);

        }

        write(0x8e,0x80);                                                         //加上寫保護

}

 

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:48 | 顯示全部樓層
 

void read_time()

{

uchar i;

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

{

time=read(read_add);

}

clk_xian1[7]=time[0]%16+'0'; //時鐘數據送入液晶

clk_xian1[6]=time[0]/16+'0';

clk_xian1[10]=time[1]%16+'0';

clk_xian1[9]=time[1]/16+'0';

clk_xian1[13]=time[2]%16+'0';

clk_xian1[12]=time[2]/16+'0';

clk_xian2[7]=time[3]%16+'0';

clk_xian2[6]=time[3]/16+'0';

clk_xian2[10]=time[4]%16+'0';

clk_xian2[9]=time[4]/16+'0';

clk_xian2[13]=time[5]%16+'0';

clk_xian2[12]=time[5]/16+'0';

}

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:50 | 顯示全部樓層

Lcd1632

       #include<reg52.h>

#include"lcd1602.h"

 

extern uchar state ;

extern uchar speed ;                                       //電機初始的速度

extern uchar speed_up,slow_down;                          //電機的加速與減速

extern uchar mot_spee1[];

extern uchar mot_spee2[];

uchar *t1,*t2;                                                                      //換屏顯示

uchar clk_xian1[]="Date: 00-00-00  ";                                 //初始時鐘

uchar clk_xian2[]="Time: 00:00:00  ";

 

void delay(uchar i)

{

       uchar j,m;

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

              for(m=0;m<50;m++);

}

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:51 | 顯示全部樓層
 

void write_com(uchar com)

{

       rs=0;

       rw=0;

       P0=com;

       delay(5);

       e=1;

       delay(5);

       e=0;

}

 

void write_data(uchar date)

{

       rs=1;

       rw=0;

       P0=date;

       delay(5);

       e=1;

       delay(5);

       e=0;

}

 

void lcd_init()

{    

       write_com(0x38);

       write_com(0x06);

       write_com(0x0c);  

       write_com(0x01);

}

void basic_display()

{

       uchar i;

       write_com(0x80);

       for(i=0;*t1!=0;i++)

       {

              write_data(*t1);

              t1++;

       }

       write_com(0xc0);

       for(i=0;*t2!=0;i++)

       {

              write_data(*t2);

              t2++;

回復

使用道具 舉報

ID:40829 發表于 2012-5-25 12:51 | 顯示全部樓層
 

       }

}       

 

void display()                                                 

{

       switch(state)

       {

              case 0:  t1=&mot_spee1; t2=&mot_spee2;  break;

              case 1:  t1=&clk_xian1; t2=&clk_xian2;  break;

              case 2:     speed_up   =1;   state=0;        break;

              case 3:     slow_down  =1;  state=0;        break;

       }

       if(speed_up)                                                                       //電機的加速處理

       {

              speed--;

              speed_up=0;

       }

       if(slow_down)                                                                         //電機的減速處理

       {

              speed++;

              slow_down=0;

       }

       basic_display();

}

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品在线视频 | www.黄色在线观看 | 欧美男人的天堂 | 久久天堂 | www.色婷婷| 国产偷录叫床高潮录音 | 国产欧美精品一区二区三区 | 久久久久国产 | 精品国产欧美一区二区三区成人 | 欧美一区二区三区在线观看 | 亚洲欧美视频一区 | 国产免费高清 | 中文字幕免费在线 | 欧美一区二区三区在线 | 欧美视频在线看 | 夜夜爽99久久国产综合精品女不卡 | 久久国产免费看 | 色综合国产 | 夜夜骑av| 亚洲精品视频在线 | 欧美性影院 | 国产午夜精品视频 | 一级毛片在线视频 | 欧美一区二区三区大片 | 999久久久 | 国产精品a级 | av中文字幕在线观看 | 国产精品一区二区在线播放 | 亚洲一二三在线 | 久久与欧美 | 欧美精品在线一区 | 欧美激情国产精品 | 国产ts一区| 亚洲性网| 国产精品视频入口 | 成人自拍视频 | 盗摄精品av一区二区三区 | 91精品国产乱码久久久久久久久 | 91精品久久久 | 国产免费xxx | 日日干日日 |