仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png (24.16 KB, 下載次數(shù): 36)
下載附件
2022-12-11 22:40 上傳
51hei.gif (115.69 KB, 下載次數(shù): 41)
下載附件
2022-12-12 03:18 上傳
花了兩天時間弄出來的,希望能幫到你們
單片機源程序如下:
- #include<reg52.h> // 包含51單片機寄存器定義的頭文件;
- #include <intrins.h>
- #include <math.h>
- sbit P20=P2^0;
- sbit P21=P2^1;
- sbit P22=P2^2;
- sbit P23=P2^3;
- sbit P24=P2^4;
- sbit P25=P2^5;
- sbit P26=P2^6;
- sbit P27=P2^7;
- sbit P30=P3^0;
- sbit P31=P3^1;
- sbit P32=P3^2;
- sbit P33=P3^3;
- sbit P34=P3^4;
- sbit P35=P3^5;
- sbit hoursetting=P1^1;
- sbit minsetting=P1^2;
- sbit monthsetting=P1^3;
- sbit yearsetting=P1^4;
- sbit CS = P3^6;//ADC0832 PIN1
- sbit Clk = P1^7;//ADC0832 PIN7
- sbit DATI = P3^7;//ADC0832 PIN5
- sbit DATO = P3^7;//ADC0832 PIN6
- unsigned int Tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰數(shù)碼管顯示0~9的段碼表
- //unsigned int Tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數(shù)碼管顯示0~9的段碼表
- /*******************************共陰LED段碼表*******************************/
- unsigned char code temptab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- /*******************************定義全局變量********************************/
- unsigned char dat = 0x00; //AD值
- unsigned char count = 0x00; //定時器計數(shù)
- unsigned char CH; //通道變量
- unsigned char dis[4]; //顯示數(shù)值
- unsigned int sum=0;
- unsigned int sec_time; //記錄中斷次數(shù)
- unsigned char second,min,hour,year,month,day; //儲存秒
- //數(shù)組下標就是對應溫度
- code unsigned char Temp_adc[]={
- 196, 194, 191, 189, 186, 184, 181, 179, 176, 173, 170, 168,
- 165, 162, 159, 157, 154, 151, 148, 145, 142, 139, 136, 132,
- 129, 126, 123, 117, 114, 113, 112, 110, 109, 106, 104, 101,
- 99, 96, 94, 91, 89, 87, 84, 82, 80, 78, 76, 74, 71, 70, 68, 66, 64, 62,
- 60, 59, 57, 55, 54, 52, 51, 49, 48, 47, 45, 44, 43, 41, 40, 39, 38, 37,
- 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 27, 26, 25, 24, 24, 23, 22, 22,
- 21, 21, 20, 20, 19, 18, 18, 17, 17, 16, 16, 15, 15, 14, 14, 13, 13, 12,
- 12, 11, 11, 10, 10, 9, 9, 8, 8, 7, 7, 6, 6, 5, 5, 4, 4, 3, 3,
- 2, 2, 1, 1};
- //查找相近值,并返回下標
- unsigned char Find_data(unsigned char *a,unsigned char x,unsigned char len)
- {
- unsigned char i,min,r=0;
-
- min=abs(*a-x);
- for(i=0;i<len;i++)
- {
- if(abs(a[i]-x)<min)
- {
- min=abs(a[i]-x);
- r=i;
- }
- }
-
- return r;
- }
- /****************************************************************************
- 函數(shù)功能:AD轉(zhuǎn)換子程序
- 入口參數(shù):CH
- 出口參數(shù):dat
- ****************************************************************************/
- unsigned char adc0832(unsigned char CH)
- {
- unsigned char i,test,adval;
- unsigned char m;
- adval = 0x00;
- test = 0x00;
- Clk = 0; //初始化
- DATI = 1;
- _nop_();
- CS = 0;
- _nop_();
- Clk = 1;
- _nop_();
- if ( CH == 0x00 ) //通道選擇
- {
- Clk = 0;
- DATI = 1; //通道0的第一位
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- DATI = 0; //通道0的第二位
- _nop_();
- Clk = 1;
- _nop_();
- }
- else
- {
- Clk = 0;
- DATI = 1; //通道1的第一位
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- DATI = 1; //通道1的第二位
- _nop_();
- Clk = 1;
- _nop_();
- }
- Clk = 0;
- DATI = 1;
- for( i = 0;i < 8;i++ ) //讀取前8位的值
- {
- _nop_();
- adval <<= 1;
- Clk = 1;
- _nop_();
- Clk = 0;
- if (DATO)
- adval |= 0x01;
- else
- adval |= 0x00;
- }
- for (i = 0; i < 8; i++) //讀取后8位的值
- {
- test >>= 1;
- if (DATO)
- test |= 0x80;
- else
- test |= 0x00;
- _nop_();
- Clk = 1;
- _nop_();
- Clk = 0;
- }
- if (adval == test) //比較前8位與后8位的值,如果不相同舍去。若一直出現(xiàn)顯示為零,請將該行去掉
- dat = test;
- nop_();
- CS = 1; //釋放ADC0832
- DATO = 1;
- Clk = 1;
-
- return dat;
-
- }
- /***********************************************************************
- 函數(shù)功能:快速動態(tài)掃描延時,延時約0.6毫秒
- ************************************************************************/
- void delay(void)
- {
- unsigned int i;
- for(i=0;i<80;i++)
- ;
- }
- /******************************************************************
- 函數(shù)功能:顯示計數(shù)次數(shù)的子程序
- 入口參數(shù):x
- ********************************************************************/
- void Display(second,min,hour,year,month,day,unsigned char temperature)
- {
- P0=temptab[temperature%100/10];
-
- if(temperature>9)
- {P34=0; }
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
Keil代碼與Proteus仿真下載:
數(shù)碼管顯示萬年歷_時間_日期_NTC溫度221211.7z
(127.47 KB, 下載次數(shù): 46)
2022-12-12 03:21 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|