找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8A单片机AC转换问题

[复制链接]
回帖奖励 3 黑币 回复本帖可获得 3 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:574524 发表于 2020-2-14 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
初学STC8A单片机,ADC转换用P10通道,无检测结果。接3.3V测试电压,ADC_RES输出为0;请指教!
程序如下:
  1. #include "stc8.h"
  2. #define uchar unsigned char  

  3. unsigned char const z[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//7段数码管段码表共阳0,1,2,3,4,5,6,7,8,9,.
  4. unsigned char code c[]={0x08,0x10,0x20,0x40};//数码管扫描
  5. unsigned char smgduan[4]={0x3f,0x80,0x3f,0x3e};
  6. sbit LSA=P0^0;
  7. sbit LSB=P0^1;
  8. sbit LSC=P0^2;

  9. int e;
  10. void smg(void)
  11. {
  12. unsigned char i;
  13. while(1)
  14.       {
  15. for(i=0;i<4;i++)
  16. {
  17.   switch(i)
  18.   {
  19.    case(0):
  20.     LSA=0;LSB=0;LSC=0; break;//???0?
  21.    case(1):
  22.     LSA=1;LSB=0;LSC=0; break;//???1?
  23.    case(2):
  24.     LSA=0;LSB=1;LSC=0; break;//???2?
  25.    case(3):
  26.     LSA=1;LSB=1;LSC=0; break;//???3?
  27.   }
  28.   
  29.   P2=smgduan[i]
  30.   delay(100);
  31.   P2=0x00;
  32. }
  33. }}
  34. uint GetADCResult()   
  35. {   
  36.         ADC_CONTR = ADC_POWER|ADC_START;        
  37.     _nop_();
  38.     _nop_();
  39.    _nop_();
  40.    _nop_();
  41.    ADC_RES=0;
  42.     while(!(ADC_CONTR & 0x20));
  43.      ADC_CONTR &= ~ADC_FLAG;   
  44.       return (ADC_RES*4+ADC_RESL);
  45. }
  46. void main(void)
  47. {  
  48. uint V;
  49.   P1M0 = 0X00;
  50.   P1M1 = 0X00;
  51. ADC_CONTR=0x80;
  52. ADCCFG=0x00;
  53.   ADC_RES=0;
  54. ADC_RESL=0;
  55.   while(1)
  56. {
  57.   V=GetADCResult()*10;
  58. smgduan[0]=z[V/10];
  59. smgduan[2]=z[V%10];
  60. smg();
  61.   }
  62. }
复制代码

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

使用道具 举报

沙发
ID:213173 发表于 2020-2-15 07:13 | 只看该作者
楼主程序不完整,寄存器配置不当,给你补充并注释,你试试。
  1. #include "stc8.h"
  2. #include "intrins.h"
  3. #define uchar unsigned char  
  4. #define uint unsigned int
  5. unsigned char const z[]={
  6. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};//7段数码管段码表共阴0,1,2,3,4,5,6,7,8,9,.
  7. //unsigned char code c[]={0x08,0x10,0x20,0x40};//数码管扫描
  8. unsigned char smgduan[4];//显示缓存
  9. sbit LSA=P0^0;
  10. sbit LSB=P0^1;
  11. sbit LSC=P0^2;
  12. //int e;
  13. void delay(uint k)
  14. {
  15.         uint i,j;
  16.         for(i=k;i>0;i--)
  17.                 for(j=1150;j>0;j--);//12T/j=110
  18. }

  19. void smg(void)
  20. {
  21.         static uchar i=0;
  22.         P2=0x00;//消隐
  23.         switch(i)//送位码
  24.         {
  25.                 case(0):
  26.                 LSA=0;LSB=0;LSC=0;i++; break;//???0?
  27.                 case(1):
  28.                 LSA=1;LSB=0;LSC=0;i++; break;//???1?
  29.                 case(2):
  30.                 LSA=0;LSB=1;LSC=0;i++; break;//???2?
  31.                 case(3):
  32.                 LSA=1;LSB=1;LSC=0;i=0; break;//???3?
  33.         }
  34.         P2=smgduan[i];//送段码
  35.         delay(1);
  36. }

  37. uint GetADCResult(uchar ch)   
  38. {   
  39.         ADC_CONTR = ADC_POWER|ADC_START|ch;//        
  40.         _nop_();
  41.         _nop_();
  42.         _nop_();
  43.         _nop_();
  44. //        ADC_RES=0;
  45.         while(!(ADC_CONTR & 0x20));
  46.         ADC_CONTR &= ~ADC_FLAG;   
  47.         return ADC_RES<<8|ADC_RESL;
  48. }
  49. void main(void)
  50. {  
  51.         uint V;
  52.         P1M0 = 0x00;//P1.0高阻模式
  53.         P1M1 = 0x01;//P1.0高阻模式
  54.         ADC_CONTR=0x80;//开ADC电源
  55.         ADCCFG=0x2f;//保存结果格式1/速度512时钟
  56.         ADC_RES=0;//清以前结果
  57.         ADC_RESL=0;//清以前结果
  58.         while(1)
  59.         {
  60.                 V=GetADCResult(0);//通道P1.0结果0~4095
  61.                 smgduan[0]=z[V/1000%10];
  62.                 smgduan[1]=z[V/100%10];
  63.                 smgduan[2]=z[V/10%10];
  64.                 smgduan[3]=z[V%10];
  65.                 smg();
  66.         }
  67. }
复制代码
回复

使用道具 举报

板凳
ID:574524 发表于 2020-2-15 18:35 | 只看该作者
wulin 发表于 2020-2-15 07:13
楼主程序不完整,寄存器配置不当,给你补充并注释,你试试。

谢谢指导!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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