找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自己寫的一個碼表程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:442350 發(fā)表于 2018-12-22 20:16 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
四個按鍵控制,可以實現(xiàn)暫停開始 加一 歸零
#include <reg51.h>
typedef unsigned char u8;
typedef unsigned int  u16;
sbit start=P2^7;
sbit stop=P2^6;
sbit plus_one=P2^5;
sbit resert=P2^4;
#define dpick P0
#define wpick P1
u16 num1=0;                                                               //1s的次數(shù)的計數(shù)值
u16 num60=0;                                                        //1min的次數(shù)的計數(shù)值
u16 zd_num=0;                 //進入中斷次數(shù)的計數(shù)值

                    //子函數(shù)

void delay(u16 num)                                                         //延時函數(shù)
{
               u16 x,y;
               for(x=num;x>0;x--)
               for(y=110;y>0;y--)
               {
               ;                     
               }
}
u8 code table[]={0x3f,0x06 ,0x5b ,0x4f, 0x66, 0x6d, 0x7d ,0x07, 0x7f,
                 0x6f,0x77 ,0x7c, 0x39, 0x5e, 0x79, 0x71};
void Display(u16 a,u16 b,u16 c,u16 d)                                      //定義顯示函數(shù)  
{
    dpick=table[a];                                              //秒的個位的段選
wpick=0x7f;                                                         //秒的個位的位選
delay(5);   

dpick=table[b];                                                        //秒的十位的段選
wpick=0xbf;                                                         //秒的十位的位選
delay(5);

dpick=table[c]+0x80;                                                   //分的個位的段選(帶小數(shù)點)
wpick=0xdf;                                                      //分的個位的位選
delay(5);
  
dpick=table[d];                                                     //分的十位的段選
wpick=0xef;                                                   //分的十位的位選
delay(5);      
}
void InitTimer0()                                                         //定時器初始化函數(shù)
{

TMOD=0x01;                                                            //選擇定時器0的工作方式1
TH0=(65535-50000) / 256;                            //計算初值 (定時50ms)
    TL0=(65535-50000) % 256;
EA=1;                                                            //打開總中斷
ET0=1;                                                               //打開定時器中斷
TR0=0;
}
void TIMER0()  interrupt 1                                                //定時器中斷服務(wù)函數(shù)
{
TH0=(65535-50000) / 256;                                              //手動填充
TL0=(65535-50000) % 256;
zd_num++;                                                        //讓進入中斷次數(shù)值加1,用于判斷是否達到1s
}
            //主函數(shù)
void main()
{
    u16 s1,s10,min1,min10;                                     //秒的個位,秒的十位,分的個位,分的十位
InitTimer0();                                            //初始化定時器
while(1)  
{
if(start==0)                                                   //檢測啟動
{
    delay(20);                                   
if(start==0)  
{               
   TR0=1;                                              //定時器打開
   while(!start);                                 
}
}
if(stop==0)                                                     //檢測啟動
{
  delay(20);
  if(stop==0)  
  {
TR0=0;                                                  //定時器關(guān)閉
while(!stop);                                 
  }
}
if(plus_one==0)                                                
{
  delay(20);                                      
  if(plus_one==0)  
  {
zd_num=zd_num+20;                                    
while(!plus_one);                                 
  }
}
if(resert==0)                                             
{
  delay(20);                                       
  if(resert==0)  
  {
    zd_num=0;
TR0=0;
num1=0;
num60=0;            
  }
  while(!resert);
}  

if(zd_num>=20)                                                     
{
   zd_num=0;                                                              
   num1++;                                                     
  if(num1>=60)                                                           
    {
        num1=0;                                                         
     num60++;
     if(num60>=60)
      {
     TR0=0;   
     num1=0;
     num60=0;
     zd_num=0;
   }
    }
}

s1=num1%10;                                               //從秒的計數(shù)值里面分離秒的個位
s10=num1/10;                                                //從秒的計數(shù)值里面分離秒的十位
min1=num60%10;                                             //從分的計數(shù)值里面分離分的個位
min10=num60/10;                                             //從分的計數(shù)值里面分離分的十位

Display(s1,s10,min1,min10);                                 //顯示
}

}









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

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2018-12-23 00:46 | 只看該作者
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
回復(fù)

使用道具 舉報

板凳
ID:442350 發(fā)表于 2018-12-23 14:49 | 只看該作者
電路連接 就是單片機P0連接數(shù)碼管段選位 P1 的四個IO口 連接數(shù)碼管所選的位選位 四個按鍵連接P2口的7 6 5 4
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表