找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机+1602显示字符串问题

[复制链接]
跳转到指定楼层
楼主

  1. #include <reg51.h>
  2. #include <intrins.h>              //包含_nop_()空函数的头文件
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define out P0
  6. sbit RS=P1^0;                                          //位变量
  7. sbit RW=P1^1;                                          //位变量
  8. sbit E=P1^2;                                          //位变量
  9. sbit DQ=P1^5;                                          //位变量
  10. sbit I2C_SCL=P1^6;                                  //位变量
  11. sbit I2C_SDA=P1^7;                //I2C通信的两个引脚
  12. sbit  S3=P3^5;                    //加//按键
  13. sbit  S2=P3^6;                    //减
  14. sbit  S1=P3^7;                    //保存
  15. void delay(uint);                                  //延时函数(1ms)
  16. void delay5(uchar);                                  //延时函数(5us)
  17. void lcd_initial(void);                          //LCD初始化函数
  18. void init_ds18b20(void);              //DS18B20初始化函数  
  19. void check_busy(void);                  //检查忙标志位函数
  20. void write_command(uchar com);          //写命令函数
  21. void write_data(uchar dat);                  //写显示数据函数
  22. uchar readbyte(void);                          //读取1B数据
  23. void writebyte(uchar);                          //写入1B函数
  24. uchar retemp(void);                              //读温度函数
  25. void string(uchar ad,uchar *s);          //逐个输出显示字符串函数
  26. void stringAll(uchar ad,uchar *s);//整屏输出显示字符串函数
  27. void getHtemp(uchar str[]);              //获得最高温度的字符串形式
  28. void getLtemp(uchar str[]);              //获得最低温度的字符串形式
  29. void getTtemp(uchar str[]);              //获得当前温度的字符串形式
  30. void  delayms(uint t);            //延时函数
  31. void  keyscan();                  //按键扫描函数
  32. void  save_data();                //保存数据的函数
  33. void  load_data();                //读取数据的函数
  34. uchar code seg[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xdf,0x43,0x20,0x2d}; //(0-9,'°','C',' '(空格),'-')ASCII码值
  35. uint flag=0;
  36. uchar maxtemp=40;                                  //初始化最高温度
  37. uchar mintemp=30;                 //初始化最低温度        
  38.                         
  39. //主函数                                
  40. void main()
  41. {
  42.         uchar Htempstr[4];
  43.         uchar Ltempstr[4];
  44.         uchar Ttempstr[4];
  45.         uchar i=16;
  46.         uchar *gear="0";
  47.         uchar tempsign[2];
  48.         tempsign[0]=seg[10];
  49.         tempsign[1]=seg[11];
  50.         lcd_initial();
  51.         load_data();                  //读取保存在EEPROM中的数据           
  52.         string(0x80,"welcome to AAUCS");
  53.         string(0xc5,"NO.35");
  54.         delay(500);
  55.         while(i){
  56.                 write_command(0x1c);      //实际电路板上需设置为0x18
  57.                 i--;
  58.                 delay(200);
  59.         }
  60.         lcd_initial();        
  61.         while(1){
  62.                 keyscan();
  63.                 getHtemp(Htempstr);
  64.                 getLtemp(Ltempstr);
  65.                 getTtemp(Ttempstr);        
  66.                 //stringAll(0x80,"H:");
  67.                 stringAll(0x82,Htempstr);
  68.                 //stringAll(0x86,tempsign);
  69.                 //stringAll(0x88,"L:");
  70.                 //stringAll(0x8a,Ltempstr);               
  71.                 //stringAll(0x8e,tempsign);
  72.                 //stringAll(0xc0,"T:");               
  73.                 //stringAll(0xc2,Ttempstr);
  74.                 //stringAll(0xc6,tempsign);
  75.                 //stringAll(0xca,"FAN:");
  76.                 //stringAll(0xce,gear);
  77.                 delay(100);
  78.         }        
  79. }

  80. //获得最高温度的字符串形式
  81. void getHtemp(uchar htempstr[4]){
  82.         uchar a,b,c;                                          
  83.         if(maxtemp>=0)
  84.         {
  85.                 a=seg[maxtemp/100];                     
  86.                 b=seg[(maxtemp/10)%10];
  87.                 c=seg[maxtemp%10];
  88.                 htempstr[0]=seg[12];
  89.         }
  90.         else
  91.         {
  92.                 maxtemp=~maxtemp+1;
  93.                 a=seg[maxtemp/100];                     
  94.                 b=seg[(maxtemp/10)%10];
  95.                 c=seg[maxtemp%10];
  96.                 htempstr[0]=seg[13];
  97.         }
  98.         htempstr[1]=a;
  99.         htempstr[2]=b;
  100.         htempstr[3]=c;
  101. }

  102. //获得最低温度的字符串形式
  103. void getLtemp(uchar ltempstr[4]){
  104.         uchar a,b,c;                                          
  105.         if(mintemp>=0)
  106.         {
  107.                 a=seg[mintemp/100];                     
  108.                 b=seg[(mintemp/10)%10];
  109.                 c=seg[mintemp%10];
  110.                 ltempstr[0]=seg[12];
  111.         }
  112.         else
  113.         {
  114.                 mintemp=~mintemp+1;
  115.                 a=seg[mintemp/100];                     
  116.                 b=seg[(mintemp/10)%10];
  117.                 c=seg[mintemp%10];
  118.                 ltempstr[0]=seg[13];
  119.         }
  120.         ltempstr[1]=a;
  121.         ltempstr[2]=b;
  122.         ltempstr[3]=c;
  123. }

  124. //获得当前温度的字符串形式
  125. void getTtemp(uchar str[4]){
  126.         uchar temp,a,b,c;        
  127.         temp=retemp();                                 
  128.         a=seg[temp/100];                     
  129.         b=seg[(temp/10)%10];
  130.         c=seg[temp%10];
  131.         if(flag==0)
  132.         {
  133.                 str[0]=seg[12];
  134.         }
  135.         else
  136.         {
  137.                 str[0]=seg[13];
  138.         }
  139.         str[1]=a;
  140.         str[2]=b;
  141.         str[3]=c;
  142. }

  143. //整屏输出显示字符串函数
  144. void stringAll(uchar ad,uchar *s)
  145. {
  146.    write_command(ad);
  147.    while(*s>0)
  148.    {
  149.           write_data(*s++);
  150.    }
  151. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:584814 发表于 2021-10-17 21:28 | 只看该作者
看来问题是语文一直不及格罢
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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