找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1330|回复: 6
收起左侧

单片机新手,想做一个三位半的数字万用表,想请教仿真时代码出现的问题如何解决

[复制链接]
ID:499243 发表于 2019-5-3 13:57 | 显示全部楼层 |阅读模式
100黑币
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned charuchar code table[]="0123456789.vAmA" ;
uint i,j;
sbit ST=P2^0;
sbit EOC=P2^1;
sbit OE=P2^2;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit x1=P2^4;
sbit x2=P2^5;
sbit x3=P2^6;
sbit E=P1^5;
sbit RS=P1^4;
sbit RW=P1^3; bit busy_flag = 0;
RS = 0;
RW = 1;
E = 1;
Delay(5);
busy_flag = (bit)(P3 & 0x80);
E = 0;
return busy_flag;
}
void wcmd(uchar del)
{
while(Busy());
RS = 0;
RW = 0;
E = 0;
Delay(5);
P3 = del;
Delay(5);
E = 1;
Delay(5);
E = 0;
}
void wdata(uchar del)
{
while(Busy());
RS = 1;
RW = 0;
E = 0; Delay(5);
wcmd(0x38);
Delay(5);
wcmd(0x38);
Delay(5);
wcmd(0x38);
wcmd(0x08);
wcmd(0x0c);
wcmd(0x04);
wcmd(0x01);
}
void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
wcmd(a);
wdata(sign);
}
void main()
{
uint a1,a2,a3,a4;
uchar add;
while(1)
{
ST=0; {
Delay(10);
if(k2==0)
{
if(x1==0)
{
Delay(10);
if(x1==0)
{
a1=(add*20)/1000;
a2=(add*20)%1000/100;
a3=(add*20)%100/10;
a4=(add*20)%10;
L1602_char(2,7,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,8,table[a2]);
L1602_char(2,9,table[a3]);
}
}
}
if(x2==0)
{
a1=(add*10)/1000;
a2=(add*10)%1000/100;
a3=(add*10)%100/10;
a4=(add*10)%10;
L1602_char(2,8,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,7,table[a2]);
L1602_char(2,9,table[a3]);
}
} L1602_char(2,8,table[a2]);
L1602_char(2,9,table[a3]);
L1602_char(2,10,table[a4]);
}
if(x2==0)
{
a1=add/5/1000;
a2=add/5%1000/100;
a3=add/5%100/10;
a4=add/5%10;
L1602_char(2,7,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,8,table[a2]);
L1602_char(2,9,table[a3]);
}
if(x3==0)
{
a1=add/50/1000;
a2=add/50%1000/100;
a3=add/50%100/10;
a4=add/50%10;
L1602_char(2,7,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,8,table[a2]);
L1602_char(2,9,table[a3]);
L1602_char(2,10,table[a4]);
}
}
if(k1==0)
{
if(x1==0)
{
a1=add*2/5/1000;
a2=add*2/5%1000/100; a1=(add*4)/1000;
a2=(add*4)%1000/100;
a3=(add*4)%100/10;
a4=(add*4)%10;
L1602_char(2,7,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,8,table[a2]);
L1602_char(2,9,table[a3]);
}
if(x3==0)
{
a1=(add*80)/1000;
a2=(add*80)%1000/100;
a3=(add*80)%100/10;
a4=(add*80)%10;
L1602_char(2,9,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,7,table[a2]);
L1602_char(2,8,table[a3]);
L1602_char(2,10,table[a4]);
}
}
}
}
a3=(add*2/5)%100/10;
a4=(add*2/5)%10;
L1602_char(2,8,table[10]);
L1602_char(2,6,table[a1]);
L1602_char(2,7,table[a2]);
L1602_char(2,9,table[a3]);
}
if(x2==0)
{
if(k3==0)
{
if(x1==0)
{
a1=(add*2)/1000;
a2=(add*2)%1000/100;
a3=(add*2)%100/10;
a4=(add*2)%10;
L1602_char(2,7,table[10]);
L1602_char(2,6,table[a1]);
OE=0;
P0=0xff;
ST=1;
_nop_(); _nop_(); _nop_();
ST=0;
_nop_(); _nop_(); _nop_(); _nop_();
while(EOC==0);
OE=1;add=P0;
_nop_();
OE=0;
Delay(30);
L1602_init();
if(k2==0)
Delay(5);
P3 = del;
Delay(5);
E = 1;
Delay(5);
E = 0;
}
void L1602_init(void)
{
wcmd(0x38);
void delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void Delay(uint i)
{
uint x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
bit Busy(void)
{

DMM.zip

34.7 KB, 下载次数: 12

回复

使用道具 举报

ID:499243 发表于 2019-5-4 13:07 | 显示全部楼层
有大神能帮帮忙吗
回复

使用道具 举报

ID:213173 发表于 2019-5-4 15:00 | 显示全部楼层
chenchen1 发表于 2019-5-4 13:07
有大神能帮帮忙吗

楼主这是从哪里找来的,几乎就是一堆乱码。要想整理好比重新写一个还麻烦。
回复

使用道具 举报

ID:155507 发表于 2019-5-4 15:30 | 显示全部楼层
给你改了, 但没编译也没测试 不知道会有什么问题 你试试吧


  1. #include<reg52.h>
  2. #include<intrins.h>

  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code table[]="0123456789.vAmA" ;
  6. uint i, j;
  7. sbit ST=P2^0;  //ADC0809 start conversion
  8. sbit EOC=P2^1; // End of conversion
  9. sbit OE=P2^2;  // Enable output data
  10. sbit k1=P1^0;
  11. sbit k2=P1^1;
  12. sbit k3=P1^2;
  13. sbit x1=P2^4;
  14. sbit x2=P2^5;
  15. sbit x3=P2^6;
  16. sbit E=P1^5;
  17. sbit RS=P1^4;
  18. sbit RW=P1^3;

  19. void delay5u()
  20. {
  21.   _nop_();
  22.   _nop_();
  23.   _nop_();
  24.   _nop_();
  25.   _nop_();
  26. }
  27. void Delay(uint i)
  28. {
  29.   uint x,j;
  30.   for(j=0;j<i;j++)
  31.   for(x=0;x<=148;x++);
  32. }

  33. bit Busy(void)
  34. {
  35.   bit busy_flag = 0;
  36.   
  37.   RS = 0;
  38.   RW = 1;
  39.   E = 1;
  40.   Delay(5);
  41.   busy_flag = (bit)(P3 & 0x80);
  42.   E = 0;
  43.   return busy_flag;
  44. }
  45. void wcmd(uchar del)
  46. {
  47.   while(Busy());
  48.   RS = 0;
  49.   RW = 0;
  50.   E = 0;
  51.   Delay(5);
  52.   P3 = del;
  53.   Delay(5);
  54.   E = 1;
  55.   Delay(5);
  56.   E = 0;
  57. }
  58. void wdata(uchar del)
  59. {
  60.   while(Busy());
  61.   RS = 1;
  62.   RW = 0;
  63.   E = 0;
  64.   Delay(5);
  65.   P3 = del;
  66.   Delay(5);
  67.   E = 1;
  68.   Delay(5);
  69.   E = 0;
  70. }


  71. void L1602_char(uchar hang, uchar lie, char sign)
  72. {
  73.   uchar a;
  74.   if(hang == 1) a = 0x80;
  75.   if(hang == 2) a = 0xc0;
  76.   a = a + lie - 1;
  77.   wcmd(a);
  78.   wdata(sign);
  79. }

  80. void L1602_init(void)
  81. {
  82.   wcmd(0x38);
  83.   Delay(5);
  84.   wcmd(0x38);
  85.   Delay(5);
  86.   wcmd(0x38);
  87.   Delay(5);
  88.   wcmd(0x38);
  89.   wcmd(0x08);
  90.   wcmd(0x0c);
  91.   wcmd(0x04);
  92.   wcmd(0x01);
  93. }


  94. void main()
  95. {
  96.   uint a1,a2,a3,a4;
  97.   uchar add;

  98.   Delay(30);
  99.   L1602_init();

  100.   while(1)
  101.   {
  102.     ST=0;  
  103.     OE=0;  // read ADC0809
  104.     P0=0xff;
  105.     ST=1;
  106.     _nop_(); _nop_(); _nop_();
  107.     ST=0;
  108.     _nop_(); _nop_(); _nop_(); _nop_();
  109.     while(EOC==0);
  110.     OE=1; add=P0;
  111.     _nop_();
  112.     OE=0;
  113.    
  114.     Delay(10);
  115.     if(x1==0)
  116.     {
  117.       Delay(10);
  118.       if(x1==0)
  119.       {
  120.         a1=(add*20)/1000;
  121.         a2=(add*20)%1000/100;
  122.         a3=(add*20)%100/10;
  123.         a4=(add*20)%10;
  124.         L1602_char(2,7,table[10]);
  125.         L1602_char(2,6,table[a1]);
  126.         L1602_char(2,8,table[a2]);
  127.         L1602_char(2,9,table[a3]);
  128.       }
  129.     }

  130.     if(x2==0)
  131.     {
  132.       a1=(add*10)/1000;
  133.       a2=(add*10)%1000/100;
  134.       a3=(add*10)%100/10;
  135.       a4=(add*10)%10;
  136.       L1602_char(2,8,table[10]);
  137.       L1602_char(2,6,table[a1]);
  138.       L1602_char(2,7,table[a2]);
  139.       L1602_char(2,9,table[a3]);
  140.     }
  141.     //}
  142.     L1602_char(2,8,table[a2]);
  143.     L1602_char(2,9,table[a3]);
  144.     L1602_char(2,10,table[a4]);

  145.     if(x2==0)
  146.     {
  147.       a1=add/5/1000;
  148.       a2=add/5%1000/100;
  149.       a3=add/5%100/10;
  150.       a4=add/5%10;
  151.       L1602_char(2,7,table[10]);
  152.       L1602_char(2,6,table[a1]);
  153.       L1602_char(2,8,table[a2]);
  154.       L1602_char(2,9,table[a3]);
  155.     }
  156.     if(x3==0)
  157.     {
  158.       a1=add/50/1000;
  159.       a2=add/50%1000/100;
  160.       a3=add/50%100/10;
  161.       a4=add/50%10;
  162.       L1602_char(2,7,table[10]);
  163.       L1602_char(2,6,table[a1]);
  164.       L1602_char(2,8,table[a2]);
  165.       L1602_char(2,9,table[a3]);
  166.       L1602_char(2,10,table[a4]);
  167.     }
  168.     //}
  169.     if(k1==0)
  170.     {
  171.       if(x1==0)
  172.       {
  173.         a1=add*2/5/1000;
  174.         a2=add*2/5%1000/100; a1=(add*4)/1000;
  175.         a2=(add*4)%1000/100;
  176.         a3=(add*4)%100/10;
  177.         a4=(add*4)%10;
  178.         L1602_char(2,7,table[10]);
  179.         L1602_char(2,6,table[a1]);
  180.         L1602_char(2,8,table[a2]);
  181.         L1602_char(2,9,table[a3]);
  182.       }
  183.       if(x3==0)
  184.       {
  185.         a1=(add*80)/1000;
  186.         a2=(add*80)%1000/100;
  187.         a3=(add*80)%100/10;
  188.         a4=(add*80)%10;
  189.         L1602_char(2,9,table[10]);
  190.         L1602_char(2,6,table[a1]);
  191.         L1602_char(2,7,table[a2]);
  192.         L1602_char(2,8,table[a3]);
  193.         L1602_char(2,10,table[a4]);
  194.       }
  195.     }  
  196.     //}
  197.     if(x2==0)
  198.     {
  199.       if(k3==0)
  200.       {
  201.         if(x1==0)
  202.         {
  203.           a1=(add*2)/1000;
  204.           a2=(add*2)%1000/100;
  205.           a3=(add*2)%100/10;
  206.           a4=(add*2)%10;
  207.           L1602_char(2,7,table[10]);
  208.           L1602_char(2,6,table[a1]);

  209.         }
  210.       }
  211.     }
  212.     if(k2==0)
  213.     {  
  214.       if(k2==0)
  215.       {

  216.         a3=(add*2/5)%100/10;
  217.         a4=(add*2/5)%10;
  218.         L1602_char(2,8,table[10]);
  219.         L1602_char(2,6,table[a1]);
  220.         L1602_char(2,7,table[a2]);
  221.         L1602_char(2,9,table[a3]);
  222.       }

  223.     }
  224.    
  225.   }
  226. }


复制代码
回复

使用道具 举报

ID:499243 发表于 2019-5-6 20:03 | 显示全部楼层
angmall 发表于 2019-5-4 15:30
给你改了, 但没编译也没测试 不知道会有什么问题 你试试吧

谢谢您抽出时间帮忙。我不懂这个,但是作业要求没办法,才来求助的。您给的代码编译没有问题,但是仿真的时候没有数值显示,不知道是我操作有问题还是仿真图没画对。
回复

使用道具 举报

ID:499243 发表于 2019-5-6 21:59 | 显示全部楼层
wulin 发表于 2019-5-4 15:00
楼主这是从哪里找来的,几乎就是一堆乱码。要想整理好比重新写一个还麻烦。

你好,我是从其他网站找的。因为我也不是很懂,不知道问题在哪里
回复

使用道具 举报

ID:478236 发表于 2019-5-7 15:10 | 显示全部楼层
这个已经不是新手的范围了,大佬
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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