找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1091|回复: 1
打印 上一主题 下一主题
收起左侧

初学51单片机,发个18b20程序4位数据线驱动1602程序

[复制链接]
跳转到指定楼层
楼主
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar tab0[]="00.0";
  6. uchar tab1[]="0123456789";

  7. bit flag;
  8. uint temp;

  9. sbit rs = P3^5;
  10. sbit rw = P3^3;
  11. sbit lcden = P3^4;
  12. sbit ds=P3^7;

  13. void display(uint a);

  14. void delay(uchar z)
  15. {   
  16.    uchar x,y;
  17.     for(x=z;x>0;x--)
  18. {

  19. }      for(y=110;y>0;y--);
  20. }

  21. void delays(uint t)
  22. {
  23.    while(t--);
  24. }


  25. void write_com(uchar com)
  26. {
  27.     rs = 0;
  28.     rw = 0;
  29.     P1=com&0xf0;
  30.     delay(5);
  31.     lcden  = 1;
  32.     lcden  = 0;

  33.     P1=(com<<4)&0xf0;
  34.     delay(5);
  35.     lcden  = 1;
  36.     lcden  = 0;
  37. }

  38. void write_data(uchar dats)
  39. {   
  40.     rs = 1;
  41.     rw = 0;
  42.     P1=dats&0xf0;
  43.     delay(5);
  44.     lcden  = 1;
  45.     lcden  = 0;

  46.     P1=(dats<<4)&0xf0;
  47.     delay(5);
  48.     lcden  = 1;
  49.     lcden  = 0;

  50. }

  51. void init_1602()
  52. {   
  53.     write_com(0x32);
  54.     write_com(0x28);
  55.     write_com(0x0c);
  56.     write_com(0x06);
  57.     write_com(0x01);
  58. }

  59. void ds_reset()
  60. {
  61.    ds=1;
  62.    delays(5);
  63.    ds=0;
  64.    delays(80);
  65.    ds=1;
  66.    delays(14);
  67.    if(ds==0)
  68.      flag=1;
  69.    else
  70.      flag=0;
  71.    delays(20);
  72. }

  73. bit ds_read_bit()
  74. {
  75.    bit dat;
  76.    ds=0;
  77.    _nop_();
  78.    _nop_();
  79.    ds=1;
  80.    _nop_();
  81.    dat=ds;
  82.    delays(10);
  83.    return dat;
  84. }

  85. uchar ds_read_byte()
  86. {
  87.    uchar i,j,k;
  88.    for(i=0;i<8;i++)
  89. {
  90.    j= ds_read_bit();
  91.    k=(j<<7)|(k>>1);
  92. }
  93.    return k;
  94. }

  95. void ds_write_byte(uchar dat)
  96. {
  97.    uchar i;
  98.    for(i=0;i<8;i++)
  99. {
  100.    ds=0;
  101.    _nop_();
  102.    ds=dat&0x01;
  103.    delays(6);
  104.    ds=1;
  105.    dat=dat>>1;
  106. }
  107.    delays(6);
  108. }

  109. uint read_temperture()
  110. {
  111.    uchar a,b;
  112.    ds_reset();
  113.    ds_write_byte(0xcc);
  114.    ds_write_byte(0xbe);
  115.    a=ds_read_byte();
  116.    b=ds_read_byte();
  117.    temp=b;
  118.    temp=temp<<8;
  119.    temp=temp|a;
  120.    temp=temp*0.0625*10+0.5;
  121.    return temp;
  122. }

  123. void main()
  124. {
  125.    init_1602();
  126.    while(1)
  127. {
  128.    ds_reset();
  129.    ds_write_byte(0xcc);
  130.    ds_write_byte(0x44);
  131.    display(read_temperture());
  132. }
  133. }


  134. void display(uint a)
  135. {
  136.    uchar bai,shi,ge,i;
  137.    bai=a/100;
  138.    shi=a%100/10;
  139.    ge=a%100%10;
  140. {
  141.    tab0[0]=tab1[bai];
  142.    tab0[1]=tab1[shi];
  143.    tab0[3]=tab1[ge];      

  144.    write_com(0x80);
  145.    for(i=0;i<4;i++)
  146. {  
  147.    write_data(tab0[i]);
  148.    delay(8);
  149. }
  150.    write_com(0x84);
  151.    write_data(0xdf);
  152.    write_com(0x85);
  153.    write_data(0x43);
  154. }
  155. }
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:447989 发表于 2018-12-17 19:02 | 只看该作者
本帖最后由 沙漠里的胡杨 于 2018-12-17 19:39 编辑

为什么图片没显示呢?

QQ图片20181217151045.jpg (137.53 KB, 下载次数: 47)

QQ图片20181217151045.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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