OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3495|回复: 2

51单片机255倒计时器C语言程序问题

[复制链接]

2

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-7-20
在线时间
7 小时
发表于 2021-12-19 01:28:22 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 吴无坞 于 2021-12-19 01:34 编辑



  1. 255倒计时器的需求是,有s28(单刀开关),s29(按钮)两个控制构件,要求是s28低电位时,进入预设模式,有滑动电阻器输入电压,利用adc0808模数转换,得到数字量,然后在8位数码管最左3位动态显示出来,s28高电位时,8位数码管上最左边3位显示预设值,最右边3位显示实时倒计时值,按下s29(1下开始,2下暂停)开始倒计时,每一秒-1,减到0,则使蜂鸣器响30秒,然后8位数码管最右边重新显示预设值,等待下一次倒计时。
  2. 自己写的时候遇到的问题是,adc0809无法读取到数据,始终显示为0。
  3. 我想知道如何使用地址读取adc0809,就像汇编里面的 mov dptr,#XXXX   movx @dptr,a 两条指令利用地址实现读取adc0809。
  4. 因为实验箱硬件限制问题,只能按照如下接线图写程序,如果按照一般的分别设置eoc st oe这样使用adc0809比较麻烦,由下图可知,而且这样尝试的时候遇到了奇怪的bug,数码管异常,只显示最后一位。
  5. 下面是接线图以及c语言程序。(不知道为什么文字编写框,背景色变成墨绿的加上黑字很难看,虽然不规范,为了清晰就用代码框了)
复制代码

更改.png

  1. #include <REGX51.H>
  2. #include <absacc.h>
  3. #define uchar unsigned char
  4. #define unit  unsigned int
  5. #define iocon  XBYTE[0x8003]
  6. #define PA  XBYTE[0x8000]
  7. #define PB  XBYTE[0x8001]
  8. #define AD  XBYTE[0x9000]
  9. sbit eoc=P1^0;
  10. sbit biz=P1^1;
  11. sbit s28=P1^2;
  12. sbit s29=P3^2;
  13. sbit wr=P3^6;
  14. sbit rd=P3^7;
  15. uchar code wei[]={0x7f,0xbf,0xdf,0xfb,0xfd,0xfe};
  16. uchar code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  17. uchar zhi[6];
  18. uchar x;
  19. void delay(uchar x)
  20. {
  21.     uchar a,b ;
  22.     for (a=x;a>0;a--)
  23.        for (b=1000000;b>0;b--);
  24. }
  25. void show(uchar x)
  26. {
  27.         uchar i,j;
  28.         for(i=0;i<x;i++)
  29.         {   PB=wei[i];
  30.             j=zhi[i];
  31.             PA=duan[j];
  32.         }
  33. }
  34. void ext0() interrupt 0
  35. {
  36.     static int u=1;
  37.     u=~u;
  38.     if (u==0)
  39.     {
  40.         while(x)
  41.         {
  42.         x--;
  43.         zhi[3]=x/100;
  44.         zhi[4]=(x%100)/10;
  45.         zhi[5]=x%10;
  46.         show(6);
  47.         delay(1);
  48.         }
  49.         biz=0;
  50.         delay(30);
  51.         biz=1;
  52.         zhi[3]=zhi[0];
  53.         zhi[4]=zhi[1];
  54.         zhi[5]=zhi[2];
  55.     }
  56. }
  57. void main()
  58. {
  59.     iocon=0x80;
  60.     EA=1;
  61.     EX0=1;
  62.     IT0=1;
  63.     P0=0xff;
  64.     while(1)
  65.     {
  66.         if (s28==0)
  67.         {  
  68.            x=AD;                //就是这里有问题
  69.            zhi[0]=zhi[3]=x/100;
  70.            zhi[1]=zhi[4]=(x%100)/10;
  71.            zhi[2]=zhi[5]=x%10;
  72.            show(3);
  73.         }
  74.         else
  75.         {
  76.             show(6);
  77.         }
  78.     }
  79.         
  80. }
复制代码

end.zip (58.66 KB, 下载次数: 1)


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2021-7-20
在线时间
7 小时
 楼主| 发表于 2021-12-19 01:38:23 | 显示全部楼层
自己顶一下,没错,还是我,课设要求汇编,但是实在解决不了bug,就用c语言写一个,看老师能不能通融一下,实在不行,反汇编一个
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2021-12-21 01:42:28 | 显示全部楼层
帮顶
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 21:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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