找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 140|回复: 0
收起左侧

自己写的测试程序,包含74hc595驱动数码管,OLED,MCP4725,AT24C02,AD1115,DS1307

[复制链接]
ID:492633 发表于 2025-8-3 19:11 | 显示全部楼层 |阅读模式
屏幕截图 2025-08-03 190534.png 屏幕截图 2025-08-03 185900.png

Keil代码下载: 测试 - 实物 - 增加OLED.7z (402.3 KB, 下载次数: 0)

  1. /*******************EEPROM记录大于255的数*****************                  

  2. *硬件平台:STC89C52RC

  3. *开发环境:KEIL        

  4. *功能:由于24c02是每个存储地址只对应8个bit的存储空间,即一个                          

  5.            存储单元所存储的数据最大为255,该例程介绍了一种当所记忆                          

  6.            数据大于255(而小于65536)的存储方法。即用两个存储单元来                  

  7.            存储一个数据。            

  8. *********************************************************/

  9. #include "reg52.h"

  10. #include "intrins.h"

  11. #include "mcp4725.h"

  12. #include "24cxx.h"

  13. #include "ADC0832.h"

  14. #include "DS18B20.h"

  15. #include "OLED.h"

  16. #include <stdio.h>

  17. #define uint unsigned int

  18. #define uchar unsigned char

  19. #define valdata      5000//计算值

  20. #define key 5//按钮定时值更改改变消抖时间(单位t*2ms)

  21.         /**

  22.                       595侧                                 芯片侧

  23. 11  SCK   数据输入时钟线           SHCP     Clock    SPI2_SCK         PB3

  24. 12  RCK   输出存储锁存时钟线       STCP     Latch    SPI2_NSS         PA15

  25. 13  OE    输出使能     接地        OE                                 PD7

  26. 14  SI    数据线                   DS1      DATA     SPI2_MOSI        PB5

  27. **/

  28. /*

  29. 16  VCC          电源              2V-6V

  30. 15  QA           并行输出          QB QC....QH

  31. 14  SI/DS        DATA             串行数据输入

  32. 13  OE_          输出使能          PWM控制亮度

  33. 12  RCK/STCP     CS               输出到锁存器时钟

  34. 11  SCK/SHCP     CLK              DATA输入时钟

  35. 10  SCLR/MR      低电平清零        接VCC

  36. 9  SQH/Q7S       串行数据输出       接下一个595

  37. */

  38. sbit ds=P3^4;

  39. sbit sh_cp=P3^6;

  40. sbit st_cp=P3^5;

  41. sbit dula=P2^6;

  42. sbit wela=P2^7;

  43. sbit rtcc=P1^6;              

  44. sbit k1=P1^0; //设置加

  45. sbit k2=P1^1; //加

  46. sbit k3=P1^2; //减

  47. sbit k4=P1^3; //设置减/退出

  48. sbit k5=P1^4; //确认保存

  49. sbit led=P1^7;  //状态灯


  50. sbit rst=P1^6; //清除24cxx内部存储的数据谨慎操作

  51. sbit EC11_A = P2^2;                                //声明编码器A脚IO

  52. sbit EC11_B = P2^3;                                //声明编码器B脚IO


  53. //变量

  54. bit EC11_A_Now = 1;                                //编码器A脚稳定值

  55. bit EC11_B_Now = 1;                                //编码器B脚稳定值

  56. signed int EC11_A_Code = 1;                //EC11编码器正转一格键值

  57. signed int EC11_B_Code = -1;        //EC11编码器反转一格键值

  58. bit flag1s; //1s定时标志

  59. //uchar time=0;  //系统定时 0-255

  60. uchar num1;

  61. uchar num2;

  62. uchar num3;

  63. uchar num4;

  64. uchar num5;

  65. uchar num6;

  66. uchar num7;

  67. uchar num8;

  68. uchar num9;

  69. uchar num10;

  70. uchar num11;

  71. uchar num12;

  72. uchar num13;

  73. uchar num14;

  74. uchar num15;

  75. uchar num16;  //计算 0-255

  76. unsigned short volt1=0,volt2=0; //adc0832转换

  77. bit writedat=0; //写24C08 的标志

  78. unsigned short Val; //mcp4725输出变量 0-65535

  79. uchar  fhz=0; //MCP4725输出频率


  80. uint set_voltage;                //设定值

  81. uchar digit4,digit3,digit2,digit1;        //设定值千百十个位

  82. uchar mode=0;//模式 0-255

  83. unsigned short mode0=0;//主显示0 0-65535

  84. unsigned short mode1=0;//菜单显示1 0-65535

  85. unsigned short mode2=0;//菜单显示2 0-65535

  86. unsigned short mode3=0;//菜单显示3 0-65535

  87. unsigned short mode4=0;//菜单显示4 0-65535

  88. unsigned short mode5=0;//菜单显示5 0-65535

  89. unsigned short mode6=0;//菜单显示6 0-65535

  90. unsigned short mode7=0;//菜单显示7 0-65535

  91. unsigned short mode8=0;//菜单显示8 0-65535

  92. unsigned short ADC0;//菜单显示5 0-65535

  93. unsigned short ADC1;//菜单显示6 0-65535

  94. unsigned short ADC2;//菜单显示7 0-65535

  95. unsigned short ADC3;//菜单显示8 0-65535

  96. uchar h,m,s;//系统运行时间累计

  97. int duqu; //计算温度18b20温度显示

  98. uint count1; //按键延时计数器标志位

  99. /*********十进值与BCD码之间互换**********/

  100. uchar dectobcd(uchar);//十进值转bcd码

  101. uchar bcdtodec(uchar);//bcd码转十进值

  102. uchar hour,minute,second;//时分秒变量

  103. unsigned short i=0;

  104. uchar dis_buf[]={0,0,0,0,0,0,0,0};//显示缓存

  105. uchar code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//共阴数码管位码

  106. //uchar code wela[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//共阳数码管位码

  107. uchar code table[]=

  108. {

  109.         0x3F,//'0'0

  110.   0x06,//'1'1

  111.   0x5B,//'2'2

  112.   0x4F,//'3'3

  113.   0x66,//'4'4

  114.   0x6D,//'5'5

  115.   0x7D,//'6'6

  116.   0x07,//'7'7

  117.   0x7F,//'8'8

  118.   0x6F,//'9'9

  119.   0x77,//'A'10

  120.   0x5F,//'a'11

  121.   0x7F,//'B'12

  122.   0x7C,//'b'13

  123.   0x39,//'C'14

  124.   0x58,//'c'15

  125.   0x3F,//'D'16

  126.   0x5E,//'d'17

  127.   0x79,//'E'18

  128.   0x7B,//'e'19

  129.   0x71,//'F'20

  130.   0x71,//'f'21

  131.   0x7D,//'G'22

  132.   0x6F,//'g'23

  133.   0x76,//'H'24

  134.   0x74,//'h'25

  135.   0x06,//'I'26

  136.   0x04,//'i'27

  137.   0x1E,//'J'28

  138.   0x1E,//'j'29

  139.   0x38,//'L'30

  140.   0x06,//'l'31

  141.   0x37,//'N'32

  142.   0x54,//'n'33

  143.   0x3F,//'O'34

  144.   0x5C,//'o'35

  145.   0x73,//'P'36

  146.   0x73,//'p'37

  147.   0x67,//'Q'38

  148.   0x67,//'q'39

  149.   0x77,//'R'40

  150.   0x50,//'r'41

  151.   0x6D,//'S'42

  152.   0x6D,//'s'43

  153.   0x31,//'T'44

  154.   0x78,//'t'45

  155.   0x3E,//'U'46

  156.   0x1C,//'u'47

  157.   0x6E,//'Y'48

  158.   0x6E,//'y'49

  159.   0x5B,//'Z'50

  160.   0x5B,//'z'51

  161.   0x40,//'-'52

  162.   0x08,//'_'53

  163.   0x80, //'.'54

  164.         0x00 //' '55

  165. };

  166. //共阴数码管编码无小数点  


  167. void delay1(uint z)      //延时为 1ms

  168. {

  169. uchar x,x1;

  170. for(;z>0;z--)

  171. {

  172.   for(x=0;x<114;x++)

  173.   {for(x1=0;x1<1;x1++);}

  174. }

  175. }

  176. //单片机时钟周期:11.0592MHz           以时钟T2作为波特率发生器 //9600bps

  177. void SerialInit(){

  178.             PCON &= 0x7F;      //波特率不倍速 SMOD=0

  179.      SCON = 0x50;       //方式1,8位数据,可变波特率,接收允许

  180.      T2CON  = 0x34;   

  181.      RCAP2H = 0xFF;   

  182.      RCAP2L = 0xDC;  

  183.      TH2    = 0xFF;  

  184.      TL2    = 0xDC;           

  185.            EA=1; //总中断打开,采用查询法时不用打开中断

  186.      ES=1;          //串口中断开关,采用查询法时不用打开中断

  187. }

  188. //定时器

  189. void Timer0Init() //11.0592Mhz定时1ms

  190. {

  191.         TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

  192.         //TH0=0XFC;        //给定时器赋初值,定时1ms

  193.         //TL0=0X18;   

  194.               TH0=(65536-2000)/256; //2ms

  195.         TL0=(65536-2000)%256;        //2ms

  196.         ET0=1;         //打开定时器0中断允许

  197.         EA=1;         //打开总中断

  198.         TR0=1;//打开定时器                       

  199. }

  200. //串口发送一个字节:

  201. void SendByte(unsigned char sbyte)

  202. {

  203.      SBUF=sbyte; //发送数据

  204.      while(!TI); //等待发送完成

  205.      TI=0; //清零发送标志位

  206. }

  207. //串口发送一个字符串:

  208. void SendString(unsigned char *pstr) //定义指针

  209. {

  210.      while(*pstr!='\0') //字符串是否发完

  211.      {

  212.          SendByte(*pstr);//发送字符串数据

  213.          pstr++; //指向下一个字符

  214.      }

  215. }

  216. //串口中断函数:

  217. void SerialPortInte(void) interrupt 4 //采用串口中断法收发数据

  218. {

  219.          unsigned char rbyte;

  220.          if(RI){     //RI=1,判定为串口接收到了数据,RI要清零,

  221.          RI=0;

  222.                  rbyte=SBUF;

  223.                  if(rbyte==0x0A){           

  224.                     SendString("换行");

  225.                         if(mode<17)

  226.                          mode++;

  227.                  }else if(rbyte==0x0D){

  228.                          SendString("回车");

  229.                          if(mode>0)

  230.                          mode--;

  231.                  }else{

  232.                          SendByte(rbyte);

  233.                  }

  234.      }

  235.          }

  236. //595处理开始

  237. void rck(void)  

  238. {

  239.         st_cp=1; //拉高

  240.         st_cp=0; //拉低

  241. }

  242. void shift(uchar dat)

  243. {

  244.         uchar i;

  245.         for(i=0;i<8;i++)

  246.         {

  247.                 ds=dat&0x80;//提取最高位

  248.                 sh_cp=1;    //上升沿   

  249.                 sh_cp=0;    //下降沿

  250.                 dat<<=1;

  251.         }

  252. }

  253. void DisplayScan()

  254. {

  255.         static uchar i=0;

  256.         shift(wei[i ]);//送位码

  257. [i ]        shift(dis_buf[i ]);//送段码

  258. [i ][i ]        rck();//锁存

  259. [i ][i ]        i=++i%8;//循环扫描计数

  260. [i ][i ]}

  261. [i ][i ]//595处理结束
  262. [i ][i ]

  263. void run_time()//时钟走动函数定义

  264. {  

  265.         //从1307中读出时间

  266.         second=ds1307_read_date(0xd0,1);//返回函数r值秒        

  267.         minute=ds1307_read_date(0xd0,2);

  268.         hour=ds1307_read_date(0xd0,0);

  269.         //将读出的时间转换成十进值

  270.         second=bcdtodec(second);

  271.         minute=bcdtodec(minute);

  272.         hour=bcdtodec(hour);

  273.         //更新串口发送时间        


  274. }

  275. uchar dectobcd(uchar dec)//十进值到BCD码

  276. {

  277.         uchar a,b,c;

  278.         a=dec;

  279.         b=0;

  280.         while(a>=10)

  281.                 {

  282.                         a=a-10;

  283.                         b=b+16;

  284.                         c=a+b;

  285.                         dec=c;

  286.                 }         

  287.         return dec;

  288. }

  289. uchar bcdtodec(uchar bcd)//bcd码转十进值

  290. {

  291.         uchar a,b,c;

  292.         a=bcd;

  293.         b=0;

  294.         while(a>=16)

  295.                 {

  296.                         a=a-16;

  297.                         b=b+10;

  298.                         c=a+b;

  299.                         bcd=c;

  300.                 }         

  301.         return bcd;

  302. }


  303. //EC11开始

  304. /**********************EC11动作函数**********************/

  305. void EC11_Action(signed char num)

  306. {

  307. if(mode==17)

  308. {

  309.         mode0 += num;                          //演示变量 加减 编码器正旋+1反旋减1

  310. }

  311. else if(mode==0)

  312. {

  313.          fhz += num;

  314. }

  315. else if(mode==1)

  316. {

  317.          mode1 += num;

  318. }

  319. else if(mode==2)

  320. {

  321.          mode2 += num;

  322. }

  323. else if(mode==3)

  324. {

  325.          mode3 += num;

  326. }

  327. else if(mode==4)

  328. {

  329.          mode4 += num;

  330. }

  331. else if(mode==5)

  332. {

  333.          mode5 += num;

  334. }

  335. else if(mode==6)

  336. {

  337.          mode6 += num;

  338. }

  339. else if(mode==7)

  340. {

  341.          mode7 += num;

  342. }

  343. else if(mode==8)

  344. {

  345.          mode8 += num;

  346. }

  347. }

  348. /**********************EC11驱动函数**********************/

  349. void EC11_Driver()  //放大循环里面

  350. {

  351.         static bit turn_R;                  //检测EC11正转标志位

  352.         static bit turn_L;                  //检测EC11反转标志位

  353.         static bit turn_on;                  //检测EC11动作标志位

  354.         static bit turn_on_last;  //备份EC11上一次动作值

  355. /**********************EC11状态分析**********************/

  356.         if(EC11_A_Now&&!EC11_B_Now)                                //正转状态

  357.         {

  358.                 turn_R = 1;                                                           //正转标志

  359.         }

  360.         else if(!EC11_A_Now&&EC11_B_Now)                //反转状态

  361.         {

  362.                 turn_L = 1;                                                           //反转标志

  363.         }

  364.         else if(!EC11_A_Now&&!EC11_B_Now)                //旋转状态

  365.         {

  366.                 turn_on = 1;                                                   //旋转标记                           

  367.         }

  368.         else                                                                        //起始状态 编码器未旋转

  369.         {                                                                                //或旋转到起始状态

  370.                 turn_on = 0;                                                //旋转标志复位

  371.                 turn_R = 0;                                                        //正转标志复位

  372.                 turn_L = 0;                                                        //反转标志复位

  373.         }

  374. /**********************EC11状态处理**********************/

  375.         if(turn_R)                                                                //判定为正转状态 进行正转处理

  376.         {

  377.                 if(turn_on != turn_on_last)                        //如果编码器转动

  378.                 {

  379.                         if(turn_on_last == 0)                        //如果编码器上次值为0

  380.                         {                                                                //则该当前值为1

  381.                                 EC11_Action(EC11_A_Code);        //执行动作函数 传送正转值        

  382.                         }

  383.                 }

  384.                 turn_on_last = turn_on;                                //更新编码器状态

  385.         }

  386.         else if(turn_L)                                                        //判定为正转状态 反转处理

  387.         {

  388.                 if(turn_on != turn_on_last)                        //如果编码器转动

  389.                 {

  390.                         if(turn_on_last == 0)                        //如果编码器上次值为0

  391.                         {                                                                //则该当前值为1

  392.                                 EC11_Action(EC11_B_Code);        //执行动作函数 传送反转值

  393.                         }        

  394.                 }

  395.                 turn_on_last = turn_on;                                //更新编码器状态

  396.         }

  397.         else                                                                        //不旋转时复位

  398.         {

  399.                 turn_on_last = 0;                                        //编码器最后动作状态复位

  400.         }                                

  401. }

  402. /******************EC11_IO状态扫描及消抖*******************/

  403. void EC11_Scan()  //放2ms定时器里面

  404. {        

  405.         static unsigned char EC11_A_Buf;                                   //声明静态缓存变量

  406.         static unsigned char EC11_B_Buf;                                   //声明静态缓存变量

  407.         EC11_A_Buf = ((EC11_A_Buf << 1) & 0x05) | EC11_A;  //将编码器IO状态送入缓存 //可更改速度

  408.         EC11_B_Buf = ((EC11_B_Buf << 1) & 0x05) | EC11_B;  //连续三次都为0则判定为0 //可更改速度

  409.         if(EC11_A_Buf == 0x00)                         //编码器A引脚电平判定

  410.                 EC11_A_Now = 0;

  411.         else                                                                                           //否则

  412.                 EC11_A_Now = 1;

  413.         if(EC11_B_Buf == 0x00)             //编码器B引脚电平判定

  414.                 EC11_B_Now = 0;

  415.         else                                                                                           //否则

  416.                 EC11_B_Now = 1;        

  417. }

  418. //EC11结束

  419. void read_ds18b20_temp() //放2ms定时器里面扫描

  420. {

  421.         static unsigned char ls,hs,i;

  422.         switch(i)

  423.         {

  424.                 case  0: init_ds18b20();        break;

  425.                 case  1: Write_DS18B20(0xcc);   break;

  426.                 case  2: Write_DS18B20(0x44);   break;

  427.                 case 94: init_ds18b20();        break;

  428.                 case 95: Write_DS18B20(0xcc);   break;

  429.                 case 96: Write_DS18B20(0xbe);   break;

  430.                 case 97: ls=Read_DS18B20();     break;

  431.                 case 98: hs=Read_DS18B20();     break;

  432.                 case 99: duqu=((hs<<8)|ls)/1.6*10; break;//保留2位小数

  433.                                               //case 99: duqu=((hs<<4)&0xf0)|((ls>>4)&0x0f)*100; break;

  434.         }

  435.         i=++i%100;

  436. }


  437. void KEY()  //按键

  438. {

  439. // uchar kk; //按键 0-255        

  440.         // if(mode<9) mode=0;

  441.         {

  442.     if(!k1)                 //设置加

  443.                 {

  444.                         if(count1==key) //消除抖动计数5次大约10ms

  445.                         {

  446.                          if(!k1)             //再次判断按键是否按下

  447.                          {                                 

  448.                         i=0;

  449.                         if(mode<17)

  450.                         mode+=1;

  451.                         SendString("mode+1"); //输出文本

  452.                         SendByte('1'); //输出HEX 0x31

  453.                         set_voltage=(unsigned int)mode; //强制转换uint输出

  454.                         OLED_P8x16Str(0,2,35); //M

  455.                         OLED_P8x16Str(8,2,37); //O

  456.                         OLED_P8x16Str(16,2,26); //D

  457.                         OLED_P8x16Str(24,2,27); //E

  458.             OLED_P8x16Str(32,2,10); //:

  459.                         Display2(); //更新输出

  460.                 //        writedat=1; //写入24C08 的标志;

  461.                 //        printf("设置加:%u\r\n",(unsigned int)mode); //强制转换成int数发送

  462.                   }

  463.            }

  464.     }

  465.     if(!k4 )                 //设置减

  466.                 {

  467.                         if(count1==key) //消除抖动计数5次大约10ms

  468.                         {

  469.                          if(!k4)             //再次判断按键是否按下

  470.                          {               

  471.                         i=0;

  472.                         if(mode>0)

  473.                         mode-=1;

  474.                         SendString("mode-1");

  475.                         set_voltage=(unsigned int)mode; //强制转换uint输出

  476.                         Display2(); //更新输出

  477.                 //        writedat=1; //写入24C08 的标志;

  478.      // printf("设置减:%u\r\n",(unsigned int)mode); //强制转换成int数发送

  479.                    }

  480.                   }

  481.           }

  482.     if(!k5)                 //确认

  483.                 {

  484.                         if(count1==key) //消除抖动计数5次大约10ms

  485.                         {

  486.                          if(!k5)             //再次判断按键是否按下

  487.                          {

  488.                         writedat=1; //写入24C08 的标志;

  489.                         mode=0;        

  490.                 //        printf("保存eeprom成功\r\n");

  491.                          }

  492.                  }

  493.                 }        


  494.     if(mode==1)//模式1

  495.                 {

  496.                         if(!k2)  //加

  497.                         {

  498.                         if(count1==key) //消除抖动计数5次大约10ms

  499.                         {

  500.                          if(!k2)             //再次判断按键是否按下

  501.                          {

  502.                                 if(mode1<65535)  // 小于65535

  503.                                         mode1++;    //自加一次

  504.                                         SendString("mode1+");

  505.                         set_voltage=mode1; //强制转换uint输出

  506.                         OLED_P8x16Str(0,4,35); //M

  507.                         OLED_P8x16Str(8,4,37); //O

  508.                         OLED_P8x16Str(16,4,26); //D

  509.                         OLED_P8x16Str(24,4,27); //E

  510.                         OLED_P8x16Str(32,4,1); //1        

  511.             OLED_P8x16Str(40,4,10); //:

  512.                         Display3(); //更新输出

  513.                         //        printf("mode1:%d\r\n",mode1);

  514.                          }

  515.                   }                        

  516.                  }

  517.                         if(!k3) //减

  518.                         {

  519.                         if(count1==key) //消除抖动计数5次大约10ms

  520.                         {

  521.                          if(!k3)             //再次判断按键是否按下

  522.                          {                        

  523.                                 if(mode1>0)  //判断大于1

  524.                                         mode1--;  //自减一次

  525.                                  SendString("mode1-");

  526.                         //        printf("mode1:%d\r\n",mode1);

  527.                          }

  528.                         }                        

  529.                 }

  530.         }                        

  531.                  if(mode==2)//模式2

  532.                 {

  533.                         if(!k2)  //加

  534.                         {

  535.                         if(count1==key) //消除抖动计数5次大约10ms

  536.                         {

  537.                          if(!k2)             //再次判断按键是否按下

  538.                          {

  539.                                 if(mode2<65535)  // 小于65535

  540.                                         mode2++;    //自加一次

  541.                         //        printf("mode2:%d\r\n",mode2);        

  542.                         }

  543.                         }

  544.                         }

  545.                         if(!k3) //减

  546.                         {

  547.                         if(count1==key) //消除抖动计数5次大约10ms

  548.                         {

  549.                          if(!k3)             //再次判断按键是否按下

  550.                          {

  551.                                 if(mode2>0)  //判断大于1

  552.                                         mode2--;  //自减一次

  553.                         //        printf("mode2:%d\r\n",mode2);

  554.                         }

  555.                    }

  556.                         }                                

  557.           }

  558.     if(mode==3)//模式3

  559.                 {

  560.                         if(!k2)  //加

  561.                         {

  562.                         if(count1==key) //消除抖动计数5次大约10ms

  563.                         {

  564.                          if(!k2)             //再次判断按键是否按下

  565.                          {

  566.                                 if(mode3<65535)  // 小于65535

  567.                                         mode3++;    //自加一次

  568.                         //        printf("mode3:%d\r\n",mode3);        

  569.                         }

  570.                 }

  571.         }

  572.                         if(!k3) //减

  573.                         {

  574.                         if(count1==key) //消除抖动计数5次大约10ms

  575.                         {

  576.                          if(!k3)             //再次判断按键是否按下

  577.                          {

  578.                                 if(mode3>0)  //判断大于1

  579.                                         mode3--;  //自减一次

  580.                         //        printf("mode3:%d\r\n",mode3);

  581.                         }

  582.                 }

  583.                         }                        

  584.                 }               

  585.                  if(mode==4)//模式4

  586.                 {

  587.                         if(!k2)  //加

  588.                         {

  589.                         if(count1==key) //消除抖动计数5次大约10ms

  590.                         {

  591.                          if(!k2)             //再次判断按键是否按下

  592.                          {

  593.                                 if(mode4<65535)  // 小于65535

  594.                                         mode4++;    //自加一次

  595.                         //        printf("mode4:%d\r\n",mode4);        

  596.                         }

  597.                 }

  598.                         }

  599.                         if(!k3) //减

  600.                         {

  601.                         if(count1==key) //消除抖动计数5次大约10ms

  602.                         {

  603.                          if(!k3)             //再次判断按键是否按下

  604.                          {                                

  605.                                 if(mode4>0)  //判断大于1

  606.                                         mode4--;  //自减一次

  607.                         //        printf("mode4:%d\r\n",mode4);

  608.                         }

  609.                 }

  610.                         }                                

  611.           }               

  612.     if(mode==5)//模式5

  613.                 {

  614.                         if(!k2)  //加

  615.                         {

  616.                         if(count1==key) //消除抖动计数5次大约10ms

  617.                         {

  618.                          if(!k2)             //再次判断按键是否按下

  619.                          {                                

  620.                                 if(mode5<65535)  // 小于65535

  621.                                         mode5++;    //自加一次

  622.                         //        printf("mode5:%d\r\n",mode5);

  623.                         }

  624.                 }                        

  625.                         }

  626.                         if(!k3) //减

  627.                         {

  628.                         if(count1==key) //消除抖动计数5次大约10ms

  629.                         {

  630.                          if(!k3)             //再次判断按键是否按下

  631.                          {                                

  632.                                 if(mode5>0)  //判断大于1

  633.                                         mode5--;  //自减一次

  634.                         //        printf("mode5:%d\r\n",mode5);

  635.                         }        

  636.                 }

  637.          }                        

  638.                 }               

  639.                  if(mode==6)//模式6

  640.                 {

  641.                         if(!k2)  //加

  642.                         {

  643.                         if(count1==key) //消除抖动计数5次大约10ms

  644.                         {

  645.                          if(!k2)             //再次判断按键是否按下

  646.                          {                        

  647.                                 if(mode6<65535)  // 小于65535

  648.                                         mode6++;    //自加一次

  649.                         //        printf("mode6:%d\r\n",mode6);        

  650.                         }

  651.                 }

  652.         }

  653.                         if(!k3) //减

  654.                         {

  655.                         if(count1==key) //消除抖动计数5次大约10ms

  656.                         {

  657.                          if(!k3)             //再次判断按键是否按下

  658.                          {                                

  659.                                 if(mode6>0)  //判断大于1

  660.                                         mode6--;  //自减一次

  661.                         //        printf("mode6:%d\r\n",mode6);

  662.                         }               

  663.                 }

  664.         }                        

  665.           }

  666.     if(mode==7)//模式7

  667.                 {

  668.                         if(!k2)  //加

  669.                         {

  670.                         if(count1==key) //消除抖动计数5次大约10ms

  671.                         {

  672.                          if(!k2)             //再次判断按键是否按下

  673.                          {                                

  674.                                 if(mode7<65535)  // 小于65535

  675.                                         mode7++;    //自加一次

  676.                         //        printf("mode7:%d\r\n",mode7);        

  677.                         }

  678.                 }

  679.         }

  680.                         if(!k3) //减

  681.                         {

  682.                         if(count1==key) //消除抖动计数5次大约10ms

  683.                         {

  684.                          if(!k3)             //再次判断按键是否按下

  685.                          {                                

  686.                                 if(mode7>0)  //判断大于1

  687.                                         mode7--;  //自减一次

  688.                         //        printf("mode7:%d\r\n",mode7);

  689.                         }

  690.                 }

  691.         }                        

  692.                 }               

  693.                  if(mode==8)//模式8

  694.                 {

  695.                         if(!k2)  //加

  696.                         {

  697.                         if(count1==key) //消除抖动计数5次大约10ms

  698.                         {

  699.                          if(!k2)             //再次判断按键是否按下

  700.                          {                        

  701.                                 if(mode8<65535)  // 小于65535

  702.                                         mode8++;    //自加一次

  703.                         //        printf("mode8:%d\r\n",mode8);        

  704.                         }

  705.                 }

  706.                         }

  707.                         if(!k3) //减

  708.                         {

  709.                         if(count1==key) //消除抖动计数5次大约10ms

  710.                         {

  711.                          if(!k3)             //再次判断按键是否按下

  712.                          {                                

  713.                                 if(mode8>0)  //判断大于1

  714.                                         mode8--;  //自减一次

  715.                         //        printf("mode8:%d\r\n",mode8);

  716.                         }               

  717.                 }

  718.         }                        

  719.           }               

  720. //////开始执行

  721.       if(mode==0) //模式0

  722.                         {

  723.                         if(!k2)  //加

  724.                         {

  725.                         if(count1==key) //消除抖动计数5次大约10ms

  726.                         {

  727.                          if(!k2)             //再次判断按键是否按下

  728.                          {                                

  729.                                 if(fhz<mode1)  // 判断fhz小于mpde1

  730.                                         fhz++;    //自加一次

  731.                                         Val=valdata/mode1*fhz; //基准数5000/频率上限*设置运行频率=输出

  732.                                   MCP4725_WriteData(Val);        //写电压单位V               

  733.                         //        printf("频率:%uHz\n",(unsigned int)fhz); //打印频率 //强制转换成int数发送

  734.       //  printf("输出电压:%dMv\r\n",Val);                //打印MCP4725电压               

  735.                         }

  736.                 }

  737.         }

  738.                         if(!k3) //减

  739.                         {

  740.                         if(count1==key) //消除抖动计数5次大约10ms

  741.                         {

  742.                          if(!k3)             //再次判断按键是否按下

  743.                          {                                

  744.                                 if(fhz>0)  //判断大于0

  745.                                         fhz--;  //自减一次

  746.                                         Val=valdata/mode1*fhz; //基准数5000/频率上限*设置运行频率=输出

  747.                                   MCP4725_WriteData(Val);        //写电压单位V

  748.                         //        printf("频率:%uHz\n",(unsigned int)fhz); //打印频率 //强制转换成int数发送

  749.                         //        printf("输出电压:%dMv\r\n",Val);        //打印MCP4725电压

  750.                         }

  751.                 }

  752.             }                        

  753.                         }


  754.                  if(mode==9)//模式9

  755.                 {

  756.                         if(i==100)  //开启

  757.                         {

  758.                                 i=0;

  759.                      volt1=ADC(1);//测量通道1

  760.                     volt1=volt1*500/127;

  761.                     volt2=ADC(2);//测量通道2

  762.                     volt2=volt2*500/127;

  763.                                 /*

  764.                                 SendString("table[volt1/100]+0x30");

  765.                                 SendString(".");

  766.                                 SendString("table[volt1%100/10]+0x30");

  767.                                 SendString("table[volt1%10]+0x30");

  768.                                 SendString("V");

  769.                                 SendString("\r\n");

  770.                           SendString("table[volt2/100]+0x30");

  771.                                 SendString(".");

  772.                                 SendString("table[volt2%100/10]+0x30");

  773.                                 SendString("table[volt2%10]+0x30");

  774.                                 SendString("V");

  775.                                 SendString("\r\n");

  776.                                 */

  777.                         //        printf("CH1:%gV\n",(float)volt1/100);        //打印0832CH1电压//强制转换成float数发送使用%g不打印多的0

  778.                         //        printf("CH2:%gV\r\n",(float)volt2/100); //打印0832CH2电压//强制转换成float数发送使用%g不打印多的0

  779.                         }

  780.           }        

  781.                  if(mode==10)//模式10

  782.                 {        

  783.                         if(i==500)  //开启

  784.                         {

  785.         // duqu=ds18b20_readTemp();     //读18b20温度值

  786.                                 //duqu=rd_temperature_f();//调用DS18B20温度采集程序:浮点数

  787.                                 // duqu=duqu*0.0625*100+0.5;

  788.                                 //duqu=duqu*100;               //取1位小数

  789.                                 //wendu=(unsigned int)x; //转换为整形数值,由数码管显示

  790.          set_voltage=duqu; //温度输出

  791.          Display1();

  792.                                 if(duqu<0)

  793.                                 {

  794.                                         duqu=~duqu+1;

  795.                                         duqu+=1;

  796.                                         //duqu=duqu*0.0625*100+0.5;

  797.                                         dis_buf[1]=table[52];

  798.                                 }

  799.                                         else //if(kaiqi==1)

  800.                                         {

  801.                                         //duqu=duqu*0.0625*100+0.5;        

  802.                                         dis_buf[1]=table[55];

  803.                 }

  804.                                         i=0;

  805.           }

  806.         }



  807.                 /*

  808.                  if(mode==11)//模式11

  809.                 {

  810.                         if(i==100)  //开启

  811.                         {

  812.                                 i=0;

  813.                                 run_time();        //时钟走动函数定义

  814.                                 //printf("xtsz.t15.txt=\"%d:%d:%d\"\xff\xff\xff",(unsigned int)hour,(unsigned int)minute,(unsigned int)second);        //打印小时

  815.                         //        printf("时间:%d-%d-%d\r\n",(unsigned int)hour,(unsigned int)minute,(unsigned int)second);        //打印

  816.                         }

  817.           }               

  818.                                 */

  819.                 if(mode==12)//模式12

  820.                 {

  821.                         if(i==100)  //开启

  822.                         {

  823.                                 i=0;

  824.                           ADC0 = ADS1115_Read(0)*1000;        //通道0

  825.                         //        printf("ADS1115通道1:");        

  826.                         //        printf("%gmv\n",(float)ADC0/1000);        //打印//强制转换成float数发送使用%g不打印多的0

  827.                 }

  828.          }

  829.                          if(mode==13)//模式13

  830.                 {

  831.                         if(i==100)  //开启

  832.                         {

  833.                                 i=0;

  834.                           ADC1 = ADS1115_Read(1)*1000;        //通道1

  835.                         //        printf("ADS1115通道2:");        

  836.                         //        printf("%gmv\n",(float)ADC1/1000);        //打印//强制转换成float数发送使用%g不打印多的0

  837.                 }

  838.         }

  839.                    if(mode==14)//模式14

  840.                 {        

  841.                         if(i==100)  //开启

  842.                         {

  843.                                 i=0;

  844.                           ADC2 = ADS1115_Read(2)*1000;        //通道2

  845.                         //        printf("ADS1115通道3:");        

  846.                         //        printf("%gmv\n",(float)ADC2/1000);        //打印//强制转换成float数发送使用%g不打印多的0

  847.                 }

  848.         }

  849.                         if(mode==15)//模式15

  850.                 {

  851.                         if(i==100)  //开启

  852.                         {

  853.                                 i=0;

  854.                           //ADC3 = (unsigned int)(ADS1115_Read(3)*1000);        //通道3

  855.                           ADC3 = ADS1115_Read(3)*1000;        //通道3

  856.                         //        printf("ADS1115通道4:");        

  857.                         //        printf("%gmv\n",(float)ADC3/1000);        //打印//强制转换成float数发送使用%g不打印多的0

  858.                 }

  859.         }






  860.                   if(k1 && k2 && k3 && k4 && k5 )

  861.                         {

  862.                 //        kk=0;

  863.                   count1=0; //计数清零

  864.                         }

  865.                 }

  866.                 if(writedat==1) //写入24C08 的标志;

  867.                 {

  868.                         writedat=0; //清除写入24C08 的标志;

  869.                                  num1=(uchar)(mode1/256);

  870.          num2=(uchar)(mode1%256); //num1和num2是将up的0-65535计算成两个255分别存储的变量

  871.                                  num3=(uchar)(mode2/256);

  872.          num4=(uchar)(mode2%256); //num3和num4是将down的0-65535计算成两个255分别存储的变量


  873.                                  num5=(uchar)(mode3/256);

  874.          num6=(uchar)(mode3%256); //num5和num6是将up的0-65535计算成两个255分别存储的变量

  875.                                  num7=(uchar)(mode4/256);

  876.          num8=(uchar)(mode4%256); //num7和num8是将down的0-65535计算成两个255分别存储的变量

  877.                                  num9=(uchar)(mode5/256);

  878.          num10=(uchar)(mode5%256); //num9和num10是将up的0-65535计算成两个255分别存储的变量

  879.                                  num11=(uchar)(mode6/256);

  880.          num12=(uchar)(mode6%256); //num11和num12是将down的0-65535计算成两个255分别存储的变量

  881.                                  num13=(uchar)(mode7/256);

  882.          num14=(uchar)(mode7%256); //num13和num14是将up的0-65535计算成两个255分别存储的变量

  883.                                  num15=(uchar)(mode8/256);

  884.          num16=(uchar)(mode8%256); //num15和num16是将down的0-65535计算成两个255分别存储的变量


  885.                                  write(0xa0,0x01,num1); //地址1写入0-255

  886.          delay1(10);  

  887.          write(0xa0,0x02,num2); //地址2写入0-255

  888.          delay1(10);

  889.          write(0xa0,0x03,num3); //地址3写入0-255

  890.          delay1(10);         

  891.          write(0xa0,0x04,num4); //地址4写入0-255

  892.          delay1(10);

  893.                                  write(0xa0,0x05,num5); //地址5写入0-255

  894.          delay1(10);  

  895.          write(0xa0,0x06,num6); //地址6写入0-255

  896.          delay1(10);

  897.          write(0xa0,0x07,num7); //地址7写入0-255

  898.          delay1(10);         

  899.          write(0xa0,0x08,num8); //地址8写入0-255

  900.          delay1(10);

  901.                                  write(0xa0,0x09,num9); //地址9写入0-255

  902.          delay1(10);  

  903.          write(0xa0,0x10,num10); //地址10写入0-255

  904.          delay1(10);

  905.          write(0xa0,0x11,num11); //地址11写入0-255

  906.          delay1(10);         

  907.          write(0xa0,0x12,num12); //地址12写入0-255

  908.          delay1(10);

  909.                                  write(0xa0,0x13,num13); //地址13写入0-255

  910.          delay1(10);  

  911.          write(0xa0,0x14,num14); //地址14写入0-255

  912.          delay1(10);

  913.          write(0xa0,0x15,num15); //地址15写入0-255

  914.          delay1(10);         

  915.          write(0xa0,0x16,num16); //地址16写入0-255

  916.          delay1(10);                 

  917.                 }

  918. switch(mode) //模式

  919.         {

  920.         case 0:  //主显示

  921.         {     

  922.                    if(flag1s) //1s定时标志

  923.                          {

  924.                     dis_buf[0]=table[46];//显示千万位

  925.                     dis_buf[1]=table[Val/1000]+0x80;//显示百万位 +0x80就是显示有小数点

  926.                     dis_buf[2]=table[Val%1000/100];//显示十万位

  927.                     dis_buf[3]=table[Val%100/10];//显示万位

  928.                     dis_buf[4]=table[Val%10];//显示千位

  929.                     dis_buf[5]=table[20];//显示百位

  930.                     dis_buf[6]=table[fhz/10];//显示十位

  931.                     dis_buf[7]=table[fhz%10];//显示个位

  932.                          }

  933.                          else

  934.                          {

  935.                     dis_buf[6]=table[55];//显示十位

  936.                     dis_buf[7]=table[55];//显示个位                                 

  937.                          }

  938.         }                break;

  939.         case 1: //菜单1

  940.         {

  941.                     dis_buf[0]=table[36];//显示千万位

  942.                     dis_buf[1]=table[1];//显示百万位

  943.                     dis_buf[2]=table[52];//显示十万位

  944.                     dis_buf[3]=table[mode1/10000];//显示万位

  945.                     dis_buf[4]=table[mode1%10000/1000];//显示千位

  946.                     dis_buf[5]=table[mode1%1000/100];//显示百位

  947.                     dis_buf[6]=table[mode1%100/10];//显示十位

  948.         dis_buf[7]=table[mode1%10]; //显示个位

  949.         }break;

  950.         case 2: //菜单2

  951.         {

  952.                     dis_buf[0]=table[36];//显示千万位

  953.                     dis_buf[1]=table[2];//显示百万位

  954.                     dis_buf[2]=table[52];//显示十万位

  955.                     dis_buf[3]=table[mode2/10000];//显示万位

  956.                     dis_buf[4]=table[mode2%10000/1000];//显示千位

  957.                     dis_buf[5]=table[mode2%1000/100];//显示百位

  958.                     dis_buf[6]=table[mode2%100/10];//显示十位

  959.         dis_buf[7]=table[mode2%10]; //显示个位

  960.         }break;

  961.         case 3: //菜单3

  962.         {

  963.                     dis_buf[0]=table[36];//显示千万位

  964.                     dis_buf[1]=table[3];//显示百万位

  965.                     dis_buf[2]=table[52];//显示十万位

  966.                     dis_buf[3]=table[mode3/10000];//显示万位

  967.                     dis_buf[4]=table[mode3%10000/1000];//显示千位

  968.                     dis_buf[5]=table[mode3%1000/100];//显示百位

  969.                     dis_buf[6]=table[mode3%100/10];//显示十位

  970.         dis_buf[7]=table[mode3%10]; //显示个位

  971.         }break;

  972.         case 4: //菜单4

  973.         {

  974.                     dis_buf[0]=table[36];//显示千万位

  975.                     dis_buf[1]=table[4];//显示百万位

  976.                     dis_buf[2]=table[52];//显示十万位

  977.                     dis_buf[3]=table[mode4/10000];//显示万位

  978.                     dis_buf[4]=table[mode4%10000/1000];//显示千位

  979.                     dis_buf[5]=table[mode4%1000/100];//显示百位

  980.                     dis_buf[6]=table[mode4%100/10];//显示十位

  981.         dis_buf[7]=table[mode4%10]; //显示个位

  982.         }break;

  983.         case 5: //菜单5

  984.         {

  985.                     dis_buf[0]=table[36];//显示千万位

  986.                     dis_buf[1]=table[5];//显示百万位

  987.                     dis_buf[2]=table[52];//显示十万位

  988.                     dis_buf[3]=table[mode5/10000];//显示万位

  989.                     dis_buf[4]=table[mode5%10000/1000];//显示千位

  990.                     dis_buf[5]=table[mode5%1000/100];//显示百位

  991.                     dis_buf[6]=table[mode5%100/10];//显示十位

  992.         dis_buf[7]=table[mode5%10]; //显示个位

  993.         }break;

  994.         case 6: //菜单6

  995.         {

  996.                     dis_buf[0]=table[36];//显示千万位

  997.                     dis_buf[1]=table[6];//显示百万位

  998.                     dis_buf[2]=table[52];//显示十万位

  999.                     dis_buf[3]=table[mode6/10000];//显示万位

  1000.                     dis_buf[4]=table[mode6%10000/1000];//显示千位

  1001.                     dis_buf[5]=table[mode6%1000/100];//显示百位

  1002.                     dis_buf[6]=table[mode6%100/10];//显示十位

  1003.         dis_buf[7]=table[mode6%10]; //显示个位

  1004.         }break;

  1005.         case 7: //菜单7

  1006.         {

  1007.                     dis_buf[0]=table[36];//显示千万位

  1008.                     dis_buf[1]=table[7];//显示百万位

  1009.                     dis_buf[2]=table[52];//显示十万位

  1010.                     dis_buf[3]=table[mode7/10000];//显示万位

  1011.                     dis_buf[4]=table[mode7%10000/1000];//显示千位

  1012.                     dis_buf[5]=table[mode7%1000/100];//显示百位

  1013.                     dis_buf[6]=table[mode7%100/10];//显示十位

  1014.         dis_buf[7]=table[mode7%10]; //显示个位

  1015.         }break;

  1016.         case 8: //菜单8

  1017.         {

  1018.                     dis_buf[0]=table[36];//显示千万位

  1019.                     dis_buf[1]=table[8];//显示百万位

  1020.                     dis_buf[2]=table[52];//显示十万位

  1021.                     dis_buf[3]=table[mode8/10000];//显示万位

  1022.                     dis_buf[4]=table[mode8%10000/1000];//显示千位

  1023.                     dis_buf[5]=table[mode8%1000/100];//显示百位

  1024.                     dis_buf[6]=table[mode8%100/10];//显示十位

  1025.         dis_buf[7]=table[mode8%10]; //显示个位

  1026.         }break;        

  1027.         case 9: //菜单9

  1028.         {

  1029.                     dis_buf[0]=table[volt1/100]+0x80;//显示千万位

  1030.                     dis_buf[1]=table[volt1%100/10];//显示百万位

  1031.                     dis_buf[2]=table[volt1%10];//显示十万位

  1032.                     dis_buf[3]=table[46];//显示万位

  1033.                     dis_buf[4]=table[volt2/100]+0x80;//显示千位

  1034.                     dis_buf[5]=table[volt2%100/10];//显示百位

  1035.                     dis_buf[6]=table[volt2%10];//显示十位

  1036.         dis_buf[7]=table[46]; //显示个位

  1037.         }break;   

  1038.         case 10: //菜单10

  1039.         {                  

  1040.                     dis_buf[0]=table[55];//显示千万位

  1041.                    // dis_buf[1]=table[55];//显示百万位

  1042.                     dis_buf[2]=table[duqu/10000];//显示十万位

  1043.                     dis_buf[3]=table[duqu%10000/1000];//显示万位

  1044.                     dis_buf[4]=table[duqu%1000/100]+0x80;//显示千位

  1045.                     dis_buf[5]=table[duqu%100/10];//显示百位

  1046.                     dis_buf[6]=table[duqu%10];//显示十位

  1047.         dis_buf[7]=table[15]; //显示个位

  1048.         }break;               


  1049.         case 11: //菜单11

  1050.         {

  1051.                     dis_buf[0]=table[hour/10];//显示千万位

  1052.                     dis_buf[1]=table[hour%10];//显示百万位

  1053.                     dis_buf[2]=table[52];//显示十万位

  1054.                     dis_buf[3]=table[minute/10];//显示万位

  1055.                     dis_buf[4]=table[minute%10];//显示千位

  1056.                     dis_buf[5]=table[52];//显示百位

  1057.                     dis_buf[6]=table[second/10];//显示十位

  1058.         dis_buf[7]=table[second%10]; //显示个位

  1059.         }break;            

  1060.         case 12: //菜单12

  1061.         {

  1062.         dis_buf[0]=table[36]; //显示千万位

  1063.         dis_buf[1]=table[1]; //显示百万位

  1064.         dis_buf[2]=table[2]; //显示十万

  1065.         dis_buf[3]=table[52]; //显示万位

  1066.         dis_buf[4]=table[ADC0/1000]+0x80; //显示千位

  1067.         dis_buf[5]=table[ADC0%1000/100]; //显示百位

  1068.         dis_buf[6]=table[ADC0%100/10]; // 显示十位

  1069.         dis_buf[7]=table[ADC0%10]; //显示个位

  1070.         }break;

  1071.         case 13: //菜单13

  1072.         {

  1073.         dis_buf[0]=table[36]; //显示千万位

  1074.         dis_buf[1]=table[1]; //显示百万位

  1075.         dis_buf[2]=table[3]; //显示十万

  1076.         dis_buf[3]=table[52]; //显示万位

  1077.         dis_buf[4]=table[ADC1/1000]+0x80; //显示千位

  1078.         dis_buf[5]=table[ADC1%1000/100]; //显示百位

  1079.         dis_buf[6]=table[ADC1%100/10]; // 显示十位

  1080.         dis_buf[7]=table[ADC1%10]; //显示个位

  1081.         }break;

  1082.         case 14: //菜单14

  1083.         {

  1084.         dis_buf[0]=table[36]; //显示千万位

  1085.         dis_buf[1]=table[1]; //显示百万位

  1086.         dis_buf[2]=table[4]; //显示十万

  1087.         dis_buf[3]=table[52]; //显示万位

  1088.         dis_buf[4]=table[ADC2/1000]+0x80; //显示千位

  1089.         dis_buf[5]=table[ADC2%1000/100]; //显示百位

  1090.         dis_buf[6]=table[ADC2%100/10]; // 显示十位

  1091.         dis_buf[7]=table[ADC2%10]; //显示个位

  1092.         }break;

  1093.         case 15: //菜单15

  1094.         {

  1095.         dis_buf[0]=table[36]; //显示千万位

  1096.         dis_buf[1]=table[1]; //显示百万位

  1097.         dis_buf[2]=table[5]; //显示十万

  1098.         dis_buf[3]=table[52]; //显示万位

  1099.         dis_buf[4]=table[ADC3/1000]+0x80; //显示千位

  1100.         dis_buf[5]=table[ADC3%1000/100]; //显示百位

  1101.         dis_buf[6]=table[ADC3%100/10]; // 显示十位

  1102.         dis_buf[7]=table[ADC3%10]; //显示个位

  1103.         }break;

  1104.         case 16: //菜单12

  1105.         {

  1106.                     dis_buf[0]=table[h/10];//显示千万位

  1107.                     dis_buf[1]=table[h%10];//显示百万位

  1108.                     dis_buf[2]=table[52];//显示十万位

  1109.                     dis_buf[3]=table[m/10];//显示万位

  1110.                     dis_buf[4]=table[m%10];//显示千位

  1111.                     dis_buf[5]=table[52];//显示百位

  1112.                     dis_buf[6]=table[s/10];//显示十位

  1113.         dis_buf[7]=table[s%10]; //显示个位

  1114.         }break;

  1115.         case 17: //菜单17

  1116.         {

  1117.                     dis_buf[0]=table[18];//显示千万位

  1118.                     dis_buf[1]=table[14];//显示百万位

  1119.                     //dis_buf[2]=table[7]+0x80;//显示十万位

  1120.                     dis_buf[3]=table[mode0/10000];//显示万位

  1121.                     dis_buf[4]=table[mode0%10000/1000];//显示千位

  1122.                     dis_buf[5]=table[mode0%1000/100];//显示百位

  1123.                     dis_buf[6]=table[mode0%100/10];//显示十位

  1124.         dis_buf[7]=table[mode0%10]; //显示个位

  1125.         }break;        

  1126. }        //default: 如果表达式的值和以上的case后面的值都没有匹配上,那么就执行这里的代码。

  1127. }


  1128. void display595out() //595数码管输出

  1129. {

  1130.         //display595();

  1131.         DisplayScan();

  1132. }

  1133. void duqu24cxx()

  1134. {

  1135.         if(rst==1) //判断如果等于高电平那么就执行读取数据,如果不是那么就不读取数据同时存储的数据会清零

  1136. {

  1137. num1 = read(0xa0,0x01,0xa1); //地址1读出0-255

  1138. delay1(10);  //适当延时

  1139. num2 = read(0xa0,0x02,0xa1); //地址2读出0-255

  1140. delay1(10);  //适当延时

  1141. num3 = read(0xa0,0x03,0xa1); //地址3读出0-255

  1142. delay1(10);  //适当延时

  1143. num4 = read(0xa0,0x04,0xa1); //地址4读出0-255

  1144. delay1(10);  //适当延时

  1145. num5 = read(0xa0,0x05,0xa1); //地址5读出0-255

  1146. delay1(10);  //适当延时

  1147. num6 = read(0xa0,0x06,0xa1); //地址6读出0-255

  1148. delay1(10);  //适当延时

  1149. num7 = read(0xa0,0x07,0xa1); //地址7读出0-255

  1150. delay1(10);  //适当延时

  1151. num8 = read(0xa0,0x08,0xa1); //地址8读出0-255

  1152. delay1(10);  //适当延时

  1153. num9 = read(0xa0,0x09,0xa1); //地址9读出0-255

  1154. delay1(10);  //适当延时

  1155. num10 = read(0xa0,0x10,0xa1); //地址10读出0-255

  1156. delay1(10);  //适当延时

  1157. num11 = read(0xa0,0x11,0xa1); //地址11读出0-255

  1158. delay1(10);  //适当延时

  1159. num12 = read(0xa0,0x12,0xa1); //地址12读出0-255

  1160. delay1(10);  //适当延时

  1161. num13 = read(0xa0,0x13,0xa1); //地址13读出0-255

  1162. delay1(10);  //适当延时

  1163. num14 = read(0xa0,0x14,0xa1); //地址14读出0-255

  1164. delay1(10);  //适当延时

  1165. num15 = read(0xa0,0x15,0xa1); //地址15读出0-255

  1166. delay1(10);  //适当延时

  1167. num16 = read(0xa0,0x16,0xa1); //地址16读出0-255

  1168. delay1(10);  //适当延时


  1169. mode1 = num1*256 + num2; //计算还原成0-65535

  1170. mode2 = num3*256 + num4; //计算还原成0-65535

  1171. mode3 = num5*256 + num6; //计算还原成0-65535

  1172. mode4 = num7*256 + num8; //计算还原成0-65535

  1173. mode5 = num9*256 + num10; //计算还原成0-65535

  1174. mode6 = num11*256 + num12; //计算还原成0-65535

  1175. mode7 = num13*256 + num14; //计算还原成0-65535

  1176. mode8 = num15*256 + num16; //计算还原成0-65535

  1177. }

  1178. else if(rst==0)

  1179. {

  1180.                                  num1=(uchar)(mode1/256);

  1181.          num2=(uchar)(mode1%256); //num1和num2是将up的0-65535计算成两个255分别存储的变量

  1182.                                  num3=(uchar)(mode2/256);

  1183.          num4=(uchar)(mode2%256); //num3和num4是将down的0-65535计算成两个255分别存储的变量


  1184.                                  num5=(uchar)(mode3/256);

  1185.          num6=(uchar)(mode3%256); //num5和num6是将up的0-65535计算成两个255分别存储的变量

  1186.                                  num7=(uchar)(mode4/256);

  1187.          num8=(uchar)(mode4%256); //num7和num8是将down的0-65535计算成两个255分别存储的变量

  1188.                                  num9=(uchar)(mode5/256);

  1189.          num10=(uchar)(mode5%256); //num9和num10是将up的0-65535计算成两个255分别存储的变量

  1190.                                  num11=(uchar)(mode6/256);

  1191.          num12=(uchar)(mode6%256); //num11和num12是将down的0-65535计算成两个255分别存储的变量

  1192.                                  num13=(uchar)(mode7/256);

  1193.          num14=(uchar)(mode7%256); //num13和num14是将up的0-65535计算成两个255分别存储的变量

  1194.                                  num15=(uchar)(mode8/256);

  1195.          num16=(uchar)(mode8%256); //num15和num16是将down的0-65535计算成两个255分别存储的变量


  1196.                                  write(0xa0,0x01,num1); //地址1写入0-255

  1197.          delay1(10);  

  1198.          write(0xa0,0x02,num2); //地址2写入0-255

  1199.          delay1(10);

  1200.          write(0xa0,0x03,num3); //地址3写入0-255

  1201.          delay1(10);         

  1202.          write(0xa0,0x04,num4); //地址4写入0-255

  1203.          delay1(10);

  1204.                                  write(0xa0,0x05,num5); //地址5写入0-255

  1205.          delay1(10);  

  1206.          write(0xa0,0x06,num6); //地址6写入0-255

  1207.          delay1(10);

  1208.          write(0xa0,0x07,num7); //地址7写入0-255

  1209.          delay1(10);         

  1210.          write(0xa0,0x08,num8); //地址8写入0-255

  1211.          delay1(10);

  1212.                                  write(0xa0,0x09,num9); //地址9写入0-255

  1213.          delay1(10);  

  1214.          write(0xa0,0x10,num10); //地址10写入0-255

  1215.          delay1(10);

  1216.          write(0xa0,0x11,num11); //地址11写入0-255

  1217.          delay1(10);         

  1218.          write(0xa0,0x12,num12); //地址12写入0-255

  1219.          delay1(10);

  1220.                                  write(0xa0,0x13,num13); //地址13写入0-255

  1221.          delay1(10);  

  1222.          write(0xa0,0x14,num14); //地址14写入0-255

  1223.          delay1(10);

  1224.          write(0xa0,0x15,num15); //地址15写入0-255

  1225.          delay1(10);         

  1226.          write(0xa0,0x16,num16); //地址16写入0-255

  1227.          delay1(10);

  1228. }        

  1229. }

  1230. void ds1307duqu()

  1231. {

  1232. /*

  1233.         //初始化写入数码管的时分秒

  1234.         second=55;

  1235.         minute=59;

  1236.         hour=01;

  1237.                                 b_second=dectobcd(second);

  1238.                                 b_minute=dectobcd(minute);

  1239.                                 b_hour=dectobcd(hour);

  1240.                                 //将所调的时间向时钟写入

  1241.                                 write_1307(0xd0,0,b_hour);

  1242.                                 write_1307(0xd0,2,b_minute);        

  1243.                                 write_1307(0xd0,1,b_second);

  1244.         //初始化ds1307

  1245.         write_1307(0xd0,0x07,0x10);//初始化1307的控制字,使其SOUT引脚输出1Hz的方波。

  1246.         //初始化1307的时间/*

  1247.         write_1307(0xd0,6,0x07);                 

  1248.         write_1307(0xd0,5,0x11);   

  1249.         write_1307(0xd0,4,0x24);

  1250.         write_1307(0xd0,3,0x04);

  1251.         write_1307(0xd0,2,0x00);

  1252.         write_1307(0xd0,1,0x00);

  1253.         write_1307(0xd0,0,0x00);

  1254.                                 */

  1255.         /*                                //初始化写入数码管的时分秒

  1256.         second=55;

  1257.         minute=59;

  1258.         hour=01;

  1259.                                 b_second=dectobcd(second);

  1260.                                 b_minute=dectobcd(minute);

  1261.                                 b_hour=dectobcd(hour);

  1262.                                 //将所调的时间向时钟写入

  1263.                                 ds1307_write_date(0xd0,0,b_hour);

  1264.                                 ds1307_write_date(0xd0,2,b_minute);        

  1265.                                 ds1307_write_date(0xd0,1,b_second);

  1266.         */

  1267.         /*

  1268.         //初始化ds1307

  1269.         ds1307_write_date(0xd0,0x07,0x10);//初始化1307的控制字,使其SOUT引脚输出1Hz的方波。

  1270.         //初始化1307的时间/*

  1271.         ds1307_write_date(0xd0,6,0x07);                 

  1272.         ds1307_write_date(0xd0,5,0x11);   

  1273.         ds1307_write_date(0xd0,4,0x24);

  1274.         ds1307_write_date(0xd0,3,0x04);

  1275.         ds1307_write_date(0xd0,2,0x23); //

  1276.         ds1307_write_date(0xd0,1,0x55); //

  1277.         ds1307_write_date(0xd0,0,0x00); //

  1278.                                 */

  1279. }        


  1280. void init()  //初始化

  1281. {

  1282. MCP4725_WriteData(0);//掉电不保存数据

  1283. duqu24cxx(); //读出24cxx存储的数据        

  1284. ds1307duqu();//写入DS1307数据

  1285. Timer0Init(); //定时器初始化

  1286. SerialInit(); //串口初始化

  1287.         OLED_Init();

  1288.         OLED_CLS();

  1289. //        OLED_P32x64Str(0,0,2); //

  1290.         OLED_hzStr(0,0,2); //数

  1291.         OLED_hzStr(16,0,3); //字

  1292.         OLED_hzStr(32,0,0); //电

  1293.         OLED_hzStr(48,0,1); //压

  1294.         OLED_hzStr(64,0,4); //源

  1295.         OLED_P8x16Str(80,0,13); //        

  1296.         OLED_P8x16Str(88,0,0); //

  1297.   OLED_P8x16Str(96,0,0); //

  1298.         OLED_P8x16Str(104,0,0); //

  1299.         OLED_P8x16Str(112,0,0); //

  1300.         OLED_P8x16Str(120,0,49); //

  1301.         Display1(); //更新输出

  1302.         set_voltage=(unsigned int)mode; //强制转换uint输出

  1303.         OLED_P8x16Str(0,2,35); //M

  1304.         OLED_P8x16Str(8,2,37); //O

  1305.         OLED_P8x16Str(16,2,26); //D

  1306.         OLED_P8x16Str(24,2,27); //E

  1307.         OLED_P8x16Str(32,2,10); //:

  1308.         Display2(); //更新输出

  1309. //        OLED_hzStr(96,4,7);  //实

  1310. //        OLED_hzStr(112,4,8); //际

  1311. //        OLED_hzStr(96,6,5);  //设

  1312. //        OLED_hzStr(112,6,6); //定

  1313. }


  1314. void main()

  1315. {

  1316.   init();

  1317. // printf("初始化完成...\r\n"); //初始化完成后串口发出

  1318.         SendString("初始化完成...\r\n");//初始化完成后串口发出

  1319. while(1)

  1320. {

  1321.    //display595out(); //595数码管显示

  1322.          KEY(); //按键处理        

  1323.    EC11_Driver();                  //EC11编码器驱动函数

  1324. }

  1325. }


  1326. //定时器中断   

  1327. void time0() interrupt 1  //初始值大概2毫秒

  1328. {        

  1329.   static uint tcount;

  1330.         static uint tcount2;

  1331.   //TH0=(65536-2000)/256;//2ms

  1332.   //TL0=(65536-2000)%256;//2ms

  1333.   TH0=(65536-1920)/256;//2ms

  1334.   TL0=(65536-1920)%256;//2ms

  1335.         tcount++;

  1336.         count1++;

  1337.         tcount2++;

  1338.         i++;

  1339.          if(tcount==500)

  1340.         {

  1341.                 tcount=0;

  1342.                 s++;

  1343.                 if(s==60)

  1344.                 {

  1345.                   s=0;                                                                                                        

  1346.                   m++;

  1347.                 if(m==60)

  1348.                 {

  1349.                   m=0;

  1350.                   h++;

  1351.                 if(h==24)

  1352.                 {

  1353.                   h=0;

  1354.                  }

  1355.                  }                                                               

  1356.                  }

  1357.                                                                 run_time();        //时钟走动函数定义

  1358.          led=~led; //状态灯1秒一次

  1359.         }

  1360.          if(tcount2==250)

  1361.          {

  1362.                  flag1s=!flag1s;  //1s定时标志

  1363.                  tcount2=0;

  1364.          }


  1365.          display595out(); //595数码管显示

  1366.          EC11_Scan();                           //EC11编码器扫描

  1367.          read_ds18b20_temp();  //ds18b20温度读取

  1368. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表