搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2012-5-29 11:17:05 | 显示全部楼层 |阅读模式
啥也不说了,先把程序附上:
#include <intrins.h>
#include <stdio.h>
#include "STC11FXE.H"

#define uchar  unsigned char
#define U8  unsigned char
#define U16  unsigned short
#define U32  unsigned long



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



#define FOSC   11059200L
#define BAUD9600  9600
#define BAUD115200  115200

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

sbit  buzy=P1^7;
sbit  key1=P0^0;
sbit  key2=P0^1;
sbit  key3=P0^2;

#define HmiIsBusy          (buzy==0)

U8 g_u8UartRxBuffer[MAX_BUFFER_LENGTH];         //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)       
{
  char  K,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;
  
  char  h1,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的累加数不能进行累加,好像无限重启一样。初步怀疑是单片机的时钟高低电平占空比或是时钟频率被改变,所以出现不规律现象。。。。
被困扰好几天了,求大家帮忙解决,小弟在此先谢过了。。。。。。。。

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

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

出0入0汤圆

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

本版积分规则

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

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

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

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