Proteus 7 Professional初学者关于c程序的问题

Proteus 7 Professional初学者关于c程序的问题,第1张

#include <reg51h>

#include <INTRINSH> 

#include <STDIOH>

// define P10 to check STATUS

sbit STATUS = P1^0;//用P10来检测状态

unsigned char xdata CTRL  _at_ 0x2FFF;

unsigned char xdata ADSEL _at_ 0x4FFF;

unsigned char hByte;//存放ADC转换结果的高8位

unsigned char lByte;//存放ADC转换结果的低8位

void adc_Convert (void)//ADC函数,进行模数转换

 { // Start a conversion with A0 and A/$C$ low 

   // The convesion takes place on rising CE edge

   CTRL  = 0x00; 

   ADSEL = 0x00;

   // Wait until we have completed a conversion 

   while(STATUS==1);//检测状态,一直等到转换完成,才往下走

   // Set R/$C$ with A0 low and read the low byte 

    //读出ADC转换结果的高8位

   CTRL  = 0x02; 

   hByte = ADSEL; 

   // Set R/$C$ with A0 high and read the high 

 //读出ADC转换结果的低8位

   CTRL  = 0x03; 

   lByte = ADSEL; 

 }

void main(void)

 { unsigned int delay, MSB , LSB, adc_Res;

   // Initialize serial interface

//初始化串口,波特率1200bps

   SCON  = 0xDA;        // SCON: mode 1, 8-bit UART, enable rcvr      /

   TMOD |= 0x20;        // TMOD: timer 1, mode 2, 8-bit reload        /

   TH1   = 0xFD;         // TH1:  reload value for 1200 baud @ 12MHz   /

   TR1   = 1;           // TR1:  timer 1 run                          /

   TI    = 1;           // TI:   set TI to send first char of UART    /

   while(1)

    { adc_Convert();//进行AD转换

      MSB=(unsigned int)(hByte << 4);

      LSB=(unsigned int)(lByte >> 4);

      // adc_Res now has the converted data with 12-bit resolution

       //将ADC结果组合成12位数据,存放于adc_Res

      adc_Res = MSB + LSB;

      // Send adc results to the serial interface

        //通过串口将ADC结果发送出去

      printf("ADC READINGS: %03Xh\n", adc_Res);

     // simple delay - it is mcu clock dependent !

    //简单延时一下,由单片机时钟决定

      for (delay=0; delay<10000; delay++) 

       ;

    }

 }

整个程序的功能就是:单片机控制ADC芯片进行转换,并读取ADC结果,从串行口发送。

//(1)静态显示

#include <reg51h>

//共阴极数码管段码

unsigned char code TAB1[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,

    0x39,0x5E,0x79,0x71,0x73,0x3E,0x31,0x6E,0x76,0x38,0x00};

//共阳极数码管段码

unsigned char code TAB2[]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90,0x88,

    0x83,0x0C6,0x0A1,0x86,0x8E,0x8C,0x0C1,0x0CE,0x91,0x89,0x0C7,0x0FF};

void delay(void)

{

 unsigned char r2,r3,r4;

 for(r3=10;r3!=0;r2--)

 {

  for(r3=200;r3!=0;r3--)

  {

   for(r4=250;r4!=0;r4--);

  }

 }

}

void main(void)

{

    unsigned char r0=0;

    while(1)

    {

     P2 = TAB1[r0];

     P3 = TAB2[r0];

     r0++;

     delay();

     if(r0==0x10)

     {

      r0=0;

     }

    }

}

//-------------------------------------------

//(2)动态显示

#include <reg51h>

#include <intrinsh> //包含有左右循环移位子函数的库 

//共阳极数码管段码

unsigned char code TAB[]={0x0C0,0x0F9,0x0A4,0x0B0,0x99,0x92,0x82,0x0F8,0x80,0x90,0x88,

    0x83,0x0C6,0x0A1,0x86,0x8E,0x8C,0x0C1,0x0CE,0x91,0x89,0x0C7,0x0FF};

void delay(void)

{

 unsigned char r2,r3,r4;

 for(r3=1;r3!=0;r2--)

 {

  for(r3=10;r3!=0;r3--)

  {

   for(r4=250;r4!=0;r4--);

  }

 }

}

void main(void)

{

    unsigned char dispbuf[8],r0=0;

    dispbuf[0]=0xF9;

    dispbuf[1]=0x92;

    dispbuf[2]=0b10111111;

    dispbuf[3]=0x0B0;

    dispbuf[4]=0x92;

    dispbuf[5]=0b10111111;

    dispbuf[6]=0x0C0;

    dispbuf[7]=0x0C0;

    P1 = 0b01111111;    

    while(1)

    {

     P2 = 0x0ff;

     P1 = _crol_(P1,1)//循环左移1

     P2 = dispbuf[r0];

     delay();

     r0++;

   if(r0>=8)

   {

    r0 = 0 ;

    P1 = 0b01111111;  

   }    

    }

}

使用proteus仿真时,是不能执行外部程序存储器中的程序的。C程序编译出HEX代码文件直接加载到单片机上即可,这不是实物,可以执行外部存储器ROM的程序。所以,把c程序写进ROM中是没有用的。仿真时,ROM中可以放数据,执行程序时读取数据。所以,2732不必代替,可以用的。

<p>先在keil中把程序编好,在PROTEUS中双击单片机,之后出现这个页面</p>

<p></p>

<p>在对话框中找到你keil编写的程序的文件即可。</p>

以上就是关于Proteus 7 Professional初学者关于c程序的问题全部的内容,包括:Proteus 7 Professional初学者关于c程序的问题、单片机proteus仿真,有接线图和汇编语言,求把这个汇编语言改成c语言!、在使用proteus仿真时,2732 程序存储器可以使用什么代替还有怎么把c程序写进ROM中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/10117756.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存