Chinaunix首页 | 论坛 | 博客
  • 博客访问: 418466
  • 博文数量: 121
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1393
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-11 12:17
个人简介

www.vibexie.com vibexie@qq.com

文章分类

全部博文(121)

文章存档

2015年(55)

2014年(66)

我的朋友

分类: C/C++

2014-09-26 21:35:29



点击(此处)折叠或打开

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5. #include<stdio.h>

  6. #define uchar unsigned char
  7. #define uint unsigned int

  8. sbit DS=P2^2;
  9. sbit lcden=P3^4;
  10. sbit lcdrs=P3^5;
  11. sbit lcdrw=P3^6;
  12. sbit lcdpsb=P1^7;
  13. sbit wela=P2^6;
  14. sbit dula=P2^7;

  15. uchar dis1[]={"--------"};/*display1*/
  16. uchar dis2[]={"当前温度"};
  17. uchar dis4[]={"--------"};
  18. uint temp;

  19. void delay_ms(uint);
  20. void lcd_init();
  21. void write_cmd(uchar);
  22. void write_dat(uchar);
  23. void lcd_pos(uchar,uchar);

  24. void dsreset();
  25. bit tmpreadbit();
  26. uchar tempread();
  27. void tmpwritebyte(uchar);
  28. void tmpchange();
  29. uint tmp();

  30. void main()
  31. {
  32.     uchar i,buff[4];
  33.     uint temp;

  34.     wela=0;
  35.     dula=0;
  36.     delay_ms(10);
  37.     lcd_init();

  38.     lcd_pos(0,2);
  39.     i=0;
  40.     while(dis1[i]!=0)
  41.     {
  42.     write_dat(dis1[i]);
  43.     i++;
  44.     }

  45.     lcd_pos(1,2);
  46.     i=0;
  47.     while(dis2[i]!=0)
  48.     {
  49.     write_dat(dis2[i]);
  50.     i++;
  51.     }

  52.     lcd_pos(3,2);
  53.     i=0;
  54.     while(dis4[i]!=0)
  55.     {
  56.     write_dat(dis4[i]);
  57.     i++;
  58.     }

  59.     while(1)
  60.     {
  61.     tmpchange();
  62.     temp=tmp();

  63.     lcd_pos(2,2);


  64.     sprintf(buff,"%d",temp);    
  65.     write_dat(buff[0]);
  66.     write_dat(buff[1]);
  67.     write_dat('.');
  68.     write_dat(buff[2]);
  69.     write_dat('\'');
  70.     write_dat('C');
  71.     };
  72. }

  73. /***************ds begin*******************/

  74. void dsreset(void)
  75. {
  76.     uint i;
  77.     DS=0;
  78.     i=103;
  79.     while(i>0)i--;
  80.     DS=1;
  81.     i=4;
  82.     while(i>0)i--;
  83. }

  84. bit tmpreadbit(void)
  85. {
  86.     uint i;
  87.     bit dat;
  88.     DS=0;i++;
  89.     DS=1;i++;i++;
  90.     dat=DS;
  91.     i=8;while(i>0)i--;
  92.     return (dat);
  93. }

  94. uchar tmpread(void)
  95. {
  96.     uchar i,j,dat;
  97.     dat=0;
  98.     for(i=1;i<=8;i++)
  99.     {
  100.         j=tmpreadbit();
  101.         dat=(j<<7)|(dat>>1);
  102.     }
  103.     return(dat);
  104. }

  105. void tmpwritebyte(uchar dat)
  106. {
  107.     uint i;
  108.     uchar j;
  109.     bit testb;
  110.     for(j=1;j<=8;j++)
  111.     {
  112.         testb=dat&0x01;
  113.         dat=dat>>1;
  114.         if(testb)
  115.         {
  116.             DS=0;
  117.             i++;i++;
  118.             DS=1;
  119.              i=8;while(i>0)i--;
  120.         }
  121.         else
  122.         {
  123.              DS=0;
  124.             i=8;while(i>0)i--;
  125.             DS=1;
  126.             i++;i++;
  127.         }
  128.     }
  129. }

  130. void tmpchange(void)
  131. {
  132.     dsreset();
  133.     delay_ms(1);
  134.     tmpwritebyte(0xcc);
  135.     tmpwritebyte(0x44);
  136. }

  137. uint tmp()
  138. {
  139.     float tt;
  140.     uchar a,b;
  141.     dsreset();
  142.     delay_ms(1);
  143.     tmpwritebyte(0xcc);
  144.     tmpwritebyte(0xbe);
  145.     a=tmpread();
  146.     b=tmpread();
  147.     temp=b;
  148.     temp<<=8;
  149.     temp=temp|a;
  150.     tt=temp*0.0625;
  151.     temp=tt*10+0.5;
  152.     return temp;
  153. }


  154. /***************ds end*******************/

  155. /***************12864 begin*******************/

  156. void lcd_init()
  157. {
  158.     lcdpsb=1;/*并行方式*/
  159.     write_cmd(0x30);
  160.     delay_ms(5);
  161.     write_cmd(0x0c);
  162.     delay_ms(5);
  163.     write_cmd(0x01);/*清除*/
  164.     delay_ms(5);
  165. }

  166. void lcd_pos(uchar x,uchar y)
  167. {
  168.     uchar pos;
  169.     if(x==0)
  170.     x=0x80;
  171.     else if(x==1)
  172.     x=0x90;
  173.     else if(x==2)
  174.     x=0x88;
  175.     else if(x==3)
  176.     x=0x98;
  177.     pos=x+y;
  178.     write_cmd(pos);
  179. }

  180. void write_cmd(uchar cmd)
  181. {
  182.     lcdrs=0;
  183.     lcdrw=0;
  184.     lcden=0;
  185.     P0=cmd;
  186.     delay_ms(5);
  187.     lcden=1;
  188.     delay_ms(5);
  189.     lcden=0;
  190. }

  191. void write_dat(uchar dat)
  192. {
  193.     lcdrs=1;
  194.     lcdrw=0;
  195.     lcden=0;
  196.     P0=dat;
  197.     delay_ms(5);
  198.     lcden=1;
  199.     delay_ms(5);
  200.     lcden=0;
  201. }

  202. /**************12864 end******************************/

  203. void delay_ms(uint del)
  204. {
  205.     uint i;
  206.     for(;del>0;del--)
  207.         for(i=124;i>0;i--);
  208. }

阅读(1828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~