制作出来的NTC电阻测试仪实物图如下:
单片机源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //STC12C5A60S2 特殊功能寄存器 关于AD部分的寄存器定义
- sfr ADC_CONTR = 0xBC; //ADC控制寄存器 通道配置
- sfr ADC_RES = 0xBD; //ADC高8位数据寄存器(存AD转换的结果,共10位)
- sfr ADC_LOW2 = 0xBE; //ADC低2位数据寄存器(存AD转换的结果,共10位)
- sfr P1ASF = 0x9D; //P1第二功能选择寄存器
- unsigned char ch0 ; //ADC通道选择,本例程选择P1.0为AD转换,其他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 //写数据
- #define LCD12864_R_DAT 0xFE //读数据
- #ifndef __LCD12864_H__
- #define __LCD12864_H__
- #define LCD12864_COM 0 //输入指令
- #define LCD12864_DAT 1 //输入数据
- #define LCD12864_CLEAR 0x01 //清除显示
- #define LCD12864_CURSOR 0x02 //位址归位,游标回原点
- #define LCD12864_CURSOR_RLF 0x04 //光标左移,整体显示不移动
- #define LCD12864_CURSOR_RRF 0x06 //光标右移,整体显示不移动
- #define LCD12864_CURSOR_RLN 0x05 //光标左移,整体显示移动
- #define LCD12864_CURSOR_RRN 0x07 //光标右移,整体显示移动
- #define LCD12864_DIS_OFF 0x08 //显示状态全关
- #define LCD12864_DIS_ON 0x0E //显示状态开
- #define LCD12864_DIS_CUR_ON 0x0E //游标显示开
- #define LCD12864_DIS_CURS_ON 0x0F //游标位置显示开
- #define LCD12864_CURSOR_RL 0x10 //游标左移
- #define LCD12864_CURSOR_RR 0x14 //游标右移
- #define LCD12864_CURDIS_RL 0x18 //整体显示左移,光标跟随
- #define LCD12864_CURDIS_RR 0x1C //整体显示又移,光标跟随
- #define LCD12864_COM_BASIC 0x30 //基本指令集动作
- #define LCD12864_COM_PLOT_ON 0x36 //扩展指令集动作,绘图显示ON
- #define LCD12864_COM_PLOT_OFF 0x34 //扩展指令集动作,绘图显示OFF
- #define LCD12864_STAND_TO 0x31 //进入待命模式
- #define LCD12864_PLACE_ROLL 0x03 //允许输入卷动位址
- #define LCD12864_PLACE_IRAM 0x02 //允许输入IRAM位址
- #define LCD12864_REVERES_13 0x04 //选择一、三行同时作反白显示
- #define LCD12864_REVERES_24 0x05 //选择二、四行同时作反白显示
- #define LCD12864_REST_ON 0x08 //进入睡眠模式
- #define LCD12864_REST_OFF 0x0C //脱离睡眠模式
- #define LCD12864_W_COM 0xF8 //写指令
- #define LCD12864_R_COM 0xFC //读指令
- #define LCD12864_W_DAT 0xFA //写数据
- #define LCD12864_R_DAT 0xFE //读数据
- //======串口模式=======
- sbit LCD12864_CS = P2^7; //片选信号输入
- sbit LCD12864_STD = P2^6; //串行数据输入
- 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;//计数
- 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为转换开关,非自弹按键
- 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度左右
-
- }; //查表每一组数代表1度。如vt_table[]=3949时为6度
- unsigned char code logo[]={
- /*-- 调入了一幅图像:logo.bmp -- */
- /*-- 宽度x高度=128x64 欢迎使用本产品LOGO --*/
- /*-- 调入了一幅图像: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;//秒、分、时、星期、日、月、年
- bit keyflag=0;//按键标志位
- unsigned char code tabe[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//查表法//0-9数字
- /*******************************延时函数**********************************************/
- 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微秒延时
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- void delay(unsigned int n)
- {
- unsigned int x;
- while (n--)
- {
- x = 5000;
- while (x--);
- }
- }
- void InitADC() //10位AD数据缓存
- {
- unsigned char i;
-
- P1ASF = 0x01;//设置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位数据*************************************/
- void LCD12864_Wbyte(uchar byte)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- LCD12864_SCLK = 0;
- byte <<= 1; //左移待写入数据,使最高位移至CY
- LCD12864_STD = CY; //写入一位数据
- LCD12864_SCLK = 1;
- LCD12864_SCLK = 0;
- }
- }
- /***************************从12864读出8位数据***返回:sdat************************************/
- uchar LCD12864_Rbyte(void)
- {
- uchar i,sdat,temp1,temp2;
- temp1 = 0;
- temp2 = 0;
- //==========12864的串行数据输出形式是D7-D6-D5-D4-0-0-0-0-D3-D2-D1-D0-0-0-0-0,故要度两个八位整合==============
- 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; //返回一个值(sdat)
- }
- /****************************读忙状态**************************************/
- 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写数据*****************************************/
- 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 //否则,写入数据
- temp = LCD12864_W_DAT; //11111,RS(1),RW(0),0
- LCD12864_CS = 1; //片选使能
- LCD12864_busy(); //LCD忙检测
- LCD12864_Wbyte(temp); //写入模式选择,指令还是数据
- LCD12864_Wbyte(byte&0xf0); //写入字节
- LCD12864_Wbyte((byte<<4)&0xf0); //写入字节
- LCD12864_CS = 0; //片选关闭
- }
- /****************************LCD12864初始化**************************************/
- void LCD12864_Init(void)
- {
- LCDRST=1;
- LCD12864_PSB = 0; //选择串口模式
- LCD12864_W(LCD12864_COM,0x30); //基本指令功能.
- LCD12864_W(LCD12864_COM,0x03); //允许输入卷动位址
- LCD12864_W(LCD12864_COM,0x0c); //脱离随眠状态,显示打开,关光标,反白关.
- LCD12864_W(LCD12864_COM,0x01); //清屏指令.
- LCD12864_W(LCD12864_COM,0x06); //AC自动加一,光标右移,整体显示不移动
- }
- /**************************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内容******************************************/
- /******************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快的倍数(只有1-2倍可用)
- /***************************18B20温度返回*******wd******************/
- uchar temperature[2];//定义一个整合数据
- long wd()
- {
- unsigned char temp_data;
- long wd=0;//温度值清0
- temp_data = temperature[1];
- temp_data &= 0xf0; //取高4位
- if (temp_data==0xf0) //判断是正温度还是负温度读数
- {
- //负温度读数求补,取反加1,判断低8位是否有进位
- if (temperature[0]==0)
- { //有进位,高8位取反加1
- temperature[0]=~temperature[0]+1;
- temperature[1]=~temperature[1]+1;
- }
- else
- { //没进位,高8位不加1
- temperature[0]=~temperature[0]+1;
- temperature[1]=~temperature[1];
- }
- }
- wd=(temperature[1]*256+temperature[0])*(0.0625*10000);
- return wd;//返回一个数据(温度)用于显示
- }
- /**********************读温度数据函数***********************************/
- void Read_Temp()
- {
- unsigned char i;
- DS18B20_Reset(); //复位
- DS18B20_WriteData(0xcc); //跳过ROM命令
- DS18B20_WriteData(0x44); //温度转换命令
- DS18B20_Reset(); //复位
- DS18B20_WriteData(0xcc); //跳过ROM命令
- DS18B20_WriteData(0xbe); //读DS18B20温度暂存器命令
- for (i=0;i<2;i++)
- {
- temperature[i]=DS18B20_ReadData();
- }
- DS18B20_Reset(); //复位,结束读数据
- }
- /****************************DS18B20复位及存在检测******************************/
- uchar DS18B20_Reset()
- {
- unsigned char i;
- uchar flag; //DS18B20存在标志位
- DS18B20_L; //拉低总线
- for (i=(240*g);i>0;i--);//延时480微秒,产生复位脉冲
- DS18B20_H; //释放总线
- for (i=(40*g);i>0;i--); //延时80微秒对总线采样
- flag = DS18B20_V();
- for (i=(200*g);i>0;i--); //延时400微秒等待总线恢复
- return (flag); //根据flag的值可以知道DS18B20是否存在或损坏
- } //可以加声音告警提示DS18B20故障
- /***********************写数据到DS18B20 ***********************************/
- void DS18B20_WriteData(unsigned char wData)
- {
- unsigned char i,j;
- for (i=8;i>0;i--)
- {
- DS18B20_L; //拉低总线,产生写信号
- for (j=(7*g);j>0;j--); //延时14us
- if((bit)(wData&0x01)==1)//发送1位
- {
- DS18B20_H;
- }
- else
- {
- DS18B20_L;
- }
- for (j=(30*g);j>0;j--); //延时60us,写时序至少要60us
- DS18B20_H; //释放总线,等待总线恢复
- wData>>=1; //准备下一位数据的传送
- }
- }
- /************************DS18B20中读出数据**********************************/
- unsigned char DS18B20_ReadData()
- {
- unsigned char i,j,TmepData;
- for (i=8;i>0;i--)
- {
- TmepData>>=1;
- DS18B20_L; //拉低总线,产生读信号
- for (j=(2*g);j>0;j--); //延时4us
- DS18B20_H; //释放总线,准备读数据
- for (j=(4*g);j>0;j--); //延时8微秒读数据
- if (DS18B20_V()) TmepData |= 0x80;
- for (j=(15*g);j>0;j--); //延时30us
- DS18B20_H; //拉高总线,准备下一位数据的读取.
- }
- return (TmepData);//返回读到的数据
- }
- /********************写一个字节**************/
- void write_1302byte(uchar com)
- {
- uchar i;
- sclk=0;
- delayus();
- for(i=8;i>0;i--)
- {
- io=com&0x01;//只要是从低位取数,向高位一定要和0X01与
- delayus();
- sclk=1;//为写数据制造上升沿。
- delayus();
- sclk=0;//为下一次上升沿写下一个字节做准备
- com>>=1;//将数据向右移一位,准备写入下一个数据
- }
- }
- /********************读一个字节***************/
- 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拉高,为读一个字节的下降沿做准备
- delayus();//稍等制造一个高电平
- sclk=0;//为读一个字节制造下降沿
- delayus();
- }
- return dat;
- }
- /*************写入一个时间位*****************/
- 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();//将上面地址中的数据赋给timedat
- sclk=1;
- _nop_();
- rst=0;
- io=0;//字节读操作完后,将ds1302的IO端口置零就可以消除85、45和??闪现等问题
- return timedat;
- }
- /****************初始化1302*********************/
- void init_1302()
- {
- flag=read_1302add(0x81);//读秒寄存器的最高位,读出时钟状态
- if(flag&0x80)//判断时钟是否关闭,若内部关闭,则初始,若没关闭,不初始化,还在走
- {
- write_1302(0x8e,0x00);//去除写保护
- 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)));//写小时寄存器,并写入初值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);//加上写保护 去写保护和if(flag&0x80)//判断 可 改 时 间
- }
- }
- /*****************读出秒的十进制数***************************/
- uchar readsecond()
- {
- uchar dat;
- dat=read_1302add(0x81);
- second=((dat&0x70)>>4)*10+(dat&0x0f);
- return second;
- }
- /*****************读出分的十进制数***************************/
- uchar readminute()
- {
- uchar dat;
- dat=read_1302add(0x83);
- minute=((dat&0x70)>>4)*10+(dat&0x0f);
- return minute;
- }
- /*****************读出小时的十进制数***************************/
- uchar readhour()
- {
- uchar dat;
- dat=read_1302add(0x85);
- hour=((dat&0x70)>>4)*10+(dat&0x0f);
- return hour;
- }
- /*****************读出天的十进制数***************************/
- uchar readday()
- {
- uchar dat;
- dat=read_1302add(0x87);
- day=((dat&0x70)>>4)*10+(dat&0x0f);
- return day;
- }
- /*****************读出月的十进制数***************************/
- uchar readmonth()
- {
- uchar dat;
- dat=read_1302add(0x89);
- month=((dat&0x70)>>4)*10+(dat&0x0f);
- return month;
- }
- /*****************读出周的十进制数***************************/
- uchar readweek()
- {
- uchar dat;
- dat=read_1302add(0x8b);
- week=((dat&0x70)>>4)*10+(dat&0x0f);
- return week;
- }
- /*****************读出年的十进制数***************************/
- uchar readyear()
- {
- uchar dat;
- dat=read_1302add(0x8d);
- year=((dat&0xf0)>>4)*10+(dat&0x0f);
- return year;
- }
- /************************读出所有时间**********************/
- 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写数据
- //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写数据
- readtime();//读出所有时间
- 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,"时间:");//第1行显示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0写指令 1写数据
- readtime();//读出所有时间
- 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,"日"); }
- }
- /************************显示温度和电阻计算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; //温度计算与修正约10K
- for(i=0;i<440;i++)//判断采集电压值大于或者等于表格电压时,停下来并记录当前i值
- {
- if(num >= vt_table[i])
- {
- num=i;
- break; //检测到即跳出循环,否则继续循环
- }
- }
- temp1=(num*10)/2;//放大10倍
- if(temp1<1)
- temp1=9999; //最大
- if(temp1<=400)// 回到26度以下充电才能再次开始
- {
- LCD12864_WPoss(0,1,"充电进行中∝");//第1行显示表1 ≈≈∝≠
- display2();//显示时间 //Ok
- bb=1;
- ntcok=0; //NTC OK
- ntcno=1;
- }
- else
- {
- if(temp1>=800)//充电报警温度
- {
- LCD12864_WPoss(0,1,"充电中断 ≠");//第1行显示表1 ≈≈∝≠
-
- ntcok=1; //NTC OK
- for(x=2;x>0;x--)
- {
- LCD12864_WPoss(1,0," 超温报警! ");//第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写数据
- //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);// 显示点
- 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))); //温度计算与修正约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写数据
- //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);// 显示点
- 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写数据
- 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,"时间:");//第1行显示表1
- // LCD12864_W(0,0x80+3);//LCD12864_W ((0或1),****) 0写指令 1写数据
- readtime();//读出所有时间
- 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]);
- }
- /************************显示温度和电阻计算3************************************/
-
- void display38(long temp1)
- {
- uchar dt1,dt2,dt3,dt4,dt5,dt6,dt7,dt8;
- //temp1 = ad_out; //10位AD读取的数值是0-1024,
- temp1=39*ad_out*(3470*(1/(273.15+15)-1/(273.15+25))); //温度计算与修正约10K
- if(temp1>=1000&&temp1<10000)//>500&&<950/一个NTC约930K两个就大于950用于判断有几个或没有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写数据
- //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);// 显示点
- 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," 产品合格 ");//第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写数据
- //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);// 显示点
- 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;//用于清除计数
- } }
- if(pcs1==3&&bb==1) // 同时满足两个条件,测试放手才计数
- {
- 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写数据
- //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);// 显示点
- 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计数display48();//显示日期 //Ok
- }
- else
- {
- display11(wd());//显示日期 //Ok
- display1();//显示时间 //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;//循环显示8个通道AD采样
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch0;
- }
复制代码
所有资料51hei提供下载:
用于生产线的多功能NTC电阻测试仪OK3.zip
(90.3 KB, 下载次数: 66)
|