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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

時鐘+溫度+程序

  [復制鏈接]
跳轉到指定樓層
樓主


#include <STC12C2052AD.h>  
#include <intrins.h>
/*-----------------------------------接口定義-------------------------------------*/
sbit vcc1=P3^1;
sbit vcc2=P3^4;
sbit vcc3=P3^5;
sbit vcc4=P1^1;
         
sbit LEDa=P3^2;
sbit LEDb=P1^0;
sbit LEDc=P1^3;
sbit LEDd=P1^5;
sbit LEDe=P1^6;
sbit LEDf=P3^3;     
sbit LEDg=P1^2;
sbit LEDp=P1^4;

sbit key=P3^7;                           
sbit beep=P3^0;                        
/*-------------------------------------變量定義-------------------------------------*/
unsigned char menu;        
unsigned char code numtab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};        
unsigned char sec,min,hour,T_time;
bit p_sw;
/*-------------------------------------延時函數-------------------------------------*/
void delayms (unsigned int a){
        unsigned int i;
        while( --a != 0){
                for (i = 0; i < 12; i++);
        }
}
/*----------------------------------數碼管驅動函數----------------------------------*/
void displayoff (void)                 
{                  
        vcc1=0;
        vcc2=0;
        vcc3=0;
        vcc4=0;
        
        LEDa=1;
        LEDb=1;
        LEDc=1;
        LEDd=1;
        LEDe=1;
        LEDf=1;
        LEDg=1;
        LEDp=1;

//        delayms(1);
}
/***********************************************************************************/
void bit1 (unsigned char d)        
{
        unsigned char i;
        i=d&0x01;
        if (i==0x01){
                vcc1=1;LEDa=0;}delayms(15);displayoff();
        i=d&0x02;
        if (i==0x02){
                vcc1=1;LEDb=0;}delayms(15);displayoff();
        i=d&0x04;
        if (i==0x04){
                vcc1=1;LEDc=0;}delayms(15);displayoff();
        i=d&0x08;
        if (i==0x08){
                vcc1=1;LEDd=0;}delayms(15);displayoff();
        i=d&0x10;
        if (i==0x10){
                vcc1=1;LEDe=0;}delayms(15);displayoff();
        i=d&0x20;
        if (i==0x20){
                vcc1=1;LEDf=0;}delayms(15);displayoff();
        i=d&0x40;
        if (i==0x40){
                vcc1=1;LEDg=0;}delayms(15);displayoff();
        i=d&0x80;
        if (i==0x80){
                vcc1=1;LEDp=0;}delayms(15);displayoff();
}
/***********************************************************************************/
void bit2 (unsigned char d)
{
        unsigned char i;
        i=d&0x01;
        if (i==0x01){
                vcc2=1;LEDa=0;}delayms(15);displayoff();
        i=d&0x02;
        if (i==0x02){
                vcc2=1;LEDb=0;}delayms(15);displayoff();
        i=d&0x04;
        if (i==0x04){
                vcc2=1;LEDc=0;}delayms(15);displayoff();
        i=d&0x08;
        if (i==0x08){
                vcc2=1;LEDd=0;}delayms(15);displayoff();
        i=d&0x10;
        if (i==0x10){
                vcc2=1;LEDe=0;}delayms(15);displayoff();
        i=d&0x20;
        if (i==0x20){
                vcc2=1;LEDf=0;}delayms(15);displayoff();
        i=d&0x40;
        if (i==0x40){
                vcc2=1;LEDg=0;}delayms(15);displayoff();
        i=d&0x80;
        if (i==0x80){
                vcc2=1;LEDp=0;}delayms(15);displayoff();
}
/***********************************************************************************/
void bit3 (unsigned char d)
{
        unsigned char i;
        i=d&0x01;
        if (i==0x01){
                vcc3=1;LEDa=0;}delayms(15);displayoff();
        i=d&0x02;
        if (i==0x02){
                vcc3=1;LEDb=0;}delayms(15);displayoff();
        i=d&0x04;
        if (i==0x04){
                vcc3=1;LEDc=0;}delayms(15);displayoff();
        i=d&0x08;
        if (i==0x08){
                vcc3=1;LEDd=0;}delayms(15);displayoff();
        i=d&0x10;
        if (i==0x10){
                vcc3=1;LEDe=0;}delayms(15);displayoff();
        i=d&0x20;
        if (i==0x20){
                vcc3=1;LEDf=0;}delayms(15);displayoff();
        i=d&0x40;
        if (i==0x40){
                vcc3=1;LEDg=0;}delayms(15);displayoff();
        i=d&0x80;
        if (i==0x80){
                vcc3=1;LEDp=0;}delayms(15);displayoff();
}
/***********************************************************************************/
void bit4 (unsigned char d)
{
        unsigned char i;
        i=d&0x01;
        if (i==0x01){
                vcc4=1;LEDa=0;}delayms(15);displayoff();
        i=d&0x02;
        if (i==0x02){
                vcc4=1;LEDb=0;}delayms(15);displayoff();
        i=d&0x04;
        if (i==0x04){
                vcc4=1;LEDc=0;}delayms(15);displayoff();
        i=d&0x08;
        if (i==0x08){
                vcc4=1;LEDd=0;}delayms(15);displayoff();
        i=d&0x10;
        if (i==0x10){
                vcc4=1;LEDe=0;}delayms(15);displayoff();
        i=d&0x20;
        if (i==0x20){
                vcc4=1;LEDf=0;}delayms(15);displayoff();
        i=d&0x40;
        if (i==0x40){
                vcc4=1;LEDg=0;}delayms(15);displayoff();
        i=d&0x80;
        if (i==0x80){
                vcc4=1;LEDp=0;}delayms(15);displayoff();
}
/***********************************************************************************/
void display(unsigned char l,unsigned char d)
{
        switch (l)                        
        {                                       
                case 1:                          
                        bit1(d);                 
                        break;               
                case 2:                        
                        bit2(d);               
                        break;        
                case 3:                        
                        bit3(d);                 
                        break;        
                case 4:                        
                        bit4(d);                 
                        break;        
        }
}
/*--------------------------------A/D轉換初始化函數--------------------------------*/
void read_init (unsigned char CHA)
{
        unsigned char AD_FIN=0; //存儲A/D轉換標志
    CHA &= 0x07;            //選擇ADC的8個接口中的一個(0000 0111 清0高5位)
    ADC_CONTR = 0x40;                //ADC轉換的速度(0XX0 0000 其中XX控制速度,請根據數據手冊設置)
    _nop_();
    ADC_CONTR |= CHA;       //選擇A/D當前通道
    _nop_();
    ADC_CONTR |= 0x80;      //啟動A/D電源
    delayms(1);            //使輸入電壓達到穩定(1ms即可)
}
/*-----------------------------------A/D讀取函數-----------------------------------*/
unsigned char T_read (void){
        unsigned char AD_FIN=0; //存儲A/D轉換標志
    ADC_CONTR |= 0x08;      //啟動A/D轉換(0000 1000 令ADCS = 1)
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    while (AD_FIN ==0){     //等待A/D轉換結束
        AD_FIN = (ADC_CONTR & 0x10); //0001 0000測試A/D轉換結束否
    }
    ADC_CONTR &= 0xE7;      //1111 0111 清ADC_FLAG位, 關閉A/D轉換,
return (ADC_DATA/2);          //返回A/D轉換結果(8位)
}
/*--------------------------------------主函數--------------------------------------*/        
void main(void)
{                                                                           
        unsigned char temp,j,temperature;
        unsigned char ahour,amin;
        bit        a_sw,a_temp;

        TMOD=0x01;//定時器工作方式1
        
        TH0=0x3C;//定時器初始產生50ms時基信號
        TL0=0xB0;//定時器初始產生50ms時基信號
        
        EA=1;//開總中斷

        read_init(7);

        temperature=T_read();

        P1M0=0x80;
        P1M1=0x02;
        P3M0=0x00;
        P3M1=0x32;
/************************************************************************************/
        while(1)
        {
                if (ahour==hour&&amin==min&&sec==0&&a_sw&&a_temp&&menu!=2&&menu!=3&&menu!=7&&menu!=8)
                {                                                                                                         
                        menu=9;
                }

                if (sec==1&&min==0&&menu!=9)               
                {
                        beep=1;
                }
/*-----------------------------------菜單切換程序-----------------------------------*/
                if (menu==0)
                {
                        display(1,0x40);
                        display(2,0x40);
                        display(3,0x40+0x80);
                        display(4,0x40+0x80);                          

                        if (key==0)               
                        {
                                temp++;
                                if (temp>10)                                       
                                {
                                        temp=0;
                                        ET0=1;//開定時器中斷
                                        TR0=1;//啟動定時器
                                        menu=1;
                                        while (key==0);
                                }
                        }                        
                }
/************************************************************************************/
                if (menu==1)                                
                {                                       
                        if (hour<10)                                
                        {
                                display(1,0x00);
                        }        
                        else
                        {
                                display(1,numtab[hour/10]);
                        }
                        display(2,numtab[hour%10]);               
                        display(3,numtab[min/10]+(sec%2)*0x80);        
                        display(4,numtab[min%10]+(sec%2)*0x80);        

                        if (T_time>7)
                        {
                                menu=5;
                        }
               
                        if (key==0)                                                        
                        {                                
                                temp++;
                                T_time=0;
                                if (temp>150)
                                {
                                        temp=0;
                                        menu=2;
                                        while (key==0);
/*                                        {
                                                if (hour<10)                                    
                                                {                                       
                                                        display(1,0x00);                                
                                                }
                                                else
                                                {
                                                        display(1,numtab[hour/10]);
                                                }
                                                display(2,numtab[hour%10]);               
                                                display(3,0x80);                        
                                                display(4,0x80);
                                        }                         */
                                }
                        }
                        if (key==1&&temp>10)        
                        {
                                temp=0;
                                T_time=0;
                                menu=6;
                        }
                }
/************************************************************************************/
                if (menu==2)
                {
                        if (hour<10)                                    
                        {                                       
                                display(1,0x00);                                
                        }
                        else
                        {
                                display(1,numtab[hour/10]);
                        }
                        display(2,numtab[hour%10]);               
                        display(3,0x80);                        
                        display(4,0x80);
               
                        if (key==0)                                       
                        {                                       
                                temp++;
                                if (temp>150)
                                {
                                        temp=0;
                                        menu=3;
                                        while (key==0);
/*                                        {
                                                display(3,numtab[min/10]+0x80);                 
                                                display(4,numtab[min%10]+0x80);                  
                                        }                                                                                  */
                                }
                        }
                        if (key==1&&temp>10)        
                        {
                                temp=0;
                                hour++;
                                if (hour>23)
                                {
                                        hour=0;
                                }
                                sec=0;
                        }
                }
/************************************************************************************/
                if (menu==3)                                       
                {                                       
                        display(3,numtab[min/10]+0x80);                 
                        display(4,numtab[min%10]+0x80);
        
                        if (key==0)                                       
                        {                                       
                                temp++;
                                if (temp>150)
                                {
                                        temp=0;
                                        menu=4;
                                        while (key==0);
/*                                        {
                                                if (hour<10)                                
                                                {
                                                        display(1,0x00);
                                                }        
                                                else
                                                {
                                                        display(1,numtab[hour/10]);
                                                }
                                                display(2,numtab[hour%10]);               
                                                display(3,numtab[min/10]+(sec%2)*0x80);        
                                                display(4,numtab[min%10]+(sec%2)*0x80);        
                                        }                                                  */
                                }
                        }
                        if (key==1&&temp>10)        
                        {
                                temp=0;
                                min++;
                                if (min>59)
                                {
                                        min=0;
                                }
                                sec=0;
                        }         
                }
/************************************************************************************/
                if (menu==4)
                {
                        if (p_sw)
                        {
                                display(1,0x73);        
                                display(2,0x00);               
                                display(3,0x3f);        
                                display(4,0x37);               
                        }
                        else
                           {
                                display(1,0x73);               
                                display(2,0x3f);               
                                display(3,0x71);        
                                display(4,0x71);        
                        }

                        if (key==0)                                       
                        {                                       
                                temp++;
                                if (temp>150)
                                {
                                        temp=0;
                                        menu=1;
                                        while (key==0);
                                }
                        }
                        if (key==1&&temp>10)        
                        {
                                temp=0;
                                p_sw=~p_sw;
                        }         
                }
/************************************************************************************/
                if (menu==5)
                {
                        if (T_time>9)
                        {
                                T_time=0;
                                menu=1;
                        }
                        if (sec%2)
                        {
                                temperature=T_read();
                        }
                        if (temperature<10)
                        {
                                display(1,0x00);
                        }
                        else
                        {
                                display(1,numtab[temperature/10]);
                        }
                        display(2,numtab[temperature%10]);  
                        display(3,0xD8);

                        while(key==0)
                        {
                                if (sec%2)
                                {
                                        temperature=T_read();
                                }
                                if (temperature<10)
                                {
                                        display(1,0x00);
                                }
                                else
                                {
                                        display(1,numtab[temperature/10]);
                                }
                                display(2,numtab[temperature%10]);  
                                display(3,0xD8);
                        }
                }
/************************************************************************************/
                if (menu==6)                                
                {
                        if (T_time>2)
                        {
                                T_time=0;
                                menu=1;
                        }                                       
                        if (key==0)
                        {
                                T_time=0;
                        }                                       
               
                        if (a_temp)                                       
                        {                                       
                                if (ahour<10)                        
                                {
                                        display (1,0x00);
                                }
                                else
                                {
                                        display (1,numtab[ahour/10]);
                                }
                                display (2,numtab[ahour%10]);        
                                display (3,numtab[amin/10]+0x80);
                                display (4,numtab[amin%10]+0x80);
                        }
                        else                                                               
                        {                                                        
                                display (1,0x40);
                                display (2,0x40);
                                display (3,0x40+0x80);
                                display (4,0x40+0x80);
                        }

                        if (key==0)                        
                        {
                                temp++;
                                if (temp>150)                                
                                {
                                        temp=0;
                                        a_temp=1;
                                        menu=7;
                                        while (key==0);
                                }
                        }                                                

                        if (key==1&&temp>10)
                        {
                                temp=0;
                                a_sw=~a_sw;
                                if (a_sw)
                                {
                                        for (j=0;j<100;j++)               
                                        {               
                                                display (1,0x77);               
                                                display (2,0x00);        
                                                display (3,0x3f);        
                                                display (4,0x37);        
                                        }
                                }
                                else
                                   {
                                        for (j=0;j<100;j++)               
                                        {               
                                                display (1,0x77);        
                                                display (2,0x3f);               
                                                display (3,0x71);        
                                                display (4,0x71);        
                                        }
                                }
                        }                          
                }
/************************************************************************************/
                if (menu==7)                                       
                {                                       
                        if (ahour<10)                        
                        {
                                display (1,0x00);
                        }
                        else
                        {
                                display (1,numtab[ahour/10]);
                        }
                        display (2,numtab[ahour%10]);        
                        display (3,0x80);                        
                        display (4,0x80);

                        if (key==0)                                       
                        {                                       
                                temp++;
                                if (temp>150)
                                {
                                        temp=0;
                                        menu=8;
                                        while (key==0);
                                }
                        }
                        if (key==1&&temp>10)
                        {
                                temp=0;
                                ahour++;
                                if (ahour>23)
                                {
                                        ahour=0;                                          
                                }
                                a_sw=1;
                                a_temp=1;
                        }         
                }
/************************************************************************************/
                if (menu==8)                                
                {                                       
                        display (1,0x00);                        
                        display (2,0x00);               
                        display (3,numtab[amin/10]+0x80);        
                        display (4,numtab[amin%10]+0x80);
        
                if (key==0)                                                        
                {                                       
                        temp++;
                        if (temp>150)
                        {
                                temp=0;
                                T_time=0;
                                menu=6;
                                while (key==0);
                        }
                }
                if (key==1&&temp>10)
                        {
                                temp=0;
                                amin++;
                                if (amin>59)
                                {
                                        amin=0;
                                }
                                a_sw=1;
                                a_temp=1;
                        }         
                }
/************************************************************************************/
                if (menu==9)                                       
                {               
                        if (hour<10)                        
                        {
                                display (1,0x00);
                        }
                        else
                        {
                                display (1,numtab[hour/10]);
                        }
                        display (2,numtab[hour%10]);        
                        display (3,numtab[min/10]+(sec%2)*0x80);
                        display (4,numtab[min%10]+(sec%2)*0x80);        

                        beep=sec%2;

                        if (key==0)
                        {
                                temp++;
                                if (temp>10)
                                {
                                        temp=0;
                                        beep=1;                                         
                                        T_time=0;
                                        menu=1;        
                                        while (key==0);                                       
                                }
                        }
                        if (sec==59)                                                
                        {
                                beep=1;                                         
                                menu=1;                                                
                                T_time=0;
                        }
                }                  
        }                          
}
/*-----------------------------------中斷服務程序-----------------------------------*/        
void Timer0_Routine(void) interrupt 1
{
        unsigned char count;
        TH0=0x3C;                        
        TL0=0xB0;                        
    count++;
        if (count==20)
        {                 
                count=0;               
                sec++;
                T_time++;         
                if (sec>59)
                {
                        sec=0;
                        min++;
                        if (min>59)
                        {
                                min=0;
                                hour++;
                                if (p_sw&&menu!=3)
                                {                 
                                        beep=0;
                                }         
                                if (hour>23)
                                {
                                        hour=0;
                                }
                        }
                }
        }
}

時鐘 溫度 程序.zip

1.77 MB, 下載次數: 55, 下載積分: 黑幣 -5

評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:90084 發表于 2015-9-28 01:32 | 只看該作者
樓主太給力了,我半夜都把樓主的程序看完了,不過還在消化中,不知道樓主有做成實物嗎?有的話能分享幾張圖片不
回復

使用道具 舉報

板凳
ID:19715 發表于 2015-9-28 17:17 | 只看該作者
我靠,這樣的掃描效益非常低,任何時刻只能點亮4位數碼管其中之一的當中的一段,
也就是說一般4位數碼管其中一位點亮的時間可以接近1/4,
現在變成了1/32.這樣掃描時間長,數碼管亮度低。
建議分開P1、P3兩次賦值段碼,8段一起處理之后,同時延時,這樣每一段點亮的時間大大增加。
這樣就需要兩個數碼段碼表,分別用于P1、P3輸出
回復

使用道具 舉報

地板
ID:92231 發表于 2015-10-31 00:10 來自手機 | 只看該作者
學習一下程序,菜鳥一個需要參考例程
回復

使用道具 舉報

5#
ID:94279 發表于 2015-11-1 11:09 | 只看該作者
不錯的,仿真有點,,,
回復

使用道具 舉報

6#
ID:94340 發表于 2015-11-1 19:17 | 只看該作者
要是有仿真圖就好了
回復

使用道具 舉報

7#
ID:154547 發表于 2016-12-13 22:02 | 只看該作者
真的是解決了我的一個大難題啊,感謝樓主
回復

使用道具 舉報

8#
ID:154547 發表于 2016-12-13 22:32 | 只看該作者
樓主有仿真圖沒啊,我畫出來有問題啊,拜托
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 男女免费观看在线爽爽爽视频 | 亚洲欧美视频 | 区一区二区三在线观看 | 天天干狠狠干 | 九色视频网站 | 夜夜操天天操 | 成人av网页 | 国产99免费| 99精品一区 | 精品网站999 | 日本一区二区视频 | 丁香婷婷久久久综合精品国产 | 色综合网站| 殴美一级片 | 蜜桃传媒一区二区 | 久久久精 | 亚洲区一区二 | 久久久久网站 | a级黄色网 | 国产欧美日韩久久久 | 中文一区| 一区二区视频在线 | 亚洲精品第一 | 国产精品视频网 | 久久精品亚洲精品国产欧美 | 精品欧美一区二区精品久久久 | 日韩成人在线网址 | 亚洲一区二区免费视频 | 国产精品二区三区 | 国产欧美精品一区二区 | 久草视频在线播放 | 精品一区二区三区视频在线观看 | 国产精品久久性 | av日韩在线播放 | 国产精品美女久久久久久免费 | 日韩精品一区二区三区在线观看 | 欧美一级艳情片免费观看 | 午夜噜噜噜 | 91免费高清视频 | 一级全黄少妇性色生活免费看 | 国产成人自拍一区 |