搜索
bottom↓
回复: 9

有谁用12864 PCF8591 51单片机做过示波器

[复制链接]

出100入2764汤圆

发表于 2010-11-12 19:37:48 | 显示全部楼层 |阅读模式
//如题,我找了个现成的程序,但KEIL编译通不过,那位大侠能帮忙看下?程序如下:


#include "reg52.h"
#include "intrins.h"

#define pcf8591_write 0x90  //pcf8591在IIC中的地址
#define pcf8591_read  0x91
#define delaynop()  _nop_();_nop_();_nop_();_nop_();

#define lcd_on      63
#define lcd_off     62
#define page       184
#define x_position  64
unsigned char receive;
sbit SDA=P1^1;
sbit SCL=P1^0;
sbit d_i=P2^4;
sbit r_w=P2^5;
sbit e  =P2^6;
sbit cs1=P2^1;
sbit cs2=P2^2;
sbit rst=P2^3;

void delay(unsigned char times)
{
  unsigned i=920;
  while(times--)while(i--);
}  

void checkack(void)//查检对方应答
{  SDA=1;  SCL=1;  delaynop();  SCL=0;}//if(SDA==1); F0=1; }

void i2cstart() //开始IIC
{  SDA=1;  SCL=1;  delaynop();   SDA=0;  delaynop();   SCL=0;}

void i2c_w_byte(unsigned char com)//写一个字节
{
  unsigned char n=8;
  while(n--)
  {
     if((com&0x80)==0x80)SDA=1;else SDA=0;
     SCL=1;
     delaynop();
     SCL=0;
     com<<=1;
  }
    checkack();
}

unsigned char i2c_r_byte(void)//读一个字节
{
  unsigned char n=8,read_data;
  while(n--)
  {
    SDA=1;
    SCL=1;
    delaynop();
    read_data<<=1;
    if(SDA)read_data|=0x01;
    SCL=0;
   }
   return read_data;
}   

void i2c_mack(void)//发送应答
{  SDA=0;  SCL=1;  delaynop();  SCL=0;}

void i2c_nack(void)//发送非应答
{  SDA=1;  SCL=1;  delaynop();  SCL=0;}

void i2c_stop(void)//停止IIC
{  SDA=0; SCL=1;  delaynop();  SDA=1;  delaynop();  SCL=0;}

void check_busy(void)
{  d_i=0; r_w=1;  e=1;  while(P0&0x80);  e=0;}

void write( F0,unsigned char data_comm)//液晶屏写字节,F0=1为写数据,F0=0为写指令
{
  d_i=F0;
  r_w=0;
  e=1;
  P0=data_comm;
  e=0;
  check_busy();
}

unsigned char getpixel(void)//液晶屏读点
{
  unsigned char valve;
  d_i=1;
  r_w=1;
  e=1; P0=255; valve=P0;
  e=0;
  check_busy();
  d_i=1;
  e=1;
  valve=P0;
  e=0;
  check_busy();
  return valve;
}

void putpixel(unsigned char x,y)//液晶屏写点
{
  unsigned char valve;
  if(x<64) {cs1=1;cs2=0;} else {cs1=0;cs2=1;x-=64;}
  write(0,page+(y>>3));
  write(0,x_position+x);
  valve=getpixel();
  valve|=(1<<(y%8));
  write(0,x_position+x);
  write(1,valve);
}

void init_lcd(void)
{
  unsigned char i,j;
  rst=0;
  _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  rst=1;
  cs1=1;
  cs2=1;
  write(0,lcd_on);
  for(i=0;i<8;i++)
  {  
    write(0,page+i);
    write(0,x_position);
    for(j=0;j<64;j++)write(1,0);
  }
}

void adcpcf8591()//AD采样及显示
{
  unsigned char i,j,a1,a2,a3,d[108],f;
  i2cstart();
  i2c_w_byte(pcf8591_write);
  i2c_w_byte(1);
  i2cstart();
  i2c_w_byte(pcf8591_read);
  i2c_r_byte();
  i2c_mack();
  for(i=0;i<107;i++)
     {
       for(j=0;j<11;j++){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
();}//减慢
       d=i2c_r_byte();//采样
       i2c_mack();
       }
       d=i2c_r_byte();
  i2c_nack();
  i2c_stop();
  f=0;
  for(i=0;i<107;i++)//显示
    {
      a1=63-(d>>2);
      a2=63-(d[i+1]>>2);
      if(a1>a2){a3=a2;a2=a1;a1=a3;}
      if(a1>30)f=1;//检测到信号f=1,下面就沿时
      for(j=a1;j<=a2;j++)putpixel(i,j);
    }
    if(f) delay(7);
}

void main(void)
{
TH0=0X93;
TL0=0X00;
   while(1)
   {  
    init_lcd();//初始化及清屏
    adcpcf8591();
   }
}

出100入2764汤圆

 楼主| 发表于 2010-11-12 21:47:03 | 显示全部楼层
搞定了

出0入0汤圆

发表于 2011-9-7 10:23:17 | 显示全部楼层
楼主,是哪里出问题了?

出0入0汤圆

发表于 2012-5-2 16:06:01 | 显示全部楼层
垃圾贴,搞定了,也不告诉怎么解决的。只知道求人不知道教人。

出0入0汤圆

发表于 2012-5-2 23:09:32 | 显示全部楼层
楼上的图片,太!!!!!!!!!!!

出0入0汤圆

发表于 2012-5-17 13:48:23 | 显示全部楼层
楼主能说一下那里出问题了么  谢谢

出100入2764汤圆

 楼主| 发表于 2012-5-17 17:43:03 | 显示全部楼层
ken2010aa 发表于 2012-5-17 13:48
楼主能说一下那里出问题了么  谢谢

早忘了,都1年多没玩单片机了

出0入0汤圆

发表于 2012-5-20 10:45:53 | 显示全部楼层
WUWEWU 发表于 2012-5-17 17:43
早忘了,都1年多没玩单片机了

那当时的程序还在么?

出100入2764汤圆

 楼主| 发表于 2012-5-20 14:19:07 | 显示全部楼层
331086846 发表于 2012-5-20 10:45
那当时的程序还在么?

就是上面的了,后来也没改,没什么功能,就是采集 显示,不好用的 别指望太高

出0入0汤圆

发表于 2013-3-4 10:15:46 | 显示全部楼层
这个芯片是8位的,你想要什么结果?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-4 02:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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