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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6429|回復: 5
打印 上一主題 下一主題
收起左側

自制8x32點陣時鐘,帶誤差調整,可用麻將筒子顯示

[復制鏈接]
跳轉到指定樓層
樓主
程序是網上8x16點陣滾動時鐘修改而來,在此謝謝原創。
#include <REGX51.H> unsigned char sec=0,min=0,hou=12,st=0x00,timecount=0,oldP1=0xff,setting=0;
bit point=1,K1_old,K2_old;

unsigned char code dis_code[]=
{ 0x3E,0x41,0x41,0x3E,0x21,0x7F,0x01,0x00,//0與1   
  0x23,0x45,0x49,0x31,0x22,0x41,0x49,0x36, //2與3  
  0x1E,0x22,0x7F,0x02,0x72,0x51,0x51,0x4E, //4與5
  0x3E,0x49,0x49,0x26,0x60,0x40,0x4F,0x70,  //6與7
  0x36,0x49,0x49,0x36,0x32,0x49,0x49,0x3E,  //8與9
  0x3E,0x2A,0x3E,0x40,0x49,0xFE,0x40,0x00,        //時
  0x00,0x18,0x18,0x7E,0x7E,0x18,0x18,0x00,                   //+
  0x3E,0x2A,0x3E,0x40,0x49,0xFE,0x40,0x00,        //時
  0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,                        //-
  0x10,0x21,0x4A,0x0C,0x49,0x2F,0x20,0x00,        //分
  0x00,0x18,0x18,0x7E,0x7E,0x18,0x18,0x00,                   //+
  0x10,0x21,0x4A,0x0C,0x49,0x2F,0x20,0x00,        //分
  0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,                        //-
  0x32,0x49,0x49,0x26,0x00,0x40,0x7F,0x40,        //st
  0x00,0x18,0x18,0x7E,0x7E,0x18,0x18,0x00,                   //+
  0x32,0x49,0x49,0x26,0x00,0x40,0x7F,0x40,        //st
  0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,               //-         
};                        
unsigned char code disp_code[]=
{ 0x7F,0x41,0x7F,0x00,0x00,0x08,0x00,0x00,
  0x00,0x41,0x00,0x00,0x01,0x08,0x40,0x00,
  0x41,0x00,0x41,0x00,0x41,0x08,0x41,0x00,
  0x45,0x00,0x45,0x00,0x15,0x20,0x45,0x00,
  0x55,0x00,0x55,0x00,0x49,0x49,0x49,0x00,
  0x3E,0x2A,0x3E,0x40,0x49,0xFE,0x40,0x00,        //時
  0x00,0x18,0x18,0x7E,0x7E,0x18,0x18,0x00,                   //+
  0x3E,0x2A,0x3E,0x40,0x49,0xFE,0x40,0x00,        //時
  0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,                        //-
  0x10,0x21,0x4A,0x0C,0x49,0x2F,0x20,0x00,        //分
  0x00,0x18,0x18,0x7E,0x7E,0x18,0x18,0x00,                   //+
  0x10,0x21,0x4A,0x0C,0x49,0x2F,0x20,0x00,        //分
  0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,                        //-
  0x32,0x49,0x49,0x26,0x00,0x40,0x7F,0x40,        //st
  0x00,0x18,0x18,0x7E,0x7E,0x18,0x18,0x00,                   //+
  0x32,0x49,0x49,0x26,0x00,0x40,0x7F,0x40,        //st
  0x00,0x18,0x18,0x18,0x18,0x18,0x18,0x00,                        //-                        
};

sbit  K1=P1^7;   
sbit  K2=P1^6;

void time50ms(void);
void delay_ms(void);
void timedeal(void);
/*******************************************************************/
void main(void)
{         
        unsigned char num,disnum,x,y,offset=0,dis_p,scantimes=0;
        IE=0x82;     //允許定時器0工作  
        TMOD=0x01;   //timer0為模式1  
        TR0=1;       //定時器0可以工作  
        TH0 = 0x4c;
        TL0 = 0x00|(st);  
        do  
        {   
                if(setting==0)         //正常顯示狀態
                {
                           for(x=0;x<16;x++)  //
                        {         
                                dis_p=x;   
                                 if(dis_p==3|| dis_p==8|| dis_p==10|| dis_p==15||dis_p>15)         //空列
                                 {         
                                         y=0;     
                                 }
                                 else if(dis_p<=2) //0~2為時的十位
                                 {              
                                          num=hou/10;                                                                     
                                          if(num>0)      
                                          y=dis_code[num*4+dis_p];
                                        else
                                        y=0;           
                                  }
                                  else if(dis_p<=7) //4~7為時的個位
                                  {         
                                          num=hou%10;
                                      
                                          y=dis_code[num*4+dis_p-4];
                                   
                                  }
                                  else if(dis_p<=9)        //9為冒號的顯示位
                                  {            
                                     if(point)                                               
                                          y=0x63;      
                                          else        
                                          y=0;     
                                  }
                                  else if(dis_p<=14)         //11~14為分的十位
                                  {         
                                          num=min/10;         
                                          y=dis_code[num*4+dis_p-11];  
                                  }                                 
                                P3=0;
                                P1=x|0xE0;
                                P3=y;   
                                   delay_ms();
                        }
                        for(x=0;x<16;x++)
                        {   
                                dis_p=x;     
                                 if(dis_p==4 || dis_p==6||dis_p==11||dis_p==16||dis_p>16 )         //空列
                                 {         
                                         y=0;     
                                 }   
                                   else if(dis_p<=3)                 //0~3為分的個位                                         
                                  {            
                                          num=min%10;      
                                          y=dis_code[num*4+dis_p];      
                                  }
                                else if(dis_p<=5)        //5為冒號的顯示位
                                  {            
                                     if(point)      
                                          y=0x63;      
                                          else        
                                          y=0;     
                                  }
                                else  if(dis_p<=10)          //7~10為秒的十位
                                {
                                        num=sec/10;                                                                  
                                        y=dis_code[num*4+dis_p-7];
                                }
                                else if(dis_p<=15) //12~15為秒的個位
                                  {         
                                          num=sec%10;      
                                          y=dis_code[num*4+dis_p-12];      
                                  }                                 
               
                                  P3=0;
                                 P1=x|0xd0;
                                  P3=y;   
                                   delay_ms();              //刷新
                    }
                }        
                 
               
/**********************************************************************///以下麻將                        
                else if(setting==1)         //正常顯示狀態
                  {         
                        for(x=0;x<16;x++)  //
                        {         
                                dis_p=x;     
                                 if(dis_p==3|| dis_p==8|| dis_p==10|| dis_p==15||dis_p>15)         //空列
                                 {         
                                         y=0;     
                                 }
                                 else if(dis_p<=2) //0~2為時的十位
                                 {              
                                          num=hou/10;                                                                     
                                          if(num>0)      
                                          y=disp_code[num*4+dis_p];
                                        else
                                        y=0;           
                                  }
                                  else if(dis_p<=7) //4~7為時的個位
                                  {         
                                          num=hou%10;
                                      
                                          y=disp_code[num*4+dis_p-4];
                                   
                                  }
                                  else if(dis_p<=9)        //9為冒號的顯示位
                                  {            
                                     if(point)                                               
                                          y=0x63;      
                                          else        
                                          y=0;     
                                  }
                                  else if(dis_p<=14)         //11~14為分的十位
                                  {         
                                          num=min/10;         
                                          y=disp_code[num*4+dis_p-11];  
                                  }                                 
                                P3=0;
                                P1=x|0xE0;
                                P3=y;   
                                   delay_ms();
                        }
                        for(x=0;x<16;x++)
                        {   
                                dis_p=x;     
                                 if(dis_p==4 || dis_p==6||dis_p==11||dis_p==16||dis_p>16 )         //空列
                                 {         
                                         y=0;     
                                 }   
                                   else if(dis_p<=3)                 //0~3為分的個位                                         
                                  {            
                                          num=min%10;      
                                          y=disp_code[num*4+dis_p];      
                                  }
                                else if(dis_p<=5)        //5為冒號的顯示位
                                  {            
                                     if(point)      
                                          y=0x63;      
                                          else        
                                          y=0;     
                                  }
                                else  if(dis_p<=10)          //7~10為秒的十位
                                {
                                        num=sec/10;                                                                  
                                        y=disp_code[num*4+dis_p-7];
                                }
                                else if(dis_p<=15) //12~15為秒的個位
                                  {         
                                          num=sec%10;      
                                          y=disp_code[num*4+dis_p-12];      
                                  }                                 
               
                                  P3=0;
                                 P1=x|0xd0;
                                  P3=y;   
                                   delay_ms();              //刷新
                     }
                                
                }           
/**************************************************///                    
                else         //當進入調整時間的狀態,運行下面的程序段
                {      
                         for(x=0;x<16;x++)
                         {     
                                 if(setting==2)      
                                 if(x<16)                          //前16列顯示漢字+時
                                if(point)               
                            y=dis_code[24+setting*8+x];
                                else
                                y=0;

                                if(setting==3)      
                                 if(x<16)                          //前16列顯示漢字-時
                                if(point)               
                            y=dis_code[32+setting*8+x];
                                else
                                y=0;

                                if(setting==4)      
                                 if(x<16)                          //前16列顯示漢字+分
                                if(point)               
                            y=dis_code[40+setting*8+x];
                                else
                                y=0;

                                if(setting==5)      
                                 if(x<16)                          //前16列顯示漢字-分
                                if(point)               
                            y=dis_code[48+setting*8+x];
                                else
                                y=0;

                            if(setting==6)      
                                 if(x<16)                          //前16列顯示漢字+st
                                if(point)               
                            y=dis_code[56+setting*8+x];
                                else
                                y=0;

                                if(setting==7)      
                                 if(x<16)                          //前16列顯示漢字-st
                                if(point)               
                            y=dis_code[64+setting*8+x];
                                else
                                y=0;

                                P3=0;     
                                   P1=x|0xe0;                //刷新
                                   P3=y;     
                                   delay_ms();         
                          }
                        
                     for(x=0;x<16;x++)
                        {         
                                if(setting==2||setting==3)
                                {
                                        dis_p=x;
                                          if(dis_p<=7 )
                                        {
                                                y=0;
                                        }
                                          else if(x<12)  //8~11為十位
                                         {  
                                                disnum=hou;           
                                                num=disnum/10;
                                                y=dis_code[num*4+x-8];
                                        }
                                         else                                   //12~15為個位
                                         {     
                                                  num=disnum%10;        
                                                  y=dis_code[num*4+x-12];
                                         }  
                                   }

                                 if(setting==4||setting==5)
                                {
                                        dis_p=x;
                                          if(dis_p<=7 )
                                        {
                                                y=0;
                                        }
                                          else if(x<12)  //8~11為十位
                                        {  
                                                disnum=min;           
                                                num=disnum/10;
                                                y=dis_code[num*4+x-8];
                                        }
                                         else                          //12~15為個位
                                         {     
                                                  num=disnum%10;        
                                                  y=dis_code[num*4+x-12];
                                        }
                                }

                                if(setting==6||setting==7)
                                {
                                        dis_p=x;
                                          if(dis_p<=7 )
                                        {
                                                y=0;
                                        }
                                   else if(x<12)  //8~11為十位
                                        {  
                                                disnum=st;           
                                                num=disnum/10;
                                                y=dis_code[num*4+x-8];
                                        }
                                         else
                                         {                               //12~15為個位
                                                  num=disnum%10;        
                                                  y=dis_code[num*4+x-12];
                                        }
                            }
                                P3=0;     
                                   P1=x|0xd0;     
                                   P3=y;     
                                   delay_ms();
                         }
                }   
        }
        while(1);   
}
/***************************************************/  
void delay_ms(void)            //顯示刷新
{   
        unsigned char i,j;
          for(i=0;i<4;i++)   
          for(j=0;j<30;j++);  
}
/****************************************************/
void time50ms(void) interrupt 1
{
           TH0 = 0x4c;
        TL0 = 0x00|(st);
        timecount++;
        if(timecount==10)  
        {  
                timecount=0;
                 point=!point;   
                  if(point)   
                  {   
                          sec++;   
                          timedeal();   
                  }  
        }   
    if(!K1&&K1!=K1_old)//按下模式鍵
        {  
                setting++;  
                if(setting==8)     
                setting=0;
        }            
        if(!K2 && K2!=K2_old)   //按下置位鍵  
        {   
                if(setting==2)   
                {     
                        hou++;
                        sec=0;     
                        timedeal();     
                }
                else if(setting==3)   
                {  
                        if(hou==0)   
                        hou=12;
                        hou--;   
                        timedeal();     
                }
                else if(setting==4)   
                {     
                        min++;
                        sec=0;   
                        timedeal();     
                }
                else if(setting==5)   
                {   
                        if(min==0)
                        min=60;  
                        min--;
                        sec=0;   
                        timedeal();     
                }
                else if(setting==6)   
                {     
                        st++;
                        if(st==100)
                        st=0;                           
                   }
                else if(setting==7)   
                {   
                        st--;
                        if(st==0-1)
                        st=99;  
                }
        }
          K1_old=K1;
        K2_old=K2;
}
/****************************************************/  
void timedeal(void)
{   
        if(sec>=60)
         {   
                 sec=0;
                  min++;  
          }   
          if(min>=60)
           {   
                min=0;
                hou++;
        }
         if(hou>12)           
         hou=1;
}

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1 發表于 2017-6-20 15:54 | 只看該作者
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

板凳
ID:258402 發表于 2018-12-9 23:20 | 只看該作者
先看看
回復

使用道具 舉報

地板
ID:318672 發表于 2018-12-13 22:06 來自手機 | 只看該作者
學習學習了
回復

使用道具 舉報

5#
ID:134960 發表于 2020-1-2 17:46 | 只看該作者
不錯,研究一下
回復

使用道具 舉報

6#
ID:1046983 發表于 2022-10-11 10:43 | 只看該作者
太棒了,收藏了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99伊人网| 国产精品一区二区三区久久 | 天天草草草| 国产高清视频在线 | aaa天堂| 久久久久久国产精品三区 | 人人干在线视频 | 国产成人免费视频网站高清观看视频 | 亚洲精品国产区 | 日日综合| 欧美1区2区| 男女视频在线观看免费 | 久久久黑人 | 久久久久亚洲精品 | 欧美日韩综合 | 亚洲欧美成人影院 | 国产精品国产三级国产aⅴ中文 | 中文字幕亚洲专区 | 国产高清精品一区 | www.久久久久久久久 | 福利国产 | 欧美激情一区二区三级高清视频 | 成人三级网址 | 欧美日韩在线高清 | 国产精品美女久久久久aⅴ国产馆 | 美女视频一区 | 亚洲精品中文字幕中文字幕 | 久久久久免费精品国产 | 国产精品久久久久久久久久久久久 | 蜜桃精品噜噜噜成人av | 在线看av的网址 | 欧美在线观看免费观看视频 | 国产精品日日摸夜夜添夜夜av | 久久久国产精品一区 | 欧美freesex黑人又粗又大 | 久久国产成人 | 国产亚洲一区二区三区 | 国产精品久久7777777 | 成人欧美日韩一区二区三区 | 国产午夜精品一区二区三区四区 | 亚洲精品二三区 |