找回密码
 立即注册

QQ登录

只需一步,快速开始

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

为啥单片机下载烧录成功但是LCD上什么都没有?求指导

[复制链接]
跳转到指定楼层
楼主
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit lcden=P2^1;         //定义E口
  6. sbit lcdrs=P2^0;         //定义RS口
  7. sbit beep=P2^2;          //定义蜂鸣器
  8. uchar code table[]={'0','1','2','3','4','5','6',           //创建键位数组,数字,运算符号,等于号,清零(小数点)
  9.                                 '7','8','9','+','-','*','/','=','.'};                                       
  10. uchar key,flag1,js,k1,k2;
  11. uchar a[20],b[20];
  12. float jieguo=0;
  13. void delay(uchar z) //延迟函数
  14. {
  15.         uchar x,y;
  16.         for(x=z;x>0;x--)
  17.                 for(y=110;y>0;y--);
  18. }
  19. void write_cmd(uchar cmd) //写命令函数
  20. {
  21.         lcdrs=0;
  22.         P1=cmd;
  23.         delay(5);
  24.         lcden=1;
  25.         delay(4);
  26.         lcden=0;
  27. }
  28. void write_data(uchar date) //写数据函数
  29. {
  30.         lcdrs=1;
  31.         P1=date;
  32.         delay(5);
  33.         lcden=1;
  34.         delay(5);
  35.         lcden=0;
  36. }
  37. void init()        //LCD初始化函数
  38. {
  39.         lcden=0;
  40.         write_cmd(0x38); //设置16x2显示,8位数据接口
  41.         write_cmd(0x0c); //设置开显示,不显示光标(关显示是0x08)
  42.         write_cmd(0x06); //写一个字符后地址指针加1
  43.         write_cmd(0x01); //清屏
  44. }        
  45. void keyscan()
  46. {
  47.         uchar temp,uu=0xf7;
  48.         uint i;
  49.         for(i=0;i<4;i++)
  50.         {
  51.                 uu=_crol_(uu,1); //左移
  52.                 P3=uu;
  53.                 temp=P3;
  54.                 temp=temp&0x0f;
  55.                 if(temp!=0x0f)
  56.                 {
  57.                         delay(10);
  58.                         temp=P3;
  59.                         temp=temp&0x0f;
  60.                         if(temp!=0x0f)
  61.                         {
  62.                                 temp=P3;
  63.                                 switch(temp)
  64.                                 {
  65.                                         case 0xee:key=1;beep=0;delay(200);beep=1;break;                          //延迟200响声
  66.                                         case 0xde:key=2;beep=0;delay(200);beep=1;break;
  67.                                         case 0xbe:key=3;beep=0;delay(200);beep=1;break;
  68.                                         case 0x7e:key=10;beep=0;delay(200);beep=1;break;
  69.                                         case 0xed:key=4;beep=0;delay(200);beep=1;break;
  70.                                         case 0xdd:key=5;beep=0;delay(200);beep=1;break;
  71.                                         case 0xbd:key=6;beep=0;delay(200);beep=1;break;
  72.                                         case 0x7d:key=11;beep=0;delay(200);beep=1;break;
  73.                                         case 0xeb:key=7;beep=0;delay(200);beep=1;break;
  74.                                         case 0xdb:key=8;beep=0;delay(200);beep=1;break;
  75.                                         case 0xbb:key=9;beep=0;delay(200);beep=1;break;
  76.                                         case 0x7b:key=12;beep=0;delay(200);beep=1;break;
  77.                                         case 0xe7:key=0;beep=0;delay(200);beep=1;break;
  78.                                         case 0xd7:key=15;beep=0;delay(200);beep=1;
  79.                             beep=0;delay(200);beep=1;beep=0;delay(200);beep=1;break;                //清零长响声
  80.                                         case 0xb7:key=13;beep=0;delay(200);beep=1;break;
  81.                                         case 0x77:key=14;beep=0;delay(180);beep=1;delay(100);
  82.                              beep=0;delay(180);beep=1;break;                 //等于按键两声短响,中间较短间隔
  83.                                 }
  84.                                 while(temp!=0x0f)
  85.                                 {
  86.                                         temp=P3;
  87.                                         temp=temp&0x0f;
  88.                                 }
  89.                                 flag1=1;
  90.                         }
  91.                 }
  92.         }
  93. }
  94. void jscl() //计算显示函数
  95. {
  96.         uchar i,j,n;
  97.         float s,temp2;
  98.         long int s1,s2,a1,b1,c1,temp1;
  99.         a1=1;
  100.         b1=1;
  101.         s1=0;
  102.         s2=0;
  103.         s=0;
  104.         if(k2!=0)
  105.         {
  106.                 for(j=0;j<k1+1;j++)        //存放第一操作数
  107.                 {
  108.                         for(i=0;i<k1-j;i++)
  109.                                 a1=a1*10;
  110.                         s1=s1+a[j]*a1;
  111.                         a1=1;
  112.                 }
  113.                 for(j=k1+1;j<k2+1;j++) //存放第二操作数
  114.                 {
  115.                         for(i=0;i<k2-j;i++)
  116.                                 b1=b1*10;
  117.                         s2=s2+a[j]*b1;
  118.                         b1=1;
  119.                 }
  120.                 if(js==10)          //判断运算符号
  121.                 {
  122.                         s=s1+s2;
  123.                 }
  124.                 if(js==11)
  125.                 {
  126.                         s=s1-s2;
  127.                 }
  128.                 if(js==12)
  129.                 {
  130.                         s=s1*s2;
  131.                 }
  132.                 if(js==13)
  133.                 {
  134.                         s=(s1*0.1)/(s2*0.1);
  135.                 }
  136.                 jieguo=s;
  137.         }
  138.         else
  139.                 s=jieguo;
  140.         if(jieguo>9999||s>=9999)
  141.         {
  142.                 write_data('E');
  143.         }
  144.         else                                                                   //运算结果小数的处理
  145.         {
  146.                 c1=(long int)(s*1000)%10;
  147.                 if(c1>=5)
  148.                         s=s+0.01;
  149.                 temp1=(long int)(s);
  150.                 temp2=s-temp1;
  151.                 n=0;
  152.                 while(temp1)
  153.                 {
  154.                         b[n]=temp1%10;
  155.                         temp1=temp1/10;
  156.                         n++;
  157.                 }
  158.                 b[n]=temp2*10;
  159.                 b[n+1]=(uchar)(temp2*100)%10;
  160.                 for(i=n;i>0;i--)
  161.                 {
  162.                         write_data(table[b[i-1]]);
  163.                 }
  164.                 if(jieguo<1)
  165.                 {
  166.                         write_data(table[0]);
  167.                         write_data(table[15]);
  168.                         write_data(table[b[n]]);
  169.                     write_data(table[b[n+1]]);
  170.                 }
  171.                 else
  172.                 {
  173.                         write_data(table[15]);
  174.                         write_data(table[b[n]]);
  175.                         write_data(table[b[n+1]]);
  176.                 }
  177.         }
  178. }
  179. void main()
  180. {
  181.         uchar i,j;
  182.         init();
  183.         write_cmd(0x80); //将液晶指针定位在第一行第一个单元
  184.         key=15;
  185.         i=0;
  186.         flag1=0;
  187.         while(1)
  188.         {
  189.                 keyscan();
  190.                 if(flag1==1)
  191.                 {
  192.                         if(key==15)                  //判断为清零操作
  193.                         {
  194.                                 write_cmd(0x01);
  195.                                 i=0;
  196.                                 for(j=0;j<20;j++)
  197.                                 {
  198.                                         a[j]=0;
  199.                                         b[j]=0;
  200.                                 }
  201.                                 k1=0;
  202.                                 k2=0;
  203.                         }
  204.                         else if(key<10)                 //判断为数字
  205.                         {
  206.                                 write_data(table[key]);
  207.                                 a[i]=key;
  208.                                 i++;
  209.                         }
  210.                         else if(key<14)                 //判断为运算符号
  211.                         {
  212.                                 write_data(table[key]);
  213.                                 k1=i-1;
  214.                                 js=key;
  215.                         }
  216.                         else                                                //判断为等于操作
  217.                         {
  218.                                 write_data(table[key]);
  219.                                 if(i==0)
  220.                                 k2=0;
  221.                                 else
  222.                                         k2=i-1;
  223.                                 write_cmd(0x80+0x40);
  224.                                 jscl();
  225.                         }
  226.                         flag1=0;
  227.                 }
  228.         }
  229. }
复制代码


111.png (34.29 KB, 下载次数: 32)

电路图

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

使用道具 举报

沙发
ID:752974 发表于 2021-12-14 17:29 | 只看该作者
编译成功,语法没有问题,但不能证明逻辑的正确性。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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