OpenEdv-开源电子网

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

stm8程序问题

[复制链接]

3

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-4-15
在线时间
4 小时
发表于 2013-4-21 12:04:28 | 显示全部楼层 |阅读模式
我做了一个基于stm8的检测仪,程序做完后发现显示的数据抖动的很厉害,想把数据固定显示,应该怎么编程

程序.txt

3.74 KB, 下载次数: 66

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-21 13:27:43 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

4

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2013-4-15
在线时间
4 小时
 楼主| 发表于 2013-4-21 13:42:11 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子哥,给点建议呗,怎么弄比较好啊
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-21 17:06:28 | 显示全部楼层
main(void)
{
  while(1)
  {
  float a=0;
  int j=0,k;
  int m=1;
  int arry[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
  int i,b,c,d,e;
  unsigned char n;
    //CLK_SWR= 0xE1;//选择芯片内部的 16MHZ 的 RC 振荡器为 主时钟
    //CLK_CKDIVR= 0x08;//主时钟=16MHZ/2
                     //CPU 时钟 =主时钟= 8MHZ
  
  // 初始化A/D模块
  ADC_CR2 = 0x08;             // A/D结果数据右对齐
  ADC_CR1 = 0x02;             // ADC时钟=主时钟/2=1MHZ
                              // ADC转换模式=单次
                              // 禁止ADC转换
  ADC_CSR = 0x04;             // 选择通道4
 ADC_TDRL = 0x20;            
                                                 
  
    ADC_CR1 = 0x01;           // CR1寄存器的最低位置1,使能ADC转换
   for(i=0;i<100;i++);       // 延时一段时间,至少7uS,保证ADC模块的上电完成
   ADC_CR1 = ADC_CR1 | 0x01; // 再次将CR1寄存器的最低位置1
                              // 使能ADC转换
   while((ADC_CSR & 0x80) == 0); // 等待ADC结束
          
    i = ADC_DRL;              // 读出ADC结果的低8位
    
 while(i!=0)                  //二进制转换十进制
 {
  k=i%10;
  j+=k*m;
  m=m*2;
  i=i/10;
 }  
   a=j*0.02;                  //分离十进制数          
   b=a*100;
   c=b/100;
   d=(b%100)/10;
   e=b%10;

    G_DDR = 0xFF;      //设置PG为LCD1602   8位数据输出口
    G_CR1 = 0xFF;      
    G_CR2 = 0x00;      

    E_DDR = 0x25;      //设置rs=PE0;//H数据,L命令,rw=PE2;lcden=PE5;
    E_CR1 = 0x25;      //设置IO口E为推挽方式 
    E_CR2 = 0x00;          
    E_ODR = 0x00;      //设置输出寄存器的输出数值,初始化
    G_ODR = 0x00; 
   
    E_ODR&= 0xFB;      //rw=0;
  
delay(200);
delay(200);
PE_ODR&= 0xDF;     //lcden=0;
 lcdwrcom(0x00|0x80);
  for(n=0;n<16;n++)
  {
   lcdwrdata(table[n]);     //将第一行写入
   delay(10);
  } 
  
  
  lcdwrcom(0x40|0x80);

 lcdwrdata(arry[c]);         //第二行写入
 delay(10);
   lcdwrdata('.');
   delay(10);
   lcdwrdata(arry[d]);
  delay(10);
  lcdwrdata(arry[e]);
   delay(10);
   lcdwrdata('m');
   delay(10);
   lcdwrdata('g');
   delay(10);
   lcdwrdata('/');
   delay(10);
   lcdwrdata('L');
   delay(10);
}

}
你代码不看不知道,一看吓一跳.
这main函数写的实在是创意无限啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

6

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2013-4-20
在线时间
4 小时
发表于 2013-4-22 18:36:41 | 显示全部楼层

看到你的问题,和我的差不多。我做的也是一个仪表,采用的STM8L151器件做的,主要考虑用他的12 BIT ADC和DAC,DAC还没有测,ADC测试下来感觉抖动非常厉害。
显示部分刚刚做完,也是发现显示数值抖动非常厉害,后来查原因发现ADC转换过来的值都有很大抖动,及时ADC输入接GND,AD转换值都可以达到10个码,并不稳定。在找ST技术支持帮忙分析,还在等待中。我真担心这个MCU的ADC本身就不大好,这样就麻烦了,我的系统得重新选型,不得不更换方案了。

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 02:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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