导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→[求助]求高手帮我看下这个单片机程序

* 105257: [求助]求高手帮我看下这个单片机程序

   lalaxiao2007 
lalaxiao2007发表的帖子 

 [求助]求高手帮我看下这个单片机程序
我在做单片机实现数字电压表的毕业设计,现有一程序,但是小女子太笨了,翻了一天的书也看不懂,现拿出来给各位高手看看,希望大家能帮帮我,感激啊
我的qq:726643557
#include   <at89x51.h>   
#define uchar unsigned char  //*定义宏uchar=unsigned char**//
uchar code dispbitcode[]={0xfe,0xfd,0xfb,0xf7}; //*位地址代码*//
uchar code dispcode[]={0xc0,0x0f9,0x0a4,0x0b0,0x99,//*0~9,和不显示代码,共阳*//
0x92,0x82,0x0f8,0x80,0x90,0xff};
uchar dispbuf[4];     //*定义数组类型*//
uchar dispcount;            //*定义dispcount类型*//
uchar getdata;         //*定义getdata类型*//
unsigned int temp;      //*定义temp类型*//
uchar i;        //*定义i 类型*//
  
sbit st=p3^0; //*定义st的位地址为p3的第一位*//
sbit oe=p3^1; //定义oe的位地址p3的第二位*//
sbit eoc=p3^2; //定义eoc的位地址p3的第三位*//
sbit clk=p3^3; //定义clk的位地址p3的第四位*//
void main(void) 
{ 
  st=0; //*禁止a/d转换器启动*//
  oe=0; //*禁止a/d输出*//
  et0=1; //*允许t0启动*//
  et1=1; //*允许t1启动*//
  ea=1; //*打开总开关*//
  tmod=0x12; //*设置t0   t1工作方式 。t0 为方式2 ,8位自动重装;t1为方式1,16位计数器*//
  th0=216; //*装初值,输出频率为:f=1/(40*2)*1000000=12500hz*//
  tl0=216; 
  th1=(65536-3000)/256; //*给t1定时器赋初值*//
  tl1=(65536-3000)%256; 
  tr1=1; //*启动t1*//
  tr0=1; //*启动t0*//
  st=1; //*形成一个正脉冲,启动a/d转换器*//
  st=0;  
  while(1) //*等待a/d转换完成*//
    { 
      if(eoc==1) //*a/d转换完成*//
        { 
          oe=1; //*允许a/d转换器输出*//
getdata=p2; //单片机通过p2口读取数据*//
          oe=0; //*禁止a/d 转换器输出*//
          temp=getdata*251;
          temp=temp/128; //*数据处理。如:输入模拟量为5,得到数字量255,temp=255*251/128=500。在数码管显示5.00*//
          i=3; 
          dispbuf[0]=10; //*屏蔽一位。因为精度为:5*1/255=0.020,所以第三位小数号无意义;取两位小数*//
 dispbuf[1]=0; //*初次显示为0.00*//
          dispbuf[2]=0; 
          dispbuf[3]=0; 
          
          while(temp/10) //将十进制的位的数值分别放到数组里边,等待显示*//
            { 
              dispbuf[i]=temp%10; 
              temp=temp/10; 
              i--; 
            } 
dispbuf[i]=temp;          
          st=1; //*进入下一轮转换*//
          st=0; 
        } 
    } 
} 
void t0(void) interrupt 1 using 0 //*中断1子程序,使用0区寄存器组*//
{ 
  clk=~clk; //*从p3.3输出12.5khz的时钟信号*//
} 
  void t1(void) interrupt 3 using 0 //*中断3子程序,使用0区寄存器组*//
th1=(65536-3000)/256; //*重装初值*//
  tl1=(65536-3000)%256; 
  p0=dispcode[dispbuf[dispcount]]; //*显示电压值*//
  p1=dispbitcode[dispcount]; //*动态扫描*//
  if(dispcount==3)
  {
    p0=p0-0x80; //*显示小数点*//
  }
  dispcount++;
  if(dispcount==4) //*进入下一轮显示*//
    { 
dispcount=0; 
    }  
} 



发表时间:2007年4月27日14:56:19

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:集成RJ45型号!买了一个集成变压器的RJ45,但是搞不清楚型号,上面有TECH字样,还有小的黑字为
[下一篇帖子]:求购一arm9开发板,价格便宜如题:联系方式:15998274086 邮箱:weizhang