欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3950|回復: 2
收起左側

基于STC12C2052AD單片機設計的帶出發功能數碼管顯示時間繼電器程序包

[復制鏈接]
ID:280979 發表于 2019-11-17 23:55 | 顯示全部樓層 |閱讀模式
//#include<reg52.h>
#include<STC12C2052AD.h>                 //庫文件
#include<intrins.h>
#define uchar unsigned char //宏定義字符型變量
#define uint  unsigned int        //宏定義整型變量

/*聲明 SFR 相關 與 的 IAP*/
sfr IAP_DATA = 0xE2;
sfr IAP_ADDRH = 0xE3;
sfr IAP_ADDRL = 0xE4;
sfr IAP_CMD = 0xE5;
sfr IAP_TRIG = 0xE6;
sfr IAP_CONTR = 0xE7;


/********************************************************************
                             IO口定義
********************************************************************/
uchar s1=0;
bit  write=0;
uint txian,dxian;
uchar txian1,txian2,txian3;
uchar dxian1,dxian2,dxian3;
uchar T0RH=0,T0RL=0;
uint ms=0;
uchar A1,A2,A3;
uchar B1,B2,B3;
uchar C1,C2,C3;
uchar D1,D2,D3;
bit bz1=0;
sbit P10=P1^0;//數碼管段
sbit P11=P1^1;//數碼管段
sbit P12=P1^2;//數碼管段
sbit P13=P1^3;//數碼管段
sbit P14=P1^4;//數碼管段
sbit P15=P1^5;//數碼管段
sbit P16=P1^6;//數碼管段

sbit P17=P3^4;//信號輸入

sbit P30=P3^0;//按鍵輸入
sbit P31=P3^1;//按鍵輸入
sbit P32=P3^2;//數碼管位
sbit P33=P3^3;//數碼管位

sbit P35=P3^5;//數碼管位
sbit P37=P3^7; //繼電器輸出
bit ts=1;
bit yxbz=0;
/********************************************************************
                            定義 ISP/IAP/EEPROM 命令
*********************************************************************/
#define CMD_IDLE 0
#define CMD_READ 1
#define CMD_PROGRAM 2
#define CMD_ERASE 3

#define ENABLE_IAP 0x83//SYSCLK<12MH
#define IAP_ADDRESS 0x0000        //存儲地址


/********************************************************************
禁用 ISP/IAP/EEPROM functionmake 單片機 在 一 安全 狀態
*********************************************************************/
void IapIdle()
{
    IAP_CONTR = 0;           //
        IAP_CMD = 0;           //
        IAP_TRIG = 0;           //
        IAP_ADDRH = 0x80;  //
        IAP_ADDRL = 0;           //
}

/********************************************************************
                             讀數據
*********************************************************************/

uchar IapReadByte(uint addr)
{
   uchar dat;
   IAP_CONTR = ENABLE_IAP;
   IAP_CMD = CMD_READ;
   IAP_ADDRL = addr;
   IAP_ADDRH = addr >> 8;
   IAP_TRIG = 0x46;
   IAP_TRIG = 0xb9;
   _nop_();
   dat = IAP_DATA;
   IapIdle();
   return dat;
}
/********************************************************************
                               寫數據
*********************************************************************/

void IapProgramByte(uint addr, uchar dat)
{
   IAP_CONTR = ENABLE_IAP;
   IAP_CMD = CMD_PROGRAM;
   IAP_ADDRL = addr;
   IAP_ADDRH = addr >> 8;
   IAP_DATA = dat;
   IAP_TRIG = 0x46;
   IAP_TRIG = 0xb9;
   _nop_();
   IapIdle();
}
/********************************************************************
                               擦除數據
*********************************************************************/

void IapEraseSector(uint addr)
{
   IAP_CONTR = ENABLE_IAP;
   IAP_CMD = CMD_ERASE;
   IAP_ADDRL = addr;
   IAP_ADDRH = addr >> 8;
   IAP_TRIG = 0x46;
   IAP_TRIG = 0xb9;
   _nop_();
   IapIdle();
}

/********************************************************************
                            初始定義
*********************************************************************/
//code uchar seg7code[10]={0xfB,0x89,0xf5,0xdD,0x8F,0xdE,0xfE,0xc9,0xfF,0xdF}; //顯示段碼 數碼管字跟
code uchar seg7code[10]={0x7B,0x09,0x75,0x5D,0x0F,0x5E,0x7E,0x49,0x7F,0x5F}; //顯示段碼 數碼管字跟
/********************************************************************
                            延時函數
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=100;j>0;j--);
         { ;
         }
   }
}
/********************************************************************
                            顯示函數 接通時間
*********************************************************************/        
//void tong(uchar tdate) //顯示函數
void tong() //顯示函數
{

          C1=txian/100;
          C2=txian%100/10;
            C3=txian%10;
      P32=1;P33=1;P35=1;
      P1=seg7code[C1];
          P32=0;P33=1;P35=1;
          delay(60);
          P32=1;P33=1;P35=1;  
      P1=seg7code[C2];
          P32=1;P33=0;P35=1;
          delay(60);
          P32=1;P33=1;P35=1;  
             P1=seg7code[C3];
          P32=1;P33=1;P35=0;
          delay(5);

}
                  
void key()
{

   if(P30==0)
   {
   delay(80);
   if(P30==0)
   {
   s1++;
   if(s1>=5){s1=0;}
   while(!P30);
   }
}}


//定時器0初始化
void t0_init(unsigned char ms0)           //ms0最大71
{
        /***********************************************
        一個機器周期=12*時鐘周期。
        11059200為時鐘周期,一共為11059200/12=921600,就是每秒為921600Hz,
    八位定時器 最大計時     0.2777778ms
        十六位定時器最大計時          71.111111ms
        11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。
  65536-9216=56320(dc00)
  TH0=0xdc,TL0=0x00
        ***********************************************/
         long tmp;  //臨時變量
     tmp = 11059200 / 12;
         tmp = (tmp * ms0) / 1000;
         tmp = 65536 - tmp;
         tmp = tmp + 3;
         T0RH = (unsigned char)(tmp>>8);
         T0RL = (unsigned char)tmp;                                          
     TMOD &=0XF0;
         TMOD |=0X01;  //方式一  一共四種方式   GATE0 C/T0  M0_1  M0_0         C/T0選擇時鐘計數還是外部計數  方式0是十三位定時器 ,方式1是十六位定時器,方式2是八位自動 方式4是兩個八位
         TH0=T0RH;
         TL0=T0RL;
         ET0=1;   //使能T0中斷
         EA=1;
         TR0=1;
}
/********************************************************************
                               主函數
*********************************************************************/
void main()

{   

    unsigned char flag=1,flag2=0;;
        txian1 = IapReadByte(0x01);                //讀取0x01中的數據  并附給ca
        txian2 = IapReadByte(0x02);                //讀取0x01中的數據  并附給ca
        txian3 = IapReadByte(0x03);                //讀取0x01中的數據  并附給ca

        t0_init(10);
        P1M0=0X00;P1M1=0X7f;
        txian=txian1*100+txian2*10+txian3;
        P37=1;
        //yxbz=1;ts=0;bz1=1;ms=0;P37=0;
        while(1)
        {

    key();
        if(P17==0){yxbz=1;ts=0;ms=0;P37=0;}
//        if((P17==0)&&(bz1==0)&&(ts==0)){delay(80);if(P17==0){bz1=1;yxbz=!yxbz;}}
        if((P17==0)&&(bz1==0)&&(ts==1)){delay(80);if(P17==0){yxbz=1;ts=0;bz1=1;ms=0;P37=0;}}
//        if((P17==1)&&(bz1==1)){bz1=0;}
    if(write==1)
   {
     TR0=0;                                                                                                                                                                                                                                          
     write=0;
     IapEraseSector(0);
     IapProgramByte(0x01,txian1);
     IapProgramByte(0x02,txian2);
     IapProgramByte(0x03,txian3);
         TR0=1;
  }
        }                 
}
void t0(void) interrupt 1 using 0 //定時中斷服務函數
{
          TH0=T0RH;
        TL0=T0RL;
                 switch (s1){
                  case 0: tong();break;
                     case 1:ts=1;P1=seg7code[A1]; P32=0;P33=1;P35=1;  if(P31==0){A1++;if(A1>9)A1=0;while(!P31);}break;
                  case 2:     P1=seg7code[A2]; P32=1;P33=0;P35=1;  if(P31==0){A2++;if(A2>9)A2=0;while(!P31);}break;
                     case 3:     P1=seg7code[A3]; P32=1;P33=1;P35=0;  if(P31==0){A3++;if(A3>9)A3=0;while(!P31);}break;
                  case 4:     txian1=A1;txian2=A2;txian3=A3;txian=txian1*100+txian2*10+txian3;write=1;break;
                  default: break;
                }

if(yxbz==1)
{
        ms++;
        if(ms==40)  //ms=40是1秒
        {
        ms=0;
        if(ts==0){txian--;if(txian<=0){bz1=0;P37=1;txian=txian1*100+txian2*10+txian3;ts=1;}}
        }
}

       

}

GYJ-0072NPN型輸入接線圖.jpg
GYJ-0072PNP型輸入接線圖.jpg

原理圖及PCB圖.rar

266.91 KB, 下載次數: 61, 下載積分: 黑幣 -5

帶觸發端的延時模塊程序包.rar

2.45 MB, 下載次數: 60, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:320751 發表于 2019-12-21 16:21 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:93483 發表于 2019-12-21 20:55 | 顯示全部樓層
時間設置改成加/減兩鍵設置就好了,
回復

使用道具 舉報

無效樓層,該帖已經被刪除
5#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表