求教一个关于彩屏的十分蛋疼的问题,苦恼中
啥也不说了,先把程序附上:#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的累加数不能进行累加,好像无限重启一样。初步怀疑是单片机的时钟高低电平占空比或是时钟频率被改变,所以出现不规律现象。。。。
被困扰好几天了,求大家帮忙解决,小弟在此先谢过了。。。。。。。。 单片机用的12C5A60S2,忘记了,补上,先谢谢大家了
页:
[1]