jiaofu9018 发表于 2012-5-29 11:17:05

求教一个关于彩屏的十分蛋疼的问题,苦恼中

啥也不说了,先把程序附上:
#include <intrins.h>
#include <stdio.h>
#include "STC11FXE.H"

#define ucharunsigned char
#define U8unsigned char
#define U16unsigned short
#define U32unsigned long



#define MAX_BUFFER_LENGTH                20                //缓冲区的大小



#define FOSC   11059200L
#define BAUD96009600
#define BAUD115200115200

#define RED                (U16)0XF800
#define GREEN        (U16)0X7E0
#define BLUE        (U16)0X1F
#define YELLOW        (U16)0XFFE0
#define WHITE        (U16)0XFFFF
#define BLACK        (U16)0X0000

sbitbuzy=P1^7;
sbitkey1=P0^0;
sbitkey2=P0^1;
sbitkey3=P0^2;

#define HmiIsBusy        (buzy==0)

U8 g_u8UartRxBuffer;       //UART接收缓冲区

U8 g_u8UartRxPtr;

U8 g_u8HaveUartData;

U8 g_GetUartCmdFlag;

U8 g_Time100msFlag;

U8 g_KeyValue;

U8 ModeFlag;

U8 g_Page;

U16 g_TPX;                //触摸屏点击坐标
U16 g_TPY;

U16 code PicNumLimit[]=
{
14,         //总类图标,增加图片需要修改此数组
20,        //干果起始图标
28,
37,
45,
55,
62,
67,//图片最大值加1
};
void Playtime(void);
void InitTIM(void);
void Timeset(void);
void Picture(U16 Num,U16 Xaddr,U16 Yaddr);
void ExeCmd(void);
void SetPic(U16 g_Start);
U8 IapReadByte(U16 addr);
void DispMoney(U16 Xaddr,U16 Yaddr,U8*s);
char ye,flag;
long int i;
unsigned int j;
/******************************************************************************
函数名                                :DelayMs
功能描述                        :
                  延时函数
变量描述                        :
                  延时毫秒数
返回值描述                        :
                  
修改原因                        :NA
作者                                :wangyonghui
日期                                :29-nov-2011
******************************************************************************/

void DelayMs(unsigned int dly )
{
        unsigned int a=30;
        while(dly--)
        {
                a=400;
                while (a--);
        }
}
void main (void)
{

        unsigned int LcdXsize,LcdYsize;
        unsigned char GG;

        U8 idata *Pointer;


        AUXR=0X40;          //工作在1T模式下
/*------------------------------------------------
Setup the serial port for 115200 baud at 11.0592MHz.
------------------------------------------------*/
    SCON= 0x50;                        /* SCON: mode 1, 8-bit UART, enable rcvr      */
    TMOD |= 0x20;               /* TMOD: timer 1, mode 2, 8-bit reload      */
        TH1=-(FOSC/32/BAUD115200);          /* TH1:reload value for 115200 baud @ 11.0592MHz   */
        TL1=-(FOSC/32/BAUD115200);
    TR1   = 1;                  /* TR1:timer 1 run                        */
    TI    = 1;                  /* TI:   set TI to send first char of UART    */
        ES          = 1;
        //EA    = 1;


        ModeFlag=0;

        DelayMs(500);


        Picture(0,0,0);
                         
        InitTIM();
       


    EA    = 1;
        while(1)
        {
          P1=j;
   if(j>=10000)
   {
       j=0;
       i++;
   }
       
       if(GG==1)
       {
           Playtime();
       }
       
       
       
        if(key1==0)
        {
             
          DelayMs(10);
                if(key1==1)
                {
               flag=flag+1;
               if(flag>4)
                  flag=1;
               Picture(1,0,0);
               DelayMs(100);
       
               Picture(2,0,0);
               DelayMs(100);
       
               Picture(1,0,0);
               
               switch(flag)
               {
                  case 1:
                     Picture(3,150,60);ye=1;
                  break;
                  case 2:
                      Picture(4,150,60);ye=2;
                  break;
                  case 3:
                      Picture(5,150,60);ye=3;
                  break;
                  case 4:
                      Picture(6,150,60);ye=4;
                  break;
                  
                  
               }
               Playtime();
               GG=1;
                                              
                }
               
        }
    if(key2==0)
        {
          switch(ye)
          {
                  case 1:
                     Timeset();
                  break;
                  //case 2:
                      //Dataset();
                  //break;
                  //case 3:
                      //Tempset();
                  //break;
                  //case 4:
                      //LinTim();
                  //break;
          }
        }
}
}
void Picture(U16 Num,U16 Xaddr,U16 Yaddr)
{
        TI=1;
        ES=0;
        while(HmiIsBusy);
        printf("PIC %d %d %d\n",Num,Xaddr,Yaddr);
        while(!HmiIsBusy);
        ES=1;
}
void Timeset(void)
{
Picture(17,0,0);
DelayMs(150);

Picture(18,0,0);
DelayMs(150);

Picture(19,0,0);
}
void Playtime(void)       
{
charK,h,m,s;
h=i/3600;
m=(i%3600)/60;
s=i%60;

if(h>=24)
h=0;

K=h/10;
K=K+7;
Picture(K,150,100);

K=h%10;
K=K+7;
Picture(K,172,100);

K=m/10;
K=K+7;
Picture(K,194,100);

K=m%10;
K=K+7;
Picture(K,216,100);

K=s/10;
K=K+7;
Picture(K,238,100);

K=s%10;
K=K+7;
Picture(K,260,100);

}
void InitTIM(void)
{
TMOD|=0x02;//定时器设置 16位
TH0=0x9c;//初始化值
TL0=0x9c;
ET0=1;
TR0=1;
EA=1;
}
void tim(void) interrupt 1 using 1
{

j++;
TR0=1;
}
/*void Timeset(void)
{
   int time;

charh1,h2,h3,m1,m2,s1,s2,flag2;
Picture(17,0,0);
DelayMs(150);

Picture(18,0,0);
DelayMs(150);

Picture(19,0,0);

while(1)
{
    TR0=0;
        Playtime();
       
    if(key1==0)
    {
          
          flag2=flag2+1;
          if(flag2>=6)
           flag2=0;
          
    }
        if(key2==0)
    {
          switch(flag2)
          {
          case 0:
                h1=h1+1;
                break;
                case 1:
                h2=h2+1;
                break;
                case 3:
                m1=m1+1;
                break;
                case 4:
                m2=m2+1;
                break;
                case 5:
                s1=s1+1;
                break;
                case 6:
                s2=s2+1;               
                break;
               

          }
          h3=h1*10+h2;
          if(h3>24)
          {
          h1=0;
                h2=0;
          }
          if(h2>10)
          {
          h2=0;
          }
          if(m1>6)
          {
                  m1=0;
          }
          if(m2>10)
          {
          m2=0;
          }
          if(s1>6)
          {
                  s1=0;
          }
          if(s2>10)
          {
          s2=0;
          }
          
        }
        time=h3*3600+(m1*10+m2)*60+s1*10+s2;
    i=time;
        if(key3==0)
       break;
}
}       */

程序在显示和各种切换部分是正常的,但是定时部分却无法实现,经过多次测试(如:把定时器中断改为外部中断0测试)确认是波特率特别是使用AUXR修改定时器1的频率后,将中断不响应(此期间读取的EA=1,中断是开着的),在去除定时器1AUXR设置后单片机表现也很不正常,主循环和外部中断0的累加数不能进行累加,好像无限重启一样。初步怀疑是单片机的时钟高低电平占空比或是时钟频率被改变,所以出现不规律现象。。。。
被困扰好几天了,求大家帮忙解决,小弟在此先谢过了。。。。。。。。

jiaofu9018 发表于 2012-5-29 11:18:34

单片机用的12C5A60S2,忘记了,补上,先谢谢大家了
页: [1]
查看完整版本: 求教一个关于彩屏的十分蛋疼的问题,苦恼中