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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4159|回復: 7
收起左側

求大家指導將點焊機單片機程序改為99個擋

  [復制鏈接]
ID:126608 發表于 2018-10-11 09:47 | 顯示全部樓層 |閱讀模式
原程序是本壇下的點焊機程序,只有1個數碼管10個擋,自己用2個數碼管
改為20個擋,想改為99個擋,不會了,求大家指導將程序改為99個擋,
2個數碼管靜態的動態的都可以,共陰共陽都行。/
#include "reg51.h"               //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u20;        //對數據類型進行聲明定義
typedef unsigned char u10;      //對數據類型進行聲明定義
sbit P31=P3^0;//數碼管第1位
sbit P30=P3^1;//數碼管第2位
sbit k1=P3^2;        //將單片機的P3.2端口定義為檔位上
sbit k2=P3^3;        //將單片機的P3.3端口定義為檔位下
sbit k3=P3^4;        //將單片機的P3.4端口定義為手控
sbit k4=P3^5;        //將單片機的P3.5端口定義為腳踏
sbit out=P3^7;         //繼電器輸出
//數碼管真值表//
u10 code LED_CODE[20]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                            0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};//顯示0~20的值
//延時函數 //
void delay(u20 x)
        {
        u20 i,j;
            for(i = x; i > 0; i --)
                for(j = 110; j > 0; j --);        
        }
//主函數//
void main()
    {
      
        u10 i = 1;
              out=1;
        while(1)
        {
        P2 = LED_CODE[ i];
P31=0;
                                   if(i>=10)
       P30=0;
       P1 =0x06;            
       if(i<10)
       P30=1;
              if(i<0)
       i=19;                                          
            
                                   if(k1==0)
            {
        delay(5);
                if(k1==0)
                    {
                        while(!k1)      //檔位功能0-9
                        delay(5);
                        P2 = LED_CODE;
                        i = (i + 1) % 20;
                        delay(10);
                    }
                                                                     
            }
                      if(k2==0)
            {
              delay(5);
                if(k2==0)
                    {
                        while(!k2)      //檔位功能0-9
                        delay(5);
                        P2 = LED_CODE;
                        i = (i - 1) % 20;
                        delay(10);
                    }
                                   }
            if(k3==0)
            {
            delay(5);
                if(k3==0)
                    {
                        while(!k3)
                        delay(5);
                     out=0;
                        delay(i*200);//手控輸出延時
                        out=1;
                    }
          }
         if(k4==0)
            {
        delay(5);
                if(k4==0)
                    {
                        while(!k4)
                        delay(5);
                     out=0;
                        delay(i*300);//腳蹋輸出延時
                        out=1;
                    }
          }   
   }
}

//這是原程序
#include "reg51.h"               //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;        //對數據類型進行聲明定義
typedef unsigned char u8;        //對數據類型進行聲明定義
sbit k1=P3^2;        //將單片機的P3.2端口定義為檔位上
sbit k2=P3^3;        //將單片機的P3.3端口定義為檔位下
sbit k3=P3^4;        //將單片機的P3.4端口定義為手控
sbit k4=P3^5;        //將單片機的P3.5端口定義為腳踏
sbit out=P3^7;         //繼電器輸出
//數碼管真值表//
u8 code LED_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值
//延時函數 //
void delay(u16 x)
        {
        u16 i,j;
            for(i = x; i > 0; i --)
                for(j = 110; j > 0; j --);        
        }
//主函數//
void main()
    {
      
        u8 i = 1;
              out=0;
        while(1)
        {
        P1 = LED_CODE;
            if(k1==0)
            {
        delay(5);
                if(k1==0)
                    {
                        while(!k1)      //檔位功能0-9
                        delay(5);
                        P1 = LED_CODE;
                        i = (i + 1) % 10;
                        delay(10);
                    }
            }
                      if(k2==0)
            {
              delay(5);
                if(k2==0)
                    {
                        while(!k2)      //檔位功能0-9
                        delay(5);
                        P1 = LED_CODE;
                        i = (i - 1) % 10;
                        delay(10);
                    }
                                   }
            if(k3==0)
            {
            delay(5);
                if(k3==0)
                    {
                        while(!k3)
                        delay(5);
                     out=1;
                        delay(i*200);//手控輸出延時
                        out=0;
                    }
          }
         if(k4==0)
            {
        delay(5);
                if(k4==0)
                    {
                        while(!k4)
                        delay(5);
                     out=1;
                        delay(i*300);//腳蹋輸出延時
                        out=0;
                    }
          }   
   }
}

回復

使用道具 舉報

ID:258566 發表于 2018-10-11 14:57 | 顯示全部樓層
本帖最后由 cccc888 于 2018-10-11 16:15 編輯

沒過零檢測.建議使用過零檢測 計數一次.

my.gif

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:213173 發表于 2018-10-11 17:48 | 顯示全部樓層
在你的程序基礎上給你改寫,使用定時器精確控制,最大范圍1~99,定時時間手動可以從20~1980毫秒,腳踏可以從30~2970毫秒。手動/腳踏開關自鎖與互鎖。經仿真無誤。

#include "reg51.h"       //此文件中定義了單片機的一些特殊功能寄存器
typedef unsigned int u16;//對數據類型進行聲明定義
typedef unsigned char u8;//對數據類型進行聲明定義
sbit P30=P3^0;                        //數碼管第1位
sbit P31=P3^1;                        //數碼管第2位
sbit k1=P3^2;        //將單片機的P3.2端口定義為檔位上
sbit k2=P3^3;        //將單片機的P3.3端口定義為檔位下
sbit k3=P3^4;        //將單片機的P3.4端口定義為手控
sbit k4=P3^5;        //將單片機的P3.5端口定義為腳踏
sbit out=P3^7;       //繼電器輸出
//數碼管真值表//
u8 code LED_CODE[]={//顯示0~F的段碼
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
u16 Cntms1=0,Cntms2=0,num1,num2;
u8 num;                //定時變量=毫秒
//延時函數 //
void delay(u16 x)
{
        u16 i,j;
        for(i=x;i>0;i--)
                for(j=110;j>0;j--);        
}
void Timer0Init() //1毫秒@12.000MHz
{
        TMOD= 0x01;                //設置定時器模式
        TL0 = 0x18;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
        TR0 = 1;                        //定時器0開始計時
        EA=1;                                //開總中斷
        ET0=1;                        //開定時器0中斷
}
/********************************
                數碼管動態顯示程序
********************************/
void display()
{
        static u8 i=0;
        P1=0x00;//消隱
        if(i==0)
        {
                P31=1;
                P30=0;
                P1=LED_CODE[num/10];
                i=1;
        }
        else
        {
                P30=1;
                P31=0;
                P1=LED_CODE[num%10];
                i=0;
        }
}
//主函數//
void main()
{       
        out=0; //初始化輸出端口
        num=20;//定時變量賦初值
        Timer0Init();//初始化定時器
        while(1)
        {
                if(k1==0)//加數
                {
                        delay(5);
                        if(k1==0)
                        {
                                if(num<99)
                                        num++;
                                while(!k1);      //檔位功能1-99
                        }
                }
                if(k2==0)//減數
                {
                        delay(5);
                        if(k2==0)
                        {
                                if(num>1)
                                        num--;
                                while(!k2);      //檔位功能1-99
                        }
                }
                if((k3==0)&&(num1==0)&&(num2==0))//手動/腳踏開關自鎖與互鎖
                {
                        delay(5);
                        if(k3==0)
                        {
                                num1=num*20;//num1=num毫秒*20倍,20~1980毫秒
                                while(!k3);
                        }
                }
                if((k4==0)&&(num2==0)&&(num1==0))//手動/腳踏開關自鎖與互鎖
                {
                        delay(5);
                        if(k4==0)
                        {
                                num2=num*30;//num2=num毫秒*30倍,30~2970毫秒
                                while(!k4);
                        }
                }   
        }
}
/******************************
                中斷服務程序
******************************/
void timer0() interrupt        1        //1毫秒@12MHz
{

        TL0 = 0x18;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
        if(num1!=0)//執行手動
        {
                out=1;
                Cntms1++;       
                if(Cntms1>=num1)
                {       
                        Cntms1=0;
                        out=0;
                        num1=0;
                }
        }
        if(num2!=0)//執行腳踏
        {
                out=1;
                Cntms2++;       
                if(Cntms2>=num2)
                {       
                        Cntms2=0;
                        out=0;
                        num2=0;
                }
        }
        display();//數碼管動態顯示
}



無標題.jpg

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:7485 發表于 2018-10-11 18:25 | 顯示全部樓層
你要求這么多檔位,51單片機沒有這么多的腳輸出,需要擴展IO。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:126608 發表于 2018-10-11 19:19 | 顯示全部樓層
問題解決了,用您給的程序和仿真圖仿真了,大體能看懂程序,多謝了。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:462163 發表于 2019-1-5 17:25 | 顯示全部樓層
斷電了再開機,設置的時間數據能保存嗎?
回復

使用道具 舉報

ID:865461 發表于 2021-1-12 16:50 | 顯示全部樓層
裝在開發板上正常運行效果很好
回復

使用道具 舉報

ID:865461 發表于 2021-1-12 16:52 | 顯示全部樓層
wulin 發表于 2018-10-11 17:48
在你的程序基礎上給你改寫,使用定時器精確控制,最大范圍1~99,定時時間手動可以從20~1980毫秒,腳踏可以 ...

已經裝在開發板上效果很好
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区在线播放 | 亚洲一区二区三区免费观看 | 国产真实精品久久二三区 | 日韩在线精品 | 观看av | 成人不卡 | 国产欧美精品 | 国产精品高潮呻吟久久 | 日本高清aⅴ毛片免费 | 国产精品久久久久久久粉嫩 | 色综合美女 | japanhdxxxx裸体| 精品国产免费人成在线观看 | 欧美一二三 | 亚洲3级| 九九热在线观看 | 亚洲综合一区二区三区 | 男女激情网站免费 | 免费看黄色片 | 麻豆精品国产91久久久久久 | 天天操操| 91社区在线观看高清 | 日本小视频网站 | 精品国产乱码久久久久久闺蜜 | 久久这里只有精品首页 | 国产高清在线精品一区二区三区 | 日韩中文字幕 | 天堂va在线| 国产精品久久久久久久毛片 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 成人午夜在线观看 | 不卡一二区 | 国产二区视频 | 久久久青草婷婷精品综合日韩 | 亚洲一区国产 | 国产一区二区免费电影 | 在线成人www免费观看视频 | 亚洲成人毛片 | 欧美mv日韩mv国产网站91进入 | 超碰最新在线 | 国产成人综合在线 |