|
這是一款多功能數(shù)碼管時(shí)鐘程序資料,單片機(jī)是AT89C51,6位數(shù)碼管顯示、DS1302時(shí)鐘、DS18B20溫度測(cè)量。時(shí)間,溫度可以交替顯示。附件中含濤程序,仿真文件,使用說明,電路圖等資料下載:
6位數(shù)碼管顯示DS1302時(shí)鐘DS18B20溫度仿真及C語言程序.zip
(1.15 MB, 下載次數(shù): 46)
2017-5-28 09:42 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
下面是仿真效果圖:
測(cè)溫仿真.jpg (253.35 KB, 下載次數(shù): 75)
下載附件
數(shù)碼管時(shí)鐘
2017-5-28 09:40 上傳
時(shí)鐘仿真.jpg (252.45 KB, 下載次數(shù): 93)
下載附件
數(shù)碼管時(shí)鐘
2017-5-28 09:40 上傳
程序標(biāo)注簡(jiǎn)潔明了。比較適合初學(xué)者下載學(xué)習(xí)。
- include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dis_bit1=P2^7;//定義數(shù)碼管控制口
- sbit dis_bit2=P2^6;//定義數(shù)碼管控制口
- sbit dis_bit3=P2^4;//定義數(shù)碼管控制口
- sbit dis_bit4=P2^3;//定義數(shù)碼管控制口
- sbit dis_bit5=P2^1;//定義數(shù)碼管控制口
- sbit dis_bit6=P2^0;//定義數(shù)碼管控制口
- sbit led1_bit=P2^2;//定時(shí)LED的控制口
- sbit led2_bit=P2^5;//定時(shí)LED的控制口
- sbit s1_bit=P1^0; //定義S1控制口
- sbit s2_bit=P1^1; //定義S2控制口
- sbit s3_bit=P1^2; //定義S3控制口
- sbit dq_ds18b20=P3^3;//定義控制DS18B20
- sbit speak=P3^7; //定義蜂鳴器控制口
- sbit clk_ds1302=P3^6;//定義控制DS1302的時(shí)鐘線
- sbit io_ds1302=P3^5;//定義控制DS1302的串行數(shù)據(jù)
- sbit rest_ds1302=P3^4;
- #define smg_data P0//定義數(shù)碼管數(shù)據(jù)口
- void delay_3us();//3US的延時(shí)程序
- void delay_8us(uint t);//8US延時(shí)基準(zhǔn)程序
- void delay_50us(uint t);//延時(shí)50*T微妙函數(shù)的聲明
- void display1(uchar dis_data);//數(shù)碼管1顯示子程序
- void display2(uchar dis_data);//數(shù)碼管2顯示子程序
- void display3(uchar dis_data);//數(shù)碼管3顯示子程序
- void display4(uchar dis_data);//數(shù)碼管4顯示子程序
- void display5(uchar dis_data);//數(shù)碼管5顯示子程序
- void display6(uchar dis_data);//數(shù)碼管6顯示子程序
- void init_t0();//定時(shí)器0初始化函數(shù)
- void dis_led();//LED處理函數(shù)
- void judge_s1();//S1按鍵處理函數(shù)
- void judge_s2();//S2按鍵處理函數(shù)
- void judge_s3();//S3按鍵處理函數(shù)
- void dis(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1);//顯示子程序
- void dis_san(uchar s6,uchar s5,uchar s4,uchar s3,uchar s2,uchar s1,uchar san);//閃爍顯示子程序
- void judge_dis();//顯示處理函數(shù)
- void judge_clock();//顯示處理函數(shù)
- void set_ds1302();//設(shè)置時(shí)間
- void get_ds1302();//讀取當(dāng)前時(shí)間
- void w_1byte_ds1302(uchar t);//向DS1302寫一個(gè)字節(jié)的數(shù)據(jù)
- uchar r_1byte_ds1302();//從DS1302讀一個(gè)字節(jié)的數(shù)據(jù)
- //***********************************************************************
- //DS18B20測(cè)溫函數(shù)定義
- void w_1byte_ds18b20(uchar value);//向DS18B20寫一個(gè)字節(jié)
- uchar r_1byte_ds18b20(void);//從DS18B20讀取一個(gè)字節(jié)的數(shù)據(jù)
- void rest_ds18b20(void);//DS18B20復(fù)位程序
- void readtemp_ds18b20(void);//讀取溫度
- void dis_temp();//溫度顯示函數(shù)
- //共陽數(shù)碼管斷碼表
- const uchar tabl1[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- // 0 1 2 3 4 5
- 0x82,0xf8,0x80,0x90,0x86,0x87,0xFF,
- //6 7 8 9 E T B
- 0xc6,0xbf,0xff};
- // C -
- const uchar tabl3[]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
- uchar t0_crycle;
- uchar hour_count,minute_count,second_count,msecond_count;
- uchar clock_hour,clock_minute;
- uchar countdown_second;
- uchar countdown_hour,countdown_minute;
- uchar clock_en;//鬧鐘關(guān)閉和開啟的標(biāo)志,1開啟,0關(guān)閉
- uchar flag1,second_flag,zancun1,zancun2,zancun3;
- uchar zancun4,zancun5,zancun6,zancun7;
- uchar clock_flag,countdown_flag;
- uchar msecond_minute,msecond_second,msecond_msecond,msecond_flag;//秒表相關(guān)參數(shù)
- uint speak_count;
- uchar templ,temph,temp_flag;
- uchar t_b,t_s,t_g,t_x,temp_flag2;//從左到右分別存儲(chǔ)溫度百位,十位,個(gè)位,小數(shù)位
- uchar tab23[3];//={0x40,0x59,0x23,0x28,0x11,0x06,0x09};//上電時(shí)默認(rèn)的時(shí)間
- //主程序
- void main()
- {
- P3=0x00;
- flag1=0;
- zancun3=0;
- msecond_minute=0;//置秒表相關(guān)參數(shù)為0
- msecond_second=0;
- msecond_msecond=0;
- speak=1;//關(guān)閉蜂鳴器
- speak_count=0;
- clock_hour=0;
- clock_minute=0;
- clock_flag=0;
- countdown_flag=0;//倒計(jì)時(shí)標(biāo)志位為0
- clock_en=0;//開機(jī)時(shí)默認(rèn)關(guān)閉鬧鐘
- init_t0();
- TR0=1;//
- // set_ds1302();//設(shè)置DS1302的初始時(shí)間
- //接下來開始編寫讓數(shù)碼管顯示的程序
- while(1)
- {
- get_ds1302();
- judge_dis();//顯示處理
- judge_s1();
- judge_s2();
- judge_s3();
- judge_clock();//鬧鐘處理程序
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- t0_crycle++;
- if(t0_crycle==2)// 0.1秒
- {
- t0_crycle=0;
- msecond_flag=1;
- msecond_count++;
- if(msecond_count==10)//1秒
- {
- msecond_count=0;
- second_flag=1;
- }
- }
- }
- //**************************************************
- //顯示處理函數(shù)
- void judge_dis()
- {
- if(flag1==0)
- {
- if(second_flag==1)
- {
- zancun7++;
- second_flag=0;
- }
- if(zancun7<1)
- {
- if(temp_flag2==1)
- {
- readtemp_ds18b20();//讀取溫度
- temp_flag2=0;
- }
- dis_temp();//溫度顯示函數(shù)
- }
- if(zancun7>=1)
- {
- temp_flag2=1;
- zancun4=hour_count&0xf0;
- zancun4>>=4;
- zancun5=minute_count&0xf0;
- zancun5>>=4;
- zancun6=second_count&0xf0;
- zancun6>>=4;
- dis(zancun4,hour_count&0x0f,zancun5,minute_count&0x0f,zancun6,second_count&0x0f);
- dis_led();
- if(zancun7==5)zancun7=0;
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
|
|