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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2786|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

無線單路可編程遙控帶數(shù)碼管延時程序四位數(shù)碼管顯示倒計時遙控繼電器

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:280979 發(fā)表于 2019-11-17 23:02 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<STC15W408AS.h>                 //庫文件
#include <intrins.H>
#define uchar unsigned char//宏定義無符號字符型
#define uint unsigned int  //宏定義無符號整型
typedef unsigned char  INT8U;
typedef unsigned int   INT16U;
#define ENABLE_ISP 0x82 //系統(tǒng)工作時鐘<20MHz 時,對IAP_CONTR 寄存器設(shè)置此值
#define WD1        0x5a        //使用STC11xx系列單片機(jī)時,先寫入0x5a,然寫入0xa5
#define WD2        0xa5
char IAPAddr=0;
/********************************************************************
                            初始定義
*********************************************************************/
static uint ss=0; //ss為靜態(tài)
uint t=0,smg=0,ge=0,shi=0,bai=0,qian=0,y=0,s=0,j=0,z=0,k=0,a=0,kf=0,zz=0,sd=0,sv=0,so=0,sl=0;
sbit aj1=P3^0; //選位         
sbit aj2=P3^1; //加時間
sbit L1=P3^5; //數(shù)碼管1
sbit L2=P3^4; //數(shù)碼管2
sbit L3=P3^3; //數(shù)碼管3
sbit L4=P3^2; //數(shù)碼管
sbit out = P3^7;   //繼電器
sbit in_1 = P3^6;   //輸入觸發(fā)端
sbit in_2 = P5^4;   //遙控輸入觸發(fā)端
sbit in_3 = P5^5;   //遙控輸入觸發(fā)端
code uchar seg7code[10]={0x6F,0x21,0x8F,0xAB,0xE1,0xEA,0xEE,0x23,0xEF,0xEB}; //顯示段碼 數(shù)碼管字跟
uchar x;
uchar wei=0;
/********************************************************************
                            延時函數(shù)
*********************************************************************/
union union_temp16
{
    INT16U un_temp16;
    INT8U  un_temp8[2];
}my_unTemp16;

INT8U Byte_Read(INT16U add);              //讀一字節(jié),調(diào)用前需打開IAP 功能
void Byte_Program(INT16U add, INT8U ch);  //字節(jié)編程,調(diào)用前需打開IAP 功能
void Sector_Erase(INT16U add);            //擦除扇區(qū)
void IAP_Disable();                       //關(guān)閉IAP 功能
void Delay();
/*******************************************************************
*                        選位按鍵
********************************************************************/
void key_1(){
    if(aj1==0)
         {
           if(ss>220){ ss=0;
                if(aj1==0){
                     z=1;
                      y+=1;//選位標(biāo)志位
                           k=0;                //倒計時標(biāo)志位
                            out=1;         //停止輸出
                           if(y==5){
                             y=0;           //選位標(biāo)志重個位開始重新選
                                 z=0;          //全部顯示
                                 s=sd+sv+so+sl;        //把s值給kf
                                 kf=s;
                                 Sector_Erase(0);   //擦除EEPROM
                                 Byte_Program(1, (sd));  //寫入扇區(qū)
                                 Byte_Program(2, (sv/10));
                                 Byte_Program(3, (so/100));
                                 Byte_Program(4, (sl/1000));
                          }
                        }
                  }
           while(aj1==0);
         }
  }
/*******************************************************************
*                        加按鍵
********************************************************************/
void key_2(){
    if(aj2==0)
         {
           if(ss>220){ ss=0;
                if(aj2==0){
                     if(y==1){          //個位
                                   sd+=1;
                                     if(sd==10){
                                           sd=0;
                                          }
                                    }
                    if(y==2){           //十位
                                   sv+=10;
                                     if(sv==100){
                                          sv=0;
                                         }
                                   }
                        if(y==3){                //百位
                                    so+=100;
                                          if(so==1000){
                                            so=0;
                                          }
                                          }
                         if(y==4){                //百位
                                    sl+=1000;
                                          if(sl>9999){
                                            sl=0;
                                          }
                                   }
                        // if(s>=10000){s=9999;}
                        }
                  }
           while(aj2==0); //按一下加一下
         }
  }
/*******************************************************************
*                        暫停,繼續(xù)按鍵
********************************************************************/
void key_3(){
    if(in_3==1)
         {
           if(ss>220){ ss=0;
                if(in_3==1){
                           zz++;
                         if(zz==1){k=0;out=1;}  
                         if(zz==2){k=1;zz=0;}
                        }
                  }
           while(in_3==1);
         }
  }
/*******************************************************************
*                        定時器配置
********************************************************************/
void ConfigTimer0(){
        TMOD=0x01;//將定時器0,1都設(shè)置為模式1
    TH0=0XFC;//1ms
    TL0=0X66;
        TR0=1;//開啟定時器0
        ET0=1;//開定時器0的中斷
        EA=1;//開總中斷
}

/*******************************************************************
*                         顯示
********************************************************************/
void led(uint date)
{
qian=date/1000;
bai=date%1000/100;
shi=date%100/10;
ge=date%10;
}

/********************************************************************
                            主函數(shù)
*********************************************************************/
void main()
{
     P1M0 = 0xff;
     P1M1 = 0x00;
         //P3M0 = 0x34;
     //P3M1 = 0x00;
         ConfigTimer0();
          // out=0;
           ge= Byte_Read(1);    //讀EEPROM的值,存到read_eeprom  
          shi= Byte_Read(2);    //讀EEPROM的值,存到read_eeprom
          bai= Byte_Read(3);    //讀EEPROM的值,存到read_eeprom
         qian= Byte_Read(4);    //讀EEPROM的值,存到read_eeprom
          s=ge+shi*10+bai*100+qian*1000;
          kf=s;
           while(1)
    {          
           key_1();
            key_2();
                key_3();
                if(in_1==0){         //P3.6口輸入標(biāo)志位
                k=1;
                }
                         if(in_2==1){ //        遙控從新開始計數(shù)
                 k=1;s=kf;zz=0;j=0;
                    }
          if(y==0){led(s);}
          if(y==1){led(sd);}
          if(y==2){led(sv);}
          if(y==3){led(so);}
          if(y==4){led(sl);}
          }
}
/********************************************************************
                            定時中斷服務(wù)函數(shù)
*********************************************************************/
void t0(void) interrupt 1 //定時中斷服務(wù)函數(shù)
{
    TH0=0xFC;
    TL0=0x66;
    ss++;
     if(z==0){
          smg++;
          }
           else{
             smg=y;//讓逐個顯示位
           }          
                if(k==1){
                 out=0;
                    j++;  // 讓毫秒變秒
                         if(j==1000){        //1s
                           s-=1; //減時間
                            j=0;
                         if(s==0){
                           out=1;        //輸出
                            s=kf;         //歸剛剛設(shè)定的值
                             k=0;        //倒計時位歸0
                           }
                         }
                  }
        switch(smg)
        {
          case 1:  P1=seg7code[ge]; L1=1;L2=1;L3=1;L4=0;break;
          case 2:  P1=seg7code[shi]; L1=1;L2=1;L3=0;L4=1;break;
          case 3:  P1=seg7code[bai]; L1=1;L2=0;L3=1;L4=1;break;
          case 4:  P1=seg7code[qian]; L1=0;L2=1;L3=1;L4=1;break;
          default:  smg=0;L1=1;L2=1;L3=1;L4=1; break;
        }
}
       

/*********************************************************************************************
*********************************************************************************************/
//讀一字節(jié),調(diào)用前需打開IAP 功能,入口:DPTR = 字節(jié)地址,返回:A = 讀出字節(jié)
INT8U Byte_Read(INT16U add)
{
    IAP_DATA = 0x00;
    IAP_CONTR = ENABLE_ISP;         //打開IAP 功能, 設(shè)置Flash 操作等待時間
    IAP_CMD = 0x01;                 //IAP/ISP/EEPROM 字節(jié)讀命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //設(shè)置目標(biāo)單元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //設(shè)置目標(biāo)單元地址的低8 位地址

    //EA = 0;
    IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發(fā)寄存器,每次都需如此
    IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發(fā)起動
    _nop_();
    //EA = 1;
    IAP_Disable();  //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài),
                    //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān)
    return (IAP_DATA);
}
/*********************************************************************************************/
//字節(jié)編程,調(diào)用前需打開IAP 功能,入口:DPTR = 字節(jié)地址, A= 須編程字節(jié)的數(shù)據(jù)
void Byte_Program(INT16U add, INT8U ch)
{
    IAP_CONTR = ENABLE_ISP;         //打開 IAP 功能, 設(shè)置Flash 操作等待時間
    IAP_CMD = 0x02;                 //IAP/ISP/EEPROM 字節(jié)編程命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //設(shè)置目標(biāo)單元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //設(shè)置目標(biāo)單元地址的低8 位地址

    IAP_DATA = ch;                  //要編程的數(shù)據(jù)先送進(jìn)IAP_DATA 寄存器
    //EA = 0;
    IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發(fā)寄存器,每次都需如此
    IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發(fā)起動
    _nop_();
    //EA = 1;
    IAP_Disable();  //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài),
                    //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān)
}
/*********************************************************************************************
//擦除扇區(qū), 入口:DPTR = 扇區(qū)地址 */
void Sector_Erase(INT16U add)
{
    IAP_CONTR = ENABLE_ISP;         //打開IAP 功能, 設(shè)置Flash 操作等待時間
    IAP_CMD = 0x03;                 //IAP/ISP/EEPROM 扇區(qū)擦除命令

    my_unTemp16.un_temp16 = add;
    IAP_ADDRH = my_unTemp16.un_temp8[0];    //設(shè)置目標(biāo)單元地址的高8 位地址
    IAP_ADDRL = my_unTemp16.un_temp8[1];    //設(shè)置目標(biāo)單元地址的低8 位地址

    //EA = 0;
    IAP_TRIG = WD1;   //先送 WD1,再送WD2 到ISP/IAP 觸發(fā)寄存器,每次都需如此
    IAP_TRIG = WD2;   //送完WD2 后,ISP/IAP 命令立即被觸發(fā)起動
    _nop_();
    //EA = 1;
    IAP_Disable();  //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài),
                    //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān)
}
/*********************************************************************************************/
void IAP_Disable()
{
    //關(guān)閉IAP 功能, 清相關(guān)的特殊功能寄存器,使CPU 處于安全狀態(tài),
    //一次連續(xù)的IAP 操作完成之后建議關(guān)閉IAP 功能,不需要每次都關(guān)
    IAP_CONTR = 0;      //關(guān)閉IAP 功能
    IAP_CMD   = 0;      //清命令寄存器,使命令寄存器無命令,此句可不用
    IAP_TRIG  = 0;      //清命令觸發(fā)寄存器,使命令觸發(fā)寄存器無觸發(fā),此句可不用
    IAP_ADDRH = 0;
    IAP_ADDRL = 0;
}
/*********************************************************************************************/

無線單路可編程遙控帶數(shù)碼管延時模塊原理圖及PCB圖.rar

251.61 KB, 下載次數(shù): 31, 下載積分: 黑幣 -5

程序包.rar

516.53 KB, 下載次數(shù): 32, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 羞羞网站在线观看 | 超碰在线观看97 | 日韩精品一区二区三区中文字幕 | 亚洲精品女人久久久 | 亚洲成人动漫在线观看 | 亚洲成人免费视频在线观看 | 免费av播放| 精彩视频一区二区三区 | 亚洲精品一区二三区不卡 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 久色激情| 伊人天堂网 | 亚洲欧美在线视频 | 国产乱码久久久久久 | 日韩在线观看一区二区三区 | 最新日韩av| 爱爱综合网 | 亚洲在线 | 五月天婷婷激情 | 91一区| 久热国产在线 | 国产精品久久久久久久7777 | 99久久婷婷国产综合精品电影 | 日韩午夜精品 | 国产精品久久久久久妇女 | 精品国产色 | 国产一区二区黑人欧美xxxx | 伊人久久伊人 | 国产九九av | 日韩欧美电影在线 | 羞羞视频在线免费 | 在线色网 | 精品综合久久久 | 日韩一区二区福利 | 亚洲欧美一区二区三区在线 | 欧美三级久久久 | 成人av在线播放 | 国产黄色大片在线观看 | 国产一级视屏 | 高清国产午夜精品久久久久久 | 天天爱天天操 |