搜索
bottom↓
回复: 2

求助:一个程序问题?????调用一个函数两次结果。。

[复制链接]

出0入0汤圆

发表于 2012-5-24 13:09:15 | 显示全部楼层 |阅读模式
本帖最后由 beidewensike 于 2012-5-24 13:20 编辑

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

#include <stdio.h>
#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char // 0~255
#define uint unsigned int   // 0~65535
uchar   ContrastLevel;     // 对比度参数变量
uchar   bdata GrayLevel4;     //灰度变量,D5,D4为前景色D1,D0背景色,该变量可为位操作之变量
sbit Fgraybit0 = GrayLevel4^4;//前景色数值
sbit Fgraybit1 = GrayLevel4^5;
sbit Ggraybit0 = GrayLevel4^0;//背景色数值
sbit Ggraybit1 = GrayLevel4^1;
uchar bdata graydata0,graydata1;// 灰度中间变量,位操作
sbit grayd0bit7 = graydata0^7;
sbit grayd1bit7 = graydata1^7;
  unsigned long int v1;


//接口定义
//1602的数据接口为P0
sfr    ADC_CONTR  =0xBC;       //ADC控制寄存器
sfr    ADC_RES    =0xBD;       //ADC高8位结果寄存器
sfr    ADC_RESL   =0xBE;       //ADC低2位结果寄存器
sfr    P1ASF      =0x9D;       //ADC第二功能控制寄存器


unsigned char xdata shuzi[]={'0','1','2','3','4','5','6','7','8','9'};

uint ee=5;
uint v7=9;

//-------------  ASCII字符库----------------------------------------------------------------
//说明:该字库为5*7点阵字符字模库,但字库格式为8*8点阵字模数据,第8行为行间距,
//      第6-8列为字间距。可以使用6*8点阵、7*8点阵、8*8点阵形式的字符显示
uint code ASCIITAB[]={
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,    /*" "=00H*/
  0x00,0x00,0x00,0x4F,0x00,0x00,0x00,0x00,    /*"!"=01H*/
  0x00,0x00,0x07,0x00,0x07,0x00,0x00,0x00,    /*"""=02h*/
  0x00,0x14,0x7F,0x14,0x7F,0x14,0x00,0x00,    /*"#"=03h*/
  0x00,0x24,0x2A,0x7F,0x2A,0x12,0x00,0x00,    /*"$"=04h*/
  0x00,0x23,0x13,0x08,0x64,0x62,0x00,0x00,    /*"%"=05h*/
  0x00,0x36,0x49,0x55,0x22,0x50,0x00,0x00,    /*"&"=06h*/
  0x00,0x00,0x05,0x03,0x00,0x00,0x00,0x00,    /*"'"=07h*/
  0x00,0x00,0x1C,0x22,0x41,0x00,0x00,0x00,    /*"("=08h*/
  0x00,0x00,0x41,0x22,0x1C,0x00,0x00,0x00,    /*")"=09h*/
  0x00,0x14,0x08,0x3E,0x08,0x14,0x00,0x00,    /*"*"=0Ah*/
  0x00,0x08,0x08,0x3E,0x08,0x08,0x00,0x00,    /*"+"=0Bh*/
  0x00,0x00,0x50,0x30,0x00,0x00,0x00,0x00,    /*";"=0Ch*/
  0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,    /*"-"=0Dh*/
  0x00,0x00,0x60,0x60,0x00,0x00,0x00,0x00,    /*"."=0Eh*/
  0x00,0x20,0x10,0x08,0x04,0x02,0x00,0x00,    /*"/"=0Fh*/
  0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,    /*"0"=10h*/
  0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00,    /*"1"=11h*/
  0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,    /*"2"=12h*/
  0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00,    /*"3"=13h*/
  0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00,    /*"4"=14h*/
  0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,    /*"5"=15h*/
  0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00,    /*"6"=16h*/
  0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00,    /*"7"=17h*/
  0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,    /*"8"=18h*/
  0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00,    /*"9"=19h*/
  0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,    /*":"=1Ah*/
  0x00,0x00,0x56,0x36,0x00,0x00,0x00,0x00,    /*";"=1Bh*/
  0x00,0x08,0x14,0x22,0x41,0x00,0x00,0x00,    /*"<"=1Ch*/
  0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,    /*"="=1Dh*/
  0x00,0x00,0x41,0x22,0x14,0x08,0x00,0x00,    /*">"=1Eh*/
  0x00,0x02,0x01,0x51,0x09,0x06,0x00,0x00,    /*"?"=1Fh*/
  0x00,0x32,0x49,0x79,0x41,0x3E,0x00,0x00,    /*"@"=20h*/
  0x00,0x7E,0x11,0x11,0x11,0x7E,0x00,0x00,    /*"A"=21h*/
  0x00,0x41,0x7F,0x49,0x49,0x36,0x00,0x00,    /*"B"=22h*/
  0x00,0x3E,0x41,0x41,0x41,0x22,0x00,0x00,    /*"C"=23h*/
  0x00,0x41,0x7F,0x41,0x41,0x3E,0x00,0x00,    /*"D"=24h*/
  0x00,0x7F,0x49,0x49,0x49,0x49,0x00,0x00,    /*"E"=25h*/
  0x00,0x7F,0x09,0x09,0x09,0x01,0x00,0x00,    /*"F"=26h*/
  0x00,0x3E,0x41,0x41,0x49,0x7A,0x00,0x00,    /*"G"=27h*/
  0x00,0x7F,0x08,0x08,0x08,0x7F,0x00,0x00,    /*"h"=28h*/
  0x00,0x00,0x41,0x7F,0x41,0x00,0x00,0x00,    /*"I"=29h*/
  0x00,0x20,0x40,0x41,0x3F,0x01,0x00,0x00,    /*"J"=2Ah*/
  0x00,0x7F,0x08,0x14,0x22,0x41,0x00,0x00,    /*"K"=2Bh*/
  0x00,0x7F,0x40,0x40,0x40,0x40,0x00,0x00,    /*"L"=2Ch*/
  0x00,0x7F,0x02,0x0C,0x02,0x7F,0x00,0x00,    /*"M"=2Dh*/
  0x00,0x7F,0x06,0x08,0x30,0x7F,0x00,0x00,    /*"N"=2Eh*/
  0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00,    /*"O"=2Fh*/
  0x00,0x7F,0x09,0x09,0x09,0x06,0x00,0x00,    /*"P"=30h*/
  0x00,0x3E,0x41,0x51,0x21,0x5E,0x00,0x00,    /*"Q"=31h*/
  0x00,0x7F,0x09,0x19,0x29,0x46,0x00,0x00,    /*"R"=32h*/
  0x00,0x26,0x49,0x49,0x49,0x32,0x00,0x00,    /*"S"=33h*/
  0x00,0x01,0x01,0x7F,0x01,0x01,0x00,0x00,    /*"T"=34h*/
  0x00,0x3F,0x40,0x40,0x40,0x3F,0x00,0x00,    /*"U"=35h*/
  0x00,0x1F,0x20,0x40,0x20,0x1F,0x00,0x00,    /*"V"=36h*/
  0x00,0x7F,0x20,0x18,0x20,0x7F,0x00,0x00,    /*"W"=37h*/
  0x00,0x63,0x14,0x08,0x14,0x63,0x00,0x00,    /*"X"=38h*/
  0x00,0x07,0x08,0x70,0x08,0x07,0x00,0x00,    /*"Y"=39h*/
  0x00,0x61,0x51,0x49,0x45,0x43,0x00,0x00,    /*"Z"=3Ah*/
  0x00,0x00,0x7F,0x41,0x41,0x00,0x00,0x00,    /*"["=3Bh*/
  0x00,0x02,0x04,0x08,0x10,0x20,0x00,0x00,    /*"\"=3Ch*/
  0x00,0x00,0x41,0x41,0x7F,0x00,0x00,0x00,    /*"]"=3Dh*/
  0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x00,    /*"^"=3Eh*/
  0x00,0x40,0x40,0x40,0x40,0x40,0x00,0x00,    /*"_"=3Fh*/
  0x00,0x01,0x02,0x04,0x00,0x00,0x00,0x00,    /*"`"=40h*/
  0x00,0x20,0x54,0x54,0x54,0x78,0x00,0x00,    /*"a"=41h*/
  0x00,0x7F,0x48,0x44,0x44,0x38,0x00,0x00,    /*"b"=42h*/
  0x00,0x38,0x44,0x44,0x44,0x28,0x00,0x00,    /*"c"=43h*/
  0x00,0x38,0x44,0x44,0x48,0x7F,0x00,0x00,    /*"d"=44h*/
  0x00,0x38,0x54,0x54,0x54,0x18,0x00,0x00,    /*"e"=45h*/
  0x00,0x00,0x08,0x7E,0x09,0x02,0x00,0x00,    /*"f"=46h*/
  0x00,0x0C,0x52,0x52,0x4C,0x3E,0x00,0x00,    /*"g"=47h*/
  0x00,0x7F,0x08,0x04,0x04,0x78,0x00,0x00,    /*"h"=48h*/
  0x00,0x00,0x44,0x7D,0x40,0x00,0x00,0x00,    /*"i"=49h*/
  0x00,0x20,0x40,0x44,0x3D,0x00,0x00,0x00,    /*"j"=4Ah*/
  0x00,0x00,0x7F,0x10,0x28,0x44,0x00,0x00,    /*"k"=4Bh*/
  0x00,0x00,0x41,0x7F,0x40,0x00,0x00,0x00,    /*"l"=4Ch*/
  0x00,0x7C,0x04,0x78,0x04,0x78,0x00,0x00,    /*"m"=4Dh*/
  0x00,0x7C,0x08,0x04,0x04,0x78,0x00,0x00,    /*"n"=4Eh*/
  0x00,0x38,0x44,0x44,0x44,0x38,0x00,0x00,    /*"o'=4Fh*/
  0x00,0x7E,0x0C,0x12,0x12,0x0C,0x00,0x00,    /*"p"=50h*/
  0x00,0x0C,0x12,0x12,0x0C,0x7E,0x00,0x00,    /*"q"=51h*/
  0x00,0x7C,0x08,0x04,0x04,0x08,0x00,0x00,    /*"r"=52h*/
  0x00,0x58,0x54,0x54,0x54,0x64,0x00,0x00,    /*"s"=53h*/
  0x00,0x04,0x3F,0x44,0x40,0x20,0x00,0x00,    /*"t"=54h*/
  0x00,0x3C,0x40,0x40,0x3C,0x40,0x00,0x00,    /*"u"=55h*/
  0x00,0x1C,0x20,0x40,0x20,0x1C,0x00,0x00,    /*"v"=56h*/
  0x00,0x3C,0x40,0x30,0x40,0x3C,0x00,0x00,    /*"w"=57h*/
  0x00,0x44,0x28,0x10,0x28,0x44,0x00,0x00,    /*"x"=58h*/
  0x00,0x1C,0xA0,0xA0,0x90,0x7C,0x00,0x00,    /*"y"=59h*/
  0x00,0x44,0x64,0x54,0x4C,0x44,0x00,0x00,    /*"z"=5Ah*/
  0x00,0x00,0x08,0x36,0x41,0x00,0x00,0x00,    /*"{"=5Bh*/
  0x00,0x00,0x00,0x77,0x00,0x00,0x00,0x00,    /*"|"=5Ch*/
  0x00,0x00,0x41,0x36,0x08,0x00,0x00,0x00,    /*"}"=5Dh*/
  0x00,0x02,0x01,0x02,0x04,0x02,0x00,0x00,    /*"~"=5Fh*/
  0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00     /*" "=0x60*/
  };

  
char  code cont[]=
//说明:该字库为8*8点阵数字字模库,
{
  0x00,0x3E,0x51,0x49,0x45,0x3E,0x00,0x00,    /*"0"=10h*/
  0x00,0x00,0x42,0x7F,0x40,0x00,0x00,0x00,    /*"1"=11h*/
  0x00,0x42,0x61,0x51,0x49,0x46,0x00,0x00,    /*"2"=12h*/
  0x00,0x21,0x41,0x45,0x4B,0x31,0x00,0x00,    /*"3"=13h*/
  0x00,0x18,0x14,0x12,0x7F,0x10,0x00,0x00,    /*"4"=14h*/
  0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00,    /*"5"=15h*/
  0x00,0x3C,0x4A,0x49,0x49,0x30,0x00,0x00,    /*"6"=16h*/
  0x00,0x01,0x01,0x79,0x05,0x03,0x00,0x00,    /*"7"=17h*/
  0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00,    /*"8"=18h*/
  0x00,0x06,0x49,0x49,0x29,0x1E,0x00,0x00,    /*"9"=19h*/
};

//-----------------------------------
// I/O寻址方式驱动子程序(80mode)
#define LCDBUS    P0
sbit    RS      = P3^6;
sbit    _CS     = P3^4;
sbit    _RST    = P3^5;
sbit    _WR     = P3^7;
sbit    _RD     = P3^2;
//--------指令代码传送函数------------------
void SdCmd(uchar Command)
{
    RS  = 0;                // 设置指令通道
    _CS = 0;                // 选通模块
    LCDBUS = Command;       // 指令送数据口
    _WR = 0;                // 写操作形成
        _nop_();
    _WR = 1;
    _CS = 1;                // 封锁模块
}
//-----显示数据传送函数--------------------------
void SdData(uchar DData)
{
    RS = 1;                // 选择数据通道
   _CS = 0;                // 选通模块
   LCDBUS = DData;         // 数据送数据口
   _WR = 0;                // 写操作形成
   _WR = 1;
   _CS = 1;                // 封锁模块
}
//-------显示数据读取函数-------------------------
uchar RdData()
{
   uchar DData;
     RS = 1;               // 选择数据通道
    _CS = 0;               // 选通模块
    LCDBUS=0xff;
    _RD  = 0;              // 读操作形成
    DData = LCDBUS;        // 读数据
    _RD  = 1;              // 读操作结束
    _CS=1;                 // 封锁模块
    return(DData);         // 返回数据值
}



//----------------------------------------
//    功能子程序
//----------------------------------------
//-----灰度数据生成函数---------
void SdGraydata(uchar MonoData)
{
uchar i;
graydata0=0;
graydata1=0;
for (i=0;i<8;i++)
   {
        graydata0=graydata0>>1;
        graydata1=graydata1>>1;
    switch (MonoData&0x01)
          {
          case 1 : grayd1bit7=Fgraybit1;grayd0bit7=Fgraybit0;break;
          case 0 : grayd1bit7=Ggraybit1;grayd0bit7=Ggraybit0;break;
          }
    MonoData=MonoData>>1;
    }
SdData(graydata1);
SdData(graydata0);
}



//------ASCII字符写入函数---------------
void PrintASCII(uchar x,y,uchar *pstr)
// 坐标(x,y),x为水平方向像素列;y为垂直方向字符行(8点像素/行)
{
  uchar j;
  uint addr;
  SdCmd(y|0xb0);               // 设置页地址
  SdCmd((x>>4)|0x10);          // 设置列地址高4位
  SdCmd(x&0x0f);               // 设置列地址低4位
  while(*pstr>0)
  {
  addr=*pstr++;                // 取字符代码
  addr=(addr-0x20)*8;          // 计算字符字模起始地址
  for (j=0;j<6;j++)            // 设置循环量,显示6*8点阵字符
    {
    SdGraydata(ASCIITAB[addr+j]);  //  写字模数据
    }
  }
}

//------数字(8*8)字符写入函数-----------------
void PrintNUM(uchar x,y,uint ss)
// 坐标(x,y),x为水平方向像素列;y为垂直方向字符行(8点像素/行)
{
uint j;
while(ss>=0)
   {
      SdCmd(y|0xb0);                 // 设置页地址
      SdCmd((x>>4)|0x10);            // 设置列地址高4位
      SdCmd(x&0x0f);                 // 设置列地址低4位
      for (j=0;j<8;j++)             // 写8字节字模数据
        {
        SdGraydata(cont[ss*8+j]);  // 写字模数据
        }

     
    }
}

//-----------------------------------
// 对比度调节程序 Contrast control
//-----------------------------------
//-----对比度增强函数-------------
void LCD_Darker(void)
// 对比度参数ConTrastLevel初始值在初始化程序中设置
{
    if (ContrastLevel<0x3F)     // 限制上限值
        {
        ContrastLevel++;        // 对比度参数加1
        }
    SdCmd(0x81);                // 对比度设置指令代码
    SdCmd(ContrastLevel);       // 写入对比度值
}
//-----对比度减弱函数---------------
void LCD_Lighter(void)
// 对比度参数ConTrastLevel初始值在初始化程序中设置
{
    if (ContrastLevel>0x00)     // 限制下限值
        {
         ContrastLevel--;       // 对比度参数减1
        }
    SdCmd(0x81);                // 对比度设置指令代码
    SdCmd(ContrastLevel);       // 写入对比度值
}


//----清屏函数-----------------
void ClearRAM()
{
uchar i,j;
    for (i=0;i<12;i++)        // 循环写8页
    {
    SdCmd(i|0xb0);           // 页地址设置
    SdCmd(0x10);             // 列地址高4位
    SdCmd(0x00);             // 列地址低4位
    for(j=0;j<128;j++)       // 循环写128单元
      {
       SdData(0x00);            // 数据设置为0
       SdData(0x00);
      }
    }
}
//----------灰度清屏函数------------------------
void GrayRAM(uchar x,y,width,high)
{
    uchar i,j,k;
    k=GrayLevel4&0x03;
    for (i=0;i<high;i++)        // 循环写8页
    {
     SdCmd(y|0xb0);         // 设置页地址
     SdCmd((x>>4)|0x10);    // 设置列地址高4位
     SdCmd(x&0x0f);         // 设置列地址低4位
    for(j=0;j<width;j++)       // 循环写128单元
      {
      switch (k)
        {
             case 0 :  SdData(0x00); SdData(0x00); break;
             case 1 :  SdData(0x00); SdData(0xff);  break;
             case 2 :  SdData(0xff);  SdData(0x00); break;
             case 3 :  SdData(0xff);  SdData(0xff);  break;
            }
          }
        y=y+1;                 // 页地址修正
   }
}
//-----------------------------------
// 初始化函数
//-----------------------------------
void initLCDM(void)
{
//------对比度参数初始值设置-----------------------------------
    ContrastLevel=0x20;                // 对比度参数初始化设置
//------显示设置----------------------------------------------
      SdCmd(0xa1);                     // ADC=1,RAM列地址与列驱动逆顺序
      SdCmd(0xc8);                     // SHL=1,行驱动方向为反向
      SdCmd(0x44);    SdCmd(0x10);     // COM0寄存器=10H
      SdCmd(0x48);    SdCmd(0x60);     // 占空比设置1/96
      SdCmd(0x40);    SdCmd(0x00);     // 显示起始行=0
      SdCmd(0xab);                    // 启用内部振荡器
          //SdCmd(0x4c);    SdCmd(0x00);     // 设置M信号周期
//-------LCD电源设置-------------------------------------------
      SdCmd(0x66);                     // 5X倍压
      SdCmd(0x27);                     // 调节器电阻比设置
      SdCmd(0x81);SdCmd(ContrastLevel);// 对比度设置
      SdCmd(0x54);                     // 偏压1/9
      SdCmd(0x2f);                     // 启用内部LCD驱动电源
//-------灰度设置---------------------------------------------
      SdCmd(0x93);                     //  设置灰度驱动方式为4FRC+15PWM
      SdCmd(0x88);    SdCmd(0x00);     //  设置W_FR2,1灰度寄存器值
      SdCmd(0x89);    SdCmd(0x00);     //  设置W_FR4,3灰度寄存器值
      SdCmd(0x8a);    SdCmd(0x66);     //  设置L_FR2,1灰度寄存器值
      SdCmd(0x8b);    SdCmd(0x66);     //  设置L_FR4,3灰度寄存器值
      SdCmd(0x8c);    SdCmd(0x88);     //  设置D_FR2,1灰度寄存器值
      SdCmd(0x8d);    SdCmd(0x88);     //  设置D_FR4,3灰度寄存器值
      SdCmd(0x8e);    SdCmd(0xff);     //  设置B_FR2,1灰度寄存器值
      SdCmd(0x8f);    SdCmd(0xff);     //  设置B_FR4,3灰度寄存器值
//-------开显示------------------------------------------------
      SdCmd(0xa6);                     //  正向显示
      SdCmd(0xaf);                     //  开显示
}



//-----------------------------------
// Main Program
//-----------------------------------
void main()
{

uchar code dis6[]={0x01,0x02,0x03,0x04,0x05,0x0a,0x0b,0x00};
  
    _CS     =1;
   RS     =1;
        _RD     =1;
        _WR     =1;

   RST     =1;    // hardware reset LCD module
    _RST=0;
    delayms(10);
    _RST=1;
    delayms(500);
   
    initLCDM();
    delayms(300);
    ClearRAM();
   // GrayLevel4=0x30;
   // PrintGB(9,1,dis6);
    GrayLevel4=0x30;
    PrintASCII(4,0,"V1= ");
    GrayLevel4=0x30;
    PrintASCII(90,0,"D ");
    GrayLevel4=0x30;
    PrintASCII(4,2,"89798  ");
    GrayLevel4=0x30;
    PrintASCII(4,4,"0098779");

    GrayLevel4=0x30;
          PrintNUM(8,6,7);
GrayLevel4=0x30;
          PrintNUM(6,8,3);





    delayms(300000);

}
//end of program



以上printNUM()函数调用两次只显示一个结果。。。而printASCII就可以正常显示多个结果!!!!这是为什么啊!!!!???望各位大虾帮忙解答,小弟不胜感激!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-5-24 13:22:03 | 显示全部楼层
显示结果为:V1=                      D
                 89798
                 0098779
                   7

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-24 00:31

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

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