制作出來的NTC電阻測試儀實(shí)物圖如下:
20181108_225354.jpg (276.66 KB, 下載次數(shù): 45)
下載附件
2018-11-8 23:10 上傳
單片機(jī)源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //STC12C5A60S2 特殊功能寄存器 關(guān)于AD部分的寄存器定義
- sfr ADC_CONTR = 0xBC; //ADC控制寄存器 通道配置
- sfr ADC_RES = 0xBD; //ADC高8位數(shù)據(jù)寄存器(存AD轉(zhuǎn)換的結(jié)果,共10位)
- sfr ADC_LOW2 = 0xBE; //ADC低2位數(shù)據(jù)寄存器(存AD轉(zhuǎn)換的結(jié)果,共10位)
- sfr P1ASF = 0x9D; //P1第二功能選擇寄存器
- unsigned char ch0 ; //ADC通道選擇,本例程選擇P1.0為AD轉(zhuǎn)換,其他P1口做普通IO用 01234567
- unsigned int ad_out;//ADC_CONTR寄存器的位變量定義
- #define ADC_POWER 0x80 //ADC power control bit
- #define ADC_FLAG 0x10 //ADC complete flag
- #define ADC_START 0x08 //ADC start control bit
- #define ADC_SPEEDLL 0x00 //420 clocks
- #define ADC_SPEEDL 0x20 //280 clocks
- #define ADC_SPEEDH 0x40 //140 clocks
- #define ADC_SPEEDHH 0x60 //70 clocks
-
- /***************************功能定義***************************/
- #define LCD12864_W_COM 0xF8 //寫指令
- #define LCD12864_R_COM 0xFC //讀指令
- #define LCD12864_W_DAT 0xFA //寫數(shù)據(jù)
- #define LCD12864_R_DAT 0xFE //讀數(shù)據(jù)
- #ifndef __LCD12864_H__
- #define __LCD12864_H__
- #define LCD12864_COM 0 //輸入指令
- #define LCD12864_DAT 1 //輸入數(shù)據(jù)
- #define LCD12864_CLEAR 0x01 //清除顯示
- #define LCD12864_CURSOR 0x02 //位址歸位,游標(biāo)回原點(diǎn)
- #define LCD12864_CURSOR_RLF 0x04 //光標(biāo)左移,整體顯示不移動(dòng)
- #define LCD12864_CURSOR_RRF 0x06 //光標(biāo)右移,整體顯示不移動(dòng)
- #define LCD12864_CURSOR_RLN 0x05 //光標(biāo)左移,整體顯示移動(dòng)
- #define LCD12864_CURSOR_RRN 0x07 //光標(biāo)右移,整體顯示移動(dòng)
- #define LCD12864_DIS_OFF 0x08 //顯示狀態(tài)全關(guān)
- #define LCD12864_DIS_ON 0x0E //顯示狀態(tài)開
- #define LCD12864_DIS_CUR_ON 0x0E //游標(biāo)顯示開
- #define LCD12864_DIS_CURS_ON 0x0F //游標(biāo)位置顯示開
- #define LCD12864_CURSOR_RL 0x10 //游標(biāo)左移
- #define LCD12864_CURSOR_RR 0x14 //游標(biāo)右移
- #define LCD12864_CURDIS_RL 0x18 //整體顯示左移,光標(biāo)跟隨
- #define LCD12864_CURDIS_RR 0x1C //整體顯示又移,光標(biāo)跟隨
- #define LCD12864_COM_BASIC 0x30 //基本指令集動(dòng)作
- #define LCD12864_COM_PLOT_ON 0x36 //擴(kuò)展指令集動(dòng)作,繪圖顯示ON
- #define LCD12864_COM_PLOT_OFF 0x34 //擴(kuò)展指令集動(dòng)作,繪圖顯示OFF
- #define LCD12864_STAND_TO 0x31 //進(jìn)入待命模式
- #define LCD12864_PLACE_ROLL 0x03 //允許輸入卷動(dòng)位址
- #define LCD12864_PLACE_IRAM 0x02 //允許輸入IRAM位址
- #define LCD12864_REVERES_13 0x04 //選擇一、三行同時(shí)作反白顯示
- #define LCD12864_REVERES_24 0x05 //選擇二、四行同時(shí)作反白顯示
- #define LCD12864_REST_ON 0x08 //進(jìn)入睡眠模式
- #define LCD12864_REST_OFF 0x0C //脫離睡眠模式
- #define LCD12864_W_COM 0xF8 //寫指令
- #define LCD12864_R_COM 0xFC //讀指令
- #define LCD12864_W_DAT 0xFA //寫數(shù)據(jù)
- #define LCD12864_R_DAT 0xFE //讀數(shù)據(jù)
- //======串口模式=======
- sbit LCD12864_CS = P2^7; //片選信號輸入
- sbit LCD12864_STD = P2^6; //串行數(shù)據(jù)輸入
- sbit LCD12864_SCLK = P2^5; //串行移位脈沖輸入
- sbit LCD12864_PSB = P2^4; //串并模式選擇 0:串口,1:并口
- sbit LCDRST = P2^3;
- sbit sclk = P2^0;//1302
- sbit io= P2^1;//1302
- sbit rst= P2^2;//1302
- uint pcs=0;//計(jì)數(shù)
- uint pcs1=0;
- sbit bb= P1^7; //bepp
- unsigned char frq;
- sbit ntcok= P1^6; //NTC OK
- sbit ntcno= P1^5; //NTC
- sbit k1= P1^4; //NTC OK
- sbit k= P3^7; //k為轉(zhuǎn)換開關(guān),非自彈按鍵
- code unsigned int vt_table[]= // 電壓溫度對照表 440/2=220度(精度0.5)
- {
- 6000,5800,5700,5600,5500,5400,5300,5200,5100,5000,//0-5度左右
- 4980,4960,4940,4920,4900,4880,4860,4840,4820,4800,//5-10度左右
- 4780,4760,4740,4720,4700,4680,4660,4640,4620,4600,//11-15度左右
- 4580,4560,4540,4520,4500,4480,4460,4440,4420,4400,//16-20度左右
- 4360,4320,4280,4240,4200,4180,4160,4140,4120,4100, //21-25度左右
- 4080,4060,4040,4020,4000,3980,3960,3940,3920,3900, //26-30度左右
- 3890,3880,3870,3860,3850,3840,3830,3820,3810,3800, //31-35度左右
- 3790,3780,3770,3760,3750,3740,3730,3720,3710,3700, //36-40度左右
- 3690,3680,3670,3660,3650,3640,3630,3620,3610,3600, //41-45度左右
- 3590,3580,3570,3560,3550,3540,3530,3520,3510,3500, //46-50度左右
- 3480,3460,3440,3420,3400,3380,3360,3340,3320,3400, //41-50度左右
- 3390,3380,3370,3360,3350,3340,3330,3320,3310,3300, //41-60度左右
- 3290,3280,3270,3260,3250,3240,3230,3220,3210,3200, //51-60度左右
- 3180,3160,3140,3120,3100,3080,3060,3040,3020,3000, //51-70度左右
- 2980,2960,2940,2920,2900,2880,2860,2840,2820,2900, //61-70度左右
- 2890,2880,2870,2860,2850,2840,2830,2820,2810,2800, //61-80度左右
- 2790,2780,2770,2760,2750,2740,2730,2720,2710,2700, //71-80度左右
- 2690,2680,2670,2660,2650,2640,2630,2620,2610,2600, //71-90度左右
- 2580,2560,2540,2520,2500,2480,2460,2440,2420,2400, //81-85度左右
- 2380,2360,2340,2320,2300,2280,2260,2240,2220,2200, //91-100度左右
- 2190,2180,2170,2160,2150,2140,2130,2120,2110,2100, //101-110度左右
- 2095,2090,2085,2080,2075,2070,2065,2060,2055,2050, //101-110度左右
- 2045,2040,2035,2030,2025,2020,2015,2010,2005,2000, //111-120度左右
- 1995,1990,1985,1980,1975,1970,1965,1960,1955,1950, //111-120度左右
- 1945,1940,1935,1930,1925,1920,1915,1910,1905,1900, //121-130度左右
- 1895,1890,1885,1880,1875,1870,1865,1860,1855,1850, //121-130度左右
- 1845,1840,1835,1830,1825,1820,1815,1810,1805,1800, //131-140度左右
- 1795,1790,1785,1780,1775,1770,1765,1760,1755,1750, //131-140度左右
- 1745,1740,1735,1730,1725,1720,1715,1710,1705,1700, //141-150度左右
- 1695,1690,1685,1680,1675,1670,1665,1660,1655,1650, //141-150度左右
- 1645,1640,1635,1630,1625,1620,1615,1610,1605,1600, //151-160度左右
- 1595,1590,1585,1580,1575,1570,1565,1560,1555,1550, //151-160度左右
- 1545,1540,1535,1530,1525,1520,1515,1510,1505,1500, //161-170度左右
- 1495,1490,1485,1480,1475,1470,1465,1460,1455,1450, //161-170度左右
- 1445,1440,1435,1430,1425,1420,1415,1410,1405,1400, //171-180度左右
- 1395,1390,1385,1380,1375,1370,1365,1360,1355,1350, //171-180度左右
- 1345,1340,1335,1330,1325,1320,1315,1310,1305,1300, //181-190度左右
- 1295,1290,1285,1280,1275,1270,1265,1260,1255,1250, //181-190度左右
- 1245,1240,1235,1230,1225,1220,1215,1210,1205,1200, //191-200度左右
- 1195,1190,1185,1180,1175,1170,1165,1160,1155,1150, //191-200度左右
- 1145,1140,1135,1130,1125,1120,1115,1110,1105,1100, //210-210度左右
- 1095,1090,1085,1080,1075,1070,1065,1060,1055,1050, //210-210度左右
- 1045,1040,1035,1030,1025,1020,1015,1010,1005,1000, //211-220度左右
- 995,990,985,980,975,970,965,960,955,950, //211-220度左右
-
- }; //查表每一組數(shù)代表1度。如vt_table[]=3949時(shí)為6度
- unsigned char code logo[]={
- /*-- 調(diào)入了一幅圖像:logo.bmp -- */
- /*-- 寬度x高度=128x64 歡迎使用本產(chǎn)品LOGO --*/
- /*-- 調(diào)入了一幅圖像:C:\Documents and Settings\lwd\桌面\新建文件夾\X.bmp --*/
- /*-- 寬度x高度=128x64 --*/
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X7F,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X03,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X17,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X3F,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X6F,0XFF,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X6F,0XFF,0XFF,0XFC,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0XEF,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X01,0XE7,0XFF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X01,0XE3,0XFF,0XFF,0XFF,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X03,0XE3,0XFF,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X07,0XE1,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X07,0XC0,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X0F,0XC0,0X7F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X0F,0XE0,0X1F,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XE0,0X07,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XE0,0X01,0XFF,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XE0,0X00,0X3F,0XFF,0XF0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XE0,0X00,0X01,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X3F,0XE0,0X00,0X1C,0X03,0XF8,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X3F,0XF0,0X00,0X1F,0XFC,0X78,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X3F,0XF0,0X00,0X3F,0XFF,0X98,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X3F,0XF0,0X00,0X7F,0XFF,0XC8,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X3F,0XF8,0X0F,0XFF,0XFF,0XE8,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XF9,0XFF,0XFF,0XFF,0XE8,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XFC,0XFF,0XFF,0XFF,0XE0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X1F,0XFE,0XFF,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X7F,0XFF,0XFF,0XC0,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X0F,0XFF,0X9F,0XFF,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0XCF,0XFF,0XFE,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X01,0XFF,0XE3,0XFF,0XF8,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0XFF,0XF8,0X3F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XFF,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x20,0x3F,0xF8,0x00,0x00,0x00,0x03,0x07,0xFF,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x30,0x3F,0xF8,0x00,0x00,0x00,0x06,0x07,0xFF,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x38,0x03,0x80,0x00,0x00,0x00,0x0F,0xF6,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x3C,0x03,0x80,0x00,0x00,0x00,0x1F,0xF6,0xFD,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x06,0x03,0x80,0x00,0x00,0x00,0x71,0x86,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x41,0x86,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x30,0x03,0x80,0x00,0x00,0x00,0x0F,0xF6,0xFD,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x38,0x03,0x80,0x00,0x00,0x00,0x0F,0xF6,0x85,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x18,0x03,0x80,0x00,0x00,0x00,0x01,0x86,0x85,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x0C,0x03,0x80,0x00,0x00,0x00,0x0F,0xF6,0x85,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x0F,0xF6,0x85,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x01,0x86,0xFD,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x01,0x86,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x03,0x03,0x80,0x00,0x00,0x00,0x01,0x86,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x1E,0x03,0x80,0x00,0x00,0x00,0x01,0xA6,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x7C,0x3F,0xF8,0x00,0x00,0x00,0x01,0xE6,0x03,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xF8,0x3F,0xF8,0x00,0x00,0x00,0x00,0xC6,0x01,0x80,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"未命名文件",0*/
- /* (128 X 25 )*/
- };
- unsigned int num,i;
- uchar S1num,flag,second,minute,hour,week,day,month,year,fsec;//秒、分、時(shí)、星期、日、月、年
- bit keyflag=0;//按鍵標(biāo)志位
- unsigned char code tabe[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//查表法//0-9數(shù)字
- /*******************************延時(shí)函數(shù)**********************************************/
- void Delay1Ms(uchar t)
- {
- uchar i;
- for (;t>0;t--)
- {
- for (i=0;i<138;i++)
- {
- _nop_();_nop_();_nop_();_nop_();_nop_();
- _nop_();_nop_();_nop_();_nop_();_nop_();
- }
- }
- }
- void Delay1s(uchar t)
- {
- for (;t>0;t--)
- {
- Delay1Ms(250);
- Delay1Ms(250);
- Delay1Ms(250);
- Delay1Ms(250);
- }
- }
- void delayus()//us微秒延時(shí)
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- void delay(unsigned int n)
- {
- unsigned int x;
- while (n--)
- {
- x = 5000;
- while (x--);
- }
- }
- void InitADC() //10位AD數(shù)據(jù)緩存
- {
- unsigned char i;
-
- P1ASF = 0x01;//設(shè)置P1.0為AD腳,P1ASF = 0x01 其他P1口為普通IO功能
-
- ADC_RES = 0; //清空AD輸出高8位
-
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch0;
- delay(8); //ADC power-on delay and Start A/D conversion
- }
- /*****************************向12864寫入8位數(shù)據(jù)*************************************/
- void LCD12864_Wbyte(uchar byte)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- LCD12864_SCLK = 0;
- byte <<= 1; //左移待寫入數(shù)據(jù),使最高位移至CY
- LCD12864_STD = CY; //寫入一位數(shù)據(jù)
- LCD12864_SCLK = 1;
- LCD12864_SCLK = 0;
- }
- }
- /***************************從12864讀出8位數(shù)據(jù)***返回:sdat************************************/
- uchar LCD12864_Rbyte(void)
- {
- uchar i,sdat,temp1,temp2;
- temp1 = 0;
- temp2 = 0;
- //==========12864的串行數(shù)據(jù)輸出形式是D7-D6-D5-D4-0-0-0-0-D3-D2-D1-D0-0-0-0-0,故要度兩個(gè)八位整合==============
- for(i=0;i<8;i++)
- {
- temp1=temp1 << 1;
- LCD12864_SCLK = 0;
- LCD12864_SCLK = 1;
- LCD12864_SCLK = 0;
- if( LCD12864_STD ) temp1|=0x01; //tempe1:D7-D6-D5-D4-0-0-0-0
- }
- for(i=0;i<8;i++)
- {
- temp2=temp2 << 1;
- LCD12864_SCLK = 0;
- LCD12864_SCLK = 1;
- LCD12864_SCLK = 0;
- if( LCD12864_STD ) temp2|=0x01; //tempe2:D3-D2-D1-D0-0-0-0-0
- }
- sdat = ((temp1 & 0xf0)|(temp2 >> 4)); //取出D7\D6\D5\D4\D3\D2\D1\D0
- return sdat; //返回一個(gè)值(sdat)
- }
- /****************************讀忙狀態(tài)**************************************/
- void LCD12864_busy( void )
- {
- do LCD12864_Wbyte( LCD12864_R_COM ); //LCD12864_RW=11111,RW(1),RS(0),0
- while( LCD12864_Rbyte() & 0x80 ); //讀BF,直到BF == 0
- }
- /*************************dat_com=0寫指令,dat_com=1寫數(shù)據(jù)*****************************************/
- void LCD12864_W (bit dat_com,uchar byte)
- {
- uchar temp;
- if(dat_com == 0) //為零,寫入指令
- temp = LCD12864_W_COM; //11111,RS(0),RW(0),0
- else //否則,寫入數(shù)據(jù)
- temp = LCD12864_W_DAT; //11111,RS(1),RW(0),0
- LCD12864_CS = 1; //片選使能
- LCD12864_busy(); //LCD忙檢測
- LCD12864_Wbyte(temp); //寫入模式選擇,指令還是數(shù)據(jù)
- LCD12864_Wbyte(byte&0xf0); //寫入字節(jié)
- LCD12864_Wbyte((byte<<4)&0xf0); //寫入字節(jié)
- LCD12864_CS = 0; //片選關(guān)閉
- }
- /****************************LCD12864初始化**************************************/
- void LCD12864_Init(void)
- {
- LCDRST=1;
- LCD12864_PSB = 0; //選擇串口模式
- LCD12864_W(LCD12864_COM,0x30); //基本指令功能.
- LCD12864_W(LCD12864_COM,0x03); //允許輸入卷動(dòng)位址
- LCD12864_W(LCD12864_COM,0x0c); //脫離隨眠狀態(tài),顯示打開,關(guān)光標(biāo),反白關(guān).
- LCD12864_W(LCD12864_COM,0x01); //清屏指令.
- LCD12864_W(LCD12864_COM,0x06); //AC自動(dòng)加一,光標(biāo)右移,整體顯示不移動(dòng)
- }
- /**************************LCD12864字符位置自定義顯示****************************************/
- void LCD12864_WPoss(uchar x,uchar y,uchar *buff)
- {
- uchar addr,i=0;
- switch (x)
- {
- case 0:addr=0x80;break;
- case 1:addr=0x90;break;
- case 2:addr=0x88;break;
- case 3:addr=0x98;break;
- }
- addr=addr+y;
- LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC); //8BitMCU,基本指令集合
- LCD12864_W(LCD12864_COM,addr); //顯示在自定義位置
- while(buff[i]!='\0')
- {
- LCD12864_W(LCD12864_DAT,buff[i++]);
- if(++y==16)
- {
- y=0;
- if(++x==4) x=0;
- switch (x)
- {
- case 0:addr=0x80;break;
- case 1:addr=0x90;break;
- case 2:addr=0x88;break;
- case 3:addr=0x98;break;
- }
- addr=addr+y;
- LCD12864_W(LCD12864_COM,addr);
- }
-
- }
- }
- /************************************以上為DS18B20內(nèi)容******************************************/
- /******************DS18B20溫度***********************/
- sbit DS18B20=P0^6;
- #define DS18B20_H {DS18B20=1;}
- #define DS18B20_L {DS18B20=0;}
- uchar DS18B20_V() {return DS18B20;}
- void Read_Temp();
- uchar DS18B20_Reset();
- void DS18B20_WriteData(unsigned char wData);
- uchar DS18B20_ReadData();
- uchar g=2;//STC12比STC8951快的倍數(shù)(只有1-2倍可用)
- /***************************18B20溫度返回*******wd******************/
- uchar temperature[2];//定義一個(gè)整合數(shù)據(jù)
- long wd()
- {
- unsigned char temp_data;
- long wd=0;//溫度值清0
- temp_data = temperature[1];
- temp_data &= 0xf0; //取高4位
- if (temp_data==0xf0) //判斷是正溫度還是負(fù)溫度讀數(shù)
- {
- //負(fù)溫度讀數(shù)求補(bǔ),取反加1,判斷低8位是否有進(jìn)位
- if (temperature[0]==0)
- { //有進(jìn)位,高8位取反加1
- temperature[0]=~temperature[0]+1;
- temperature[1]=~temperature[1]+1;
- }
- else
- { //沒進(jìn)位,高8位不加1
- temperature[0]=~temperature[0]+1;
- temperature[1]=~temperature[1];
- }
- }
- wd=(temperature[1]*256+temperature[0])*(0.0625*10000);
- return wd;//返回一個(gè)數(shù)據(jù)(溫度)用于顯示
- }
- /**********************讀溫度數(shù)據(jù)函數(shù)***********************************/
- void Read_Temp()
- {
- unsigned char i;
- DS18B20_Reset(); //復(fù)位
- DS18B20_WriteData(0xcc); //跳過ROM命令
- DS18B20_WriteData(0x44); //溫度轉(zhuǎn)換命令
- DS18B20_Reset(); //復(fù)位
- DS18B20_WriteData(0xcc); //跳過ROM命令
- DS18B20_WriteData(0xbe); //讀DS18B20溫度暫存器命令
- for (i=0;i<2;i++)
- {
- temperature[i]=DS18B20_ReadData();
- }
- DS18B20_Reset(); //復(fù)位,結(jié)束讀數(shù)據(jù)
- }
- /****************************DS18B20復(fù)位及存在檢測******************************/
- uchar DS18B20_Reset()
- {
- unsigned char i;
- uchar flag; //DS18B20存在標(biāo)志位
- DS18B20_L; //拉低總線
- for (i=(240*g);i>0;i--);//延時(shí)480微秒,產(chǎn)生復(fù)位脈沖
- DS18B20_H; //釋放總線
- for (i=(40*g);i>0;i--); //延時(shí)80微秒對總線采樣
- flag = DS18B20_V();
- for (i=(200*g);i>0;i--); //延時(shí)400微秒等待總線恢復(fù)
- return (flag); //根據(jù)flag的值可以知道DS18B20是否存在或損壞
- } //可以加聲音告警提示DS18B20故障
- /***********************寫數(shù)據(jù)到DS18B20 ***********************************/
- void DS18B20_WriteData(unsigned char wData)
- {
- unsigned char i,j;
- for (i=8;i>0;i--)
- {
- DS18B20_L; //拉低總線,產(chǎn)生寫信號
- for (j=(7*g);j>0;j--); //延時(shí)14us
- if((bit)(wData&0x01)==1)//發(fā)送1位
- {
- DS18B20_H;
- }
- else
- {
- DS18B20_L;
- }
- for (j=(30*g);j>0;j--); //延時(shí)60us,寫時(shí)序至少要60us
- DS18B20_H; //釋放總線,等待總線恢復(fù)
- wData>>=1; //準(zhǔn)備下一位數(shù)據(jù)的傳送
- }
- }
- /************************DS18B20中讀出數(shù)據(jù)**********************************/
- unsigned char DS18B20_ReadData()
- {
- unsigned char i,j,TmepData;
- for (i=8;i>0;i--)
- {
- TmepData>>=1;
- DS18B20_L; //拉低總線,產(chǎn)生讀信號
- for (j=(2*g);j>0;j--); //延時(shí)4us
- DS18B20_H; //釋放總線,準(zhǔn)備讀數(shù)據(jù)
- for (j=(4*g);j>0;j--); //延時(shí)8微秒讀數(shù)據(jù)
- if (DS18B20_V()) TmepData |= 0x80;
- for (j=(15*g);j>0;j--); //延時(shí)30us
- DS18B20_H; //拉高總線,準(zhǔn)備下一位數(shù)據(jù)的讀取.
- }
- return (TmepData);//返回讀到的數(shù)據(jù)
- }
- /********************寫一個(gè)字節(jié)**************/
- void write_1302byte(uchar com)
- {
- uchar i;
- sclk=0;
- delayus();
- for(i=8;i>0;i--)
- {
- io=com&0x01;//只要是從低位取數(shù),向高位一定要和0X01與
- delayus();
- sclk=1;//為寫數(shù)據(jù)制造上升沿。
- delayus();
- sclk=0;//為下一次上升沿寫下一個(gè)字節(jié)做準(zhǔn)備
- com>>=1;//將數(shù)據(jù)向右移一位,準(zhǔn)備寫入下一個(gè)數(shù)據(jù)
- }
- }
- /********************讀一個(gè)字節(jié)***************/
- uchar read_1302byte()
- {
- uchar i,dat;
- delayus();
- for(i=8;i>0;i--)
- {
- dat>>=1;
- if(io==1)
- {
- dat|=0x80;//將1取出,寫在dat的最高位。
- }
- sclk=1;//把sclk拉高,為讀一個(gè)字節(jié)的下降沿做準(zhǔn)備
- delayus();//稍等制造一個(gè)高電平
- sclk=0;//為讀一個(gè)字節(jié)制造下降沿
- delayus();
- }
- return dat;
- }
- /*************寫入一個(gè)時(shí)間位*****************/
- void write_1302(uchar add,uchar dat)
- {
- rst=0;
- delayus();
- sclk=0;
- delayus();
- rst=1;
- write_1302byte(add);
- delayus();
- write_1302byte(dat);
- delayus();
- rst=0;
- }
- /****************讀1302的地址******************/
- uchar read_1302add(uchar add)
- {
- uchar timedat;
- rst=0;
- _nop_();
- sclk=0;
- _nop_();
- rst=1;
- write_1302byte(add);//寫入要讀的地址
- timedat=read_1302byte();//將上面地址中的數(shù)據(jù)賦給timedat
- sclk=1;
- _nop_();
- rst=0;
- io=0;//字節(jié)讀操作完后,將ds1302的IO端口置零就可以消除85、45和??閃現(xiàn)等問題
- return timedat;
- }
- /****************初始化1302*********************/
- void init_1302()
- {
- flag=read_1302add(0x81);//讀秒寄存器的最高位,讀出時(shí)鐘狀態(tài)
- if(flag&0x80)//判斷時(shí)鐘是否關(guān)閉,若內(nèi)部關(guān)閉,則初始,若沒關(guān)閉,不初始化,還在走
- {
- write_1302(0x8e,0x00);//去除寫保護(hù)
- write_1302(0x80,((10/10)<<4|(10%10)));//寫秒寄存器,并寫入初值55
- write_1302(0x82,((25/10)<<4|(25%10)));//寫分寄存器,并寫入初值59
- write_1302(0x84,((1/10)<<4|(1%10)));//寫小時(shí)寄存器,并寫入初值23
- write_1302(0x86,((10/10)<<4|(10%10)));//寫日寄存器,并寫入初值18
- write_1302(0x88,((4/10)<<4|(4%10)));//寫月寄存器,并寫入初值2
- write_1302(0x8a,((2/10)<<4|(2%10)));//寫周寄存器,并寫入初值5
- write_1302(0x8c,((18/10)<<4|(18%10)));//寫年寄存器,并寫入初值12,不能寫2012年
- write_1302(0x90,0xa5);//寫充電方式
- write_1302(0x8e,0x80);//加上寫保護(hù) 去寫保護(hù)和if(flag&0x80)//判斷 可 改 時(shí) 間
- }
- }
- /*****************讀出秒的十進(jìn)制數(shù)***************************/
- uchar readsecond()
- {
- uchar dat;
- dat=read_1302add(0x81);
- second=((dat&0x70)>>4)*10+(dat&0x0f);
- return second;
- }
- /*****************讀出分的十進(jìn)制數(shù)***************************/
- uchar readminute()
- {
- uchar dat;
- dat=read_1302add(0x83);
- minute=((dat&0x70)>>4)*10+(dat&0x0f);
- return minute;
- }
- /*****************讀出小時(shí)的十進(jìn)制數(shù)***************************/
- uchar readhour()
- {
- uchar dat;
- dat=read_1302add(0x85);
- hour=((dat&0x70)>>4)*10+(dat&0x0f);
- return hour;
- }
- /*****************讀出天的十進(jìn)制數(shù)***************************/
- uchar readday()
- {
- uchar dat;
- dat=read_1302add(0x87);
- day=((dat&0x70)>>4)*10+(dat&0x0f);
- return day;
- }
- /*****************讀出月的十進(jìn)制數(shù)***************************/
- uchar readmonth()
- {
- uchar dat;
- dat=read_1302add(0x89);
- month=((dat&0x70)>>4)*10+(dat&0x0f);
- return month;
- }
- /*****************讀出周的十進(jìn)制數(shù)***************************/
- uchar readweek()
- {
- uchar dat;
- dat=read_1302add(0x8b);
- week=((dat&0x70)>>4)*10+(dat&0x0f);
- return week;
- }
- /*****************讀出年的十進(jìn)制數(shù)***************************/
- uchar readyear()
- {
- uchar dat;
- dat=read_1302add(0x8d);
- year=((dat&0xf0)>>4)*10+(dat&0x0f);
- return year;
- }
- /************************讀出所有時(shí)間**********************/
- readtime()
- {
- readsecond();
- readminute();
- readhour();
- readday();
- readmonth();
- readweek();
- readyear();
- }
- /************************顯示11************************************/
- void display11(long temp)
- {
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- //temp=12345678;
- dt1 = temp%10;//1位
- dt2 = temp%100/10;//2位
- dt3 = temp%1000/100;//3位
- dt4 = temp%10000/1000;//4位
- dt5 = temp%100000/10000;//5位
- dt6 = temp%1000000/100000;//6位
- dt7 = temp%10000000/1000000;//7位
- dt8 = temp/10000000;//8位 最高位
- LCD12864_WPoss(3,5," ");//第1行顯示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- //LCD12864_W(1,tabe[dt8]);//6位
- //LCD12864_W(1,tabe[dt7]);//5位
- LCD12864_W(1,tabe[dt6]);//4位
- LCD12864_W(1,tabe[dt5]);//3位
- //LCD12864_W(1,0x2e);
- //LCD12864_W(1,tabe[dt4]);//4位
- // LCD12864_W(1,tabe[dt3]);//3位
- //LCD12864_W(1,tabe[dt2]);//4位
- //LCD12864_W(1,tabe[dt1]);//3位
- LCD12864_WPoss(3,7,"℃");//第1行顯示表1
- }
- /************************display2顯示2************************************/
- void display1(uint dat1,dat2,dat3)
- {
- uint ge1,ge2,ge3,shi1,shi2,shi3;
- dat1=day;
- dat2=month;
- dat3=year;
- ge1= dat1%10;//1位
- shi1= dat1%100/10;//2位
- ge2= dat2%10;//3位
- shi2= dat2%100/10;//4位
- ge3= dat3%10;//5位
- shi3 = dat3%100/10;//6位
- LCD12864_WPoss(3,0,"20");//第3行顯示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- readtime();//讀出所有時(shí)間
- LCD12864_W(1,tabe[shi3]);
- LCD12864_W(1,tabe[ge3]);
- LCD12864_W(1,0x2d);
- LCD12864_W(1,tabe[shi2]);
- LCD12864_W(1,tabe[ge2]);
- LCD12864_W(1,0x2d);
- LCD12864_W(1,tabe[shi1]);
- LCD12864_W(1,tabe[ge1]);
- }
- /************************display2顯示2************************************/
- void display2(uint dat1,dat2,dat3,dat4 )
- {
- uint ge1,ge2,ge3,ge4,shi1,shi2,shi3,shi4;
- dat1=second;
- dat2=minute;
- dat3=hour;
- dat4=week;
- ge1= dat1%10;//1位
- shi1= dat1%100/10;//2位
- ge2= dat2%10;//3位
- shi2= dat2%100/10;//4位
- ge3= dat3%10;//5位
- shi3 = dat3%100/10;//6位
- ge4= dat4%10;//7位
- shi4 = dat4%100/10;//8位
- LCD12864_WPoss(1,0,"時(shí)間:");//第1行顯示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- readtime();//讀出所有時(shí)間
- LCD12864_W(1,tabe[shi3]);
- LCD12864_W(1,tabe[ge3]);
- LCD12864_W(1,0x3a);
- LCD12864_W(1,tabe[shi2]);
- LCD12864_W(1,tabe[ge2]);
- LCD12864_W(1,0x3a);
- LCD12864_W(1,tabe[shi1]);
- LCD12864_W(1,tabe[ge1]);
- //LCD12864_W(1,0x2f);//顯示"/ "
- //LCD12864_W(1,tabe[shi4]);
- //LCD12864_W(1,tabe[ge4]); // 顯示周
- if(ge4==1){LCD12864_WPoss(1,7,"一"); }
- if(ge4==2){LCD12864_WPoss(1,7,"二"); }
- if(ge4==3){LCD12864_WPoss(1,7,"三"); }
- if(ge4==4){LCD12864_WPoss(1,7,"四"); }
- if(ge4==5){LCD12864_WPoss(1,7,"五"); }
- if(ge4==6){LCD12864_WPoss(1,7,"六"); }
- if(ge4==7){LCD12864_WPoss(1,7,"日"); }
- }
- /************************顯示溫度和電阻計(jì)算3************************************/
- void display3(long temp1)
- {
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- uchar x;
- uint i;
- num=(39*ad_out*(3470*(1/(273.15+15)-1/(273.15+25))))/2; //溫度計(jì)算與修正約10K
- for(i=0;i<440;i++)//判斷采集電壓值大于或者等于表格電壓時(shí),停下來并記錄當(dāng)前i值
- {
- if(num >= vt_table[i])
- {
- num=i;
- break; //檢測到即跳出循環(huán),否則繼續(xù)循環(huán)
- }
- }
- temp1=(num*10)/2;//放大10倍
- if(temp1<1)
- temp1=9999; //最大
- if(temp1<=400)// 回到26度以下充電才能再次開始
- {
- LCD12864_WPoss(0,1,"充電進(jìn)行中∝");//第1行顯示表1 ≈≈∝≠
- display2();//顯示時(shí)間 //Ok
- bb=1;
- ntcok=0; //NTC OK
- ntcno=1;
- }
- else
- {
- if(temp1>=800)//充電報(bào)警溫度
- {
- LCD12864_WPoss(0,1,"充電中斷 ≠");//第1行顯示表1 ≈≈∝≠
-
- ntcok=1; //NTC OK
- for(x=2;x>0;x--)
- {
- LCD12864_WPoss(1,0," 超溫報(bào)警! ");//第1行顯示表1 ≈≈∝≠
- ntcno=0;
- bb=0;
- Delay1s(1);
- LCD12864_WPoss(1,0," ");//第1行顯示表1 ≈≈∝≠
- ntcno=1;
- bb=1;
- Delay1s(1);
- }
- }
- }
- dt1 = temp1%10;//1位
- dt2 = temp1%100/10;//2位
- dt3 = temp1%1000/100;//3位
- dt4 = temp1%10000/1000;//4位
- dt5 = temp1%100000/10000;//5位
- dt6 = temp1%1000000/100000;//6位
- dt7 = temp1%10000000/1000000;//7位
- dt8 = temp1/10000000;//8位 最高位
- LCD12864_WPoss(2,0,"溫度:");//第2行顯示表1
- //LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- //LCD12864_W(1,tabe[dt8]);//8位
- //LCD12864_W(1,tabe[dt7]);//7位
- //LCD12864_W(1,tabe[dt6]);//6位 // ° Ω℃℉
- //LCD12864_W(1,tabe[dt5]);//5位
- LCD12864_W(1,tabe[dt4]);//4位
- LCD12864_W(1,tabe[dt3]);//3位
- LCD12864_W(1,tabe[dt2]);//2位
- LCD12864_W(1,0x2e);// 顯示點(diǎn)
- LCD12864_W(1,tabe[dt1]);//1位
- LCD12864_WPoss(2,6,"℃");//第1行顯示表1
- }
- /************************display4顯示4************************************/
- void display4(uint temp1)
- {
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- temp1=ad_out*(3270*(1/(273.15+25)-1/(273.15+85))); //溫度計(jì)算與修正約10K
- if(temp1>1250)
- {temp1=9999;}
- dt1 = temp1%10;//1位
- dt2 = temp1%100/10;//2位
- dt3 = temp1%1000/100;//3位
- dt4 = temp1%10000/1000;//4位
- dt5 = temp1%100000/10000;//5位
- dt6 = temp1%1000000/100000;//6位
- dt7 = temp1%10000000/1000000;//7位
- dt8 = temp1/10000000;//8位 最高位
- LCD12864_WPoss(3,0,"電阻:");//第2行顯示表1
- //LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- //LCD12864_W(1,tabe[dt8]);//8位
- //LCD12864_W(1,tabe[dt7]);//7位
- //LCD12864_W(1,tabe[dt6]);//6位 // ° Ω℃℉
- //LCD12864_W(1,tabe[dt5]);//5位
- LCD12864_W(1,tabe[dt4]);//4位
- LCD12864_W(1,tabe[dt3]);//3位
- LCD12864_W(1,0x2e);// 顯示點(diǎn)
- LCD12864_W(1,tabe[dt2]);//2位
- LCD12864_W(1,tabe[dt1]);//1位
- LCD12864_WPoss(3,6,"K");//第1行顯示表1
- }
- void Disp_img(unsigned char *img) //圖形方式12864顯示字模221 橫向取膜
- {
- unsigned char i,j;
- unsigned int k = 0;
- LCD12864_W(0,0x36); //圖形方式
- for(i=0;i<32;i++)
- {
- LCD12864_W(0,0x80+i);
- LCD12864_W(0,0x80);
- for(j=0;j<16;j++)
- {
- LCD12864_W(1,img[k++]);
- }
- }
- for(i=0;i<32;i++)
- {
- LCD12864_W(0,0x80+i);
- LCD12864_W(0,0x88);
- for(j=0;j<16;j++)
- {
- LCD12864_W(1,img[k++]);
- }
- }
- }
- ////////////////////////*************第二*************************************************//////
- /************************顯示1************************************/
- void display18(long temp)
- {
- /*
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- dt1 = temp%10;//1位
- dt2 = temp%100/10;//2位
- dt3 = temp%1000/100;//3位
- dt4 = temp%10000/1000;//4位
- dt5 = temp%100000/10000;//5位
- dt6 = temp%1000000/100000;//6位
- dt7 = temp%10000000/1000000;//7位
- dt8 = temp/10000000;//8位 最高位
- LCD12864_WPoss(1,0,"溫度:");//第1行顯示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- LCD12864_W(1,tabe[dt6]);//6位
- LCD12864_W(1,tabe[dt5]);//5位
- LCD12864_W(1,0x2e);
-
- LCD12864_W(1,tabe[dt4]);//4位
- LCD12864_W(1,tabe[dt3]);//3位
- LCD12864_WPoss(1,6,"°C");//第1行顯示表1
- */
- LCD12864_WPoss(0,1,"智能電阻測試");//第1行顯示表1
- //LCD12864_WPoss(1,0,"范圍:NTC=10K");//第1行顯示表1
- }
- /************************display2顯示2************************************/
- /*
- void display28(uint dat1,dat2,dat3,dat4 )
- {
- uint ge1,ge2,ge3,ge4,shi1,shi2,shi3,shi4;
- dat1=second;
- dat2=minute;
- dat3=hour;
- dat4=week;
- ge1= dat1%10;//1位
- shi1= dat1%100/10;//2位
- ge2= dat2%10;//3位
- shi2= dat2%100/10;//4位
- ge3= dat3%10;//5位
- shi3 = dat3%100/10;//6位
- ge4= dat4%10;//7位
- shi4 = dat4%100/10;//8位
- LCD12864_WPoss(0,0,"時(shí)間:");//第1行顯示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- readtime();//讀出所有時(shí)間
- LCD12864_W(1,tabe[shi3]);
- LCD12864_W(1,tabe[ge3]);
- LCD12864_W(1,0x3a);
- LCD12864_W(1,tabe[shi2]);
- LCD12864_W(1,tabe[ge2]);
- LCD12864_W(1,0x3a);
- LCD12864_W(1,tabe[shi1]);
- LCD12864_W(1,tabe[ge1]);
- LCD12864_W(1,0x2f);
- //LCD12864_W(1,tabe[shi4]);
- LCD12864_W(1,tabe[ge4]);
- }
- /************************顯示溫度和電阻計(jì)算3************************************/
-
- void display38(long temp1)
- {
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- //temp1 = ad_out; //10位AD讀取的數(shù)值是0-1024,
- temp1=39*ad_out*(3470*(1/(273.15+15)-1/(273.15+25))); //溫度計(jì)算與修正約10K
- if(temp1>=1000&&temp1<10000)//>500&&<950/一個(gè)NTC約930K兩個(gè)就大于950用于判斷有幾個(gè)或沒有NTC在線
- { pcs1++; //
- ntcok=0;//
- ntcno=1;//
- bb=0;//
- Delay1Ms(1000);//等值
- bb=1;
- dt1 = temp1%10;//1位
- dt2 = temp1%100/10;//2位
- dt3 = temp1%1000/100;//3位
- dt4 = temp1%10000/1000;//4位
- dt5 = temp1%100000/10000;//5位
- dt6 = temp1%1000000/100000;//6位
- dt7 = temp1%10000000/1000000;//7位
- dt8 = temp1/10000000;//8位 最高位
- LCD12864_WPoss(2,0,"電阻:");//第2行顯示表1
- //LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- //LCD12864_W(1,tabe[dt8]);//8位
- //LCD12864_W(1,tabe[dt7]);//7位
- LCD12864_W(1,tabe[dt6]);//6位 // ° Ω℃℉
- LCD12864_W(1,tabe[dt5]);//5位
- LCD12864_W(1,tabe[dt4]);//4位
- LCD12864_W(1,0x2e);// 顯示點(diǎn)
- LCD12864_W(1,tabe[dt3]);//3位
- //LCD12864_W(1,tabe[dt2]);//2位
- //LCD12864_W(1,tabe[dt1]);//1位
- LCD12864_WPoss(2,6,"K ");//第1行顯示表1
- LCD12864_WPoss(1,0," 產(chǎn)品合格 ");//第2行顯示表1
- }
- else{
- if(temp1>=10000&&temp1<16000)
- {
- dt1 = temp1%10;//1位
- dt2 = temp1%100/10;//2位
- dt3 = temp1%1000/100;//3位
- dt4 = temp1%10000/1000;//4位
- dt5 = temp1%100000/10000;//5位
- dt6 = temp1%1000000/100000;//6位
- dt7 = temp1%10000000/1000000;//7位
- dt8 = temp1/10000000;//8位 最高位
- LCD12864_WPoss(2,0,"電阻:");//第2行顯示表1
- //LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- //LCD12864_W(1,tabe[dt8]);//8位
- //LCD12864_W(1,tabe[dt7]);//7位
- LCD12864_W(1,tabe[dt6]);//6位 // ° Ω℃℉
- LCD12864_W(1,tabe[dt5]);//5位
- LCD12864_W(1,tabe[dt4]);//4位
- LCD12864_W(1,0x2e);// 顯示點(diǎn)
- LCD12864_W(1,tabe[dt3]);//3位
- //LCD12864_W(1,tabe[dt2]);//2位
- //LCD12864_W(1,tabe[dt1]);//1位
- LCD12864_WPoss(2,6,"K ");//第1行顯示表1
- }
- else
- {
- LCD12864_WPoss(2,0,"電阻:*****");//第2行顯示表1
- LCD12864_WPoss(1,2," ");//第2行顯示表1
- ntcok=1;//
- ntcno=0;//
- bb=1;//
- pcs1=0;//用于清除計(jì)數(shù)
- } }
- if(pcs1==3&&bb==1) // 同時(shí)滿足兩個(gè)條件,測試放手才計(jì)數(shù)
- {
- pcs++;
- if(pcs>9998)pcs=9999; //如果最高溫度高于99.9度就只顯示99.9
- }
- }
- /************************display4顯示4************************************/
-
- void display48(uint temp1)
- {
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- temp1=pcs;
- dt1 = temp1%10;//1位
- dt2 = temp1%100/10;//2位
- dt3 = temp1%1000/100;//3位
- dt4 = temp1%10000/1000;//4位
- dt5 = temp1%100000/10000;//5位
- dt6 = temp1%1000000/100000;//6位
- dt7 = temp1%10000000/1000000;//7位
- dt8 = temp1/10000000;//8位 最高位
- LCD12864_WPoss(3,0,"已檢: ");//第2行顯示表1
- //LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0寫指令 1寫數(shù)據(jù)
- //LCD12864_W(1,tabe[dt8]);//8位
- //LCD12864_W(1,tabe[dt7]);//7位
- //LCD12864_W(1,tabe[dt6]);//6位 // ° Ω℃℉
- LCD12864_W(1,tabe[dt5]);//5位
- LCD12864_W(1,tabe[dt4]);//4位
- //LCD12864_W(1,0x2e);// 顯示點(diǎn)
- LCD12864_W(1,tabe[dt3]);//3位
- LCD12864_W(1,tabe[dt2]);//2位
- LCD12864_W(1,tabe[dt1]);//1位
- LCD12864_WPoss(3,6,"PCS ");//第1行顯示表1
- }
- /*****************************main**********************************************/
- void main()
- {
- uchar j;
- int i=0;
- Delay1s(1);
- LCD12864_Init();
- InitADC(); //AD初始化
- IE = 0xa0; //允許AD中斷
- init_1302();
- for(j=1;j>0;j-- )
- {
- LCD12864_WPoss(0,0,"全智能插頭測試儀");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(1,1,"");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(2,2,"NTC=10 k");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(3,0,"蘇州寶興電線電纜");//第1行顯示表1 ≈≈∝≠
- Delay1s(5);
- LCD12864_WPoss(0,0," ");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(1,0," ");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(2,0," ");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(3,0," ");//第1行顯示表1 ≈≈∝≠
- Delay1s(1);
- LCD12864_WPoss(0,0,"");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(1,1,"溫度檢測中--");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(2,2,"");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(3,0,"");//第1行顯示表1 ≈≈∝≠
- Delay1s(9);
- LCD12864_WPoss(0,0," ");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(1,0," ");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(2,0," ");//第1行顯示表1 ≈≈∝≠
- LCD12864_WPoss(3,0," ");//第1行顯示表1 ≈≈∝≠
- Delay1s(1);
- }
- Disp_img(logo); //顯示一幅畫面
- Delay1s(20);
- LCD12864_Init(); //再次初始化用于返回
- while(1)
- {
- EA = 0;
- Read_Temp(); //讀取溫度值
- Delay1Ms(100);//等溫度值
- EA = 1;// 打開AD中斷
- if(k==0)
- {
- display18(wd());//顯示溫度值
- display38();//顯示電壓 //Ok
- display48();//顯示電壓 //Ok
- if(k1==0)pcs=0;//清除PCS計(jì)數(shù)display48();//顯示日期 //Ok
- }
- else
- {
- display11(wd());//顯示日期 //Ok
- display1();//顯示時(shí)間 //Ok
- display3();//顯示電壓 //Ok
-
- }
- }
- }
- void adc_isr() interrupt 5 using 1 //通道電壓整合
- {
- ADC_CONTR &= !ADC_FLAG; //Clear ADC interrupt flag
- ad_out = (ADC_RES << 2) + ADC_LOW2; //高8位+低兩位
- //if(++ch>7)ch=0;//循環(huán)顯示8個(gè)通道AD采樣
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch0;
- }
復(fù)制代碼
0.png (11.05 KB, 下載次數(shù): 34)
下載附件
2018-11-9 00:17 上傳
所有資料51hei提供下載:
用于生產(chǎn)線的多功能NTC電阻測試儀OK3.zip
(90.3 KB, 下載次數(shù): 69)
2018-11-8 23:11 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|