闹钟裸奔核心代码.docx

上传人:b****5 文档编号:5905020 上传时间:2023-01-02 格式:DOCX 页数:54 大小:26.40KB
下载 相关 举报
闹钟裸奔核心代码.docx_第1页
第1页 / 共54页
闹钟裸奔核心代码.docx_第2页
第2页 / 共54页
闹钟裸奔核心代码.docx_第3页
第3页 / 共54页
闹钟裸奔核心代码.docx_第4页
第4页 / 共54页
闹钟裸奔核心代码.docx_第5页
第5页 / 共54页
点击查看更多>>
下载资源
资源描述

闹钟裸奔核心代码.docx

《闹钟裸奔核心代码.docx》由会员分享,可在线阅读,更多相关《闹钟裸奔核心代码.docx(54页珍藏版)》请在冰豆网上搜索。

闹钟裸奔核心代码.docx

闹钟裸奔核心代码

/****************************************************************

NAME:

u2440mon.c

DESC:

u2440monentrypoint,menu,download

****************************************************************/

#defineGLOBAL_CLK1

#defineREQCNT30

#defineADCPRS9

#defineLOOP1

void__irqAdcTsAuto(void);

intcount=0;

volatileintxdata,ydata;

//externvolatileintxdata,ydata;

//externintcount;

//volatileboolRTC_flag;

#include

#include

#include"def.h"

#include"option.h"

#include"2440addr.h"

#include"2440lib.h"

#include"2440slib.h"

#include"mmu.h"

#include"profile.h"

#include"memtest.h"

#include"LCD_TFT.h"

//我添加的一句,消除了编译错误Paint_Bmp(0,0,480,272,TQ_LOGO_480272);

#include"stdarg.h"

#include"cstm_lcd.h"

#defineX_NULL(~0UL)

U8g_type;

externcharImage$$RO$$Limit[];

externcharImage$$RO$$Base[];

externcharImage$$RW$$Limit[];

externcharImage$$RW$$Base[];

externcharImage$$ZI$$Limit[];

externcharImage$$ZI$$Base[];

externunsignedchar__CHS[];//我添加的字库实验

externunsignedchar__VGA[];

voidLcd_PutASCII(unsignedintx,unsignedinty,unsignedcharch,unsigned

intc,unsignedintbk_c,unsignedintst);

//英文

voidLcd_PutHZ(unsignedintx,unsignedinty,unsignedshortintQW,unsigned

intc,unsignedintbk_c,unsignedintst);

//中文

voidLcd_printf(unsignedintx,unsignedinty,unsignedintc,unsignedint

bk_c,unsignedintst,char*fmt,...);

//输出

voidIsr_Init(void);

voidHaltUndef(void);

voidHaltSwi(void);

voidHaltPabort(void);

voidHaltDabort(void);

voidClearMemory(void);

voidClk0_Enable(intclock_sel);

voidClk1_Enable(intclock_sel);

voidClk0_Disable(void);

voidClk1_Disable(void);

externvoidLcd_TFT_Init(void);

externvoidKeyScan_Test(void);

externvoidLcd_ClearScr(U32c);

externvoidLcd_ClearScr1(intx0,inty0,inth,intl,U32c);

externvoidGlib_Rectangle(intx1,inty1,intx2,inty2,intcolor);

externvoidGlib_Line(intx1,inty1,intx2,inty2,intcolor);

volatileU32downloadAddress;

void(*restart)(void)=(void(*)(void))0x0;

volatileunsignedchar*downPt;

volatileU32downloadFileSize;

volatileU16checkSum;

volatileunsignedinterr=0;

volatileU32totalDmaCount;

volatileintisUsbdSetConfiguration;

intdownload_run=0;

U32tempDownloadAddress;

intmenuUsed=0;

externcharImage$$RW$$Limit[];

U32*pMagicNum=(U32*)Image$$RW$$Limit;

intconsoleNum;

inta,b,c,d,e;

staticU32cpu_freq;

staticU32UPLL;

staticvoidcal_cpu_bus_clk(void)

{

U32val;

U8m,p,s;

intstart=0;

val=rMPLLCON;

m=(val>>12)&0xff;

p=(val>>4)&0x3f;

s=val&3;

//(m+8)*FIN*2不要超出32位数!

FCLK=((m+8)*(FIN/100)*2)/((p+2)*(1<

val=rCLKDIVN;

m=(val>>1)&3;

p=val&1;

val=rCAMDIVN;

s=val>>8;

switch(m)

{

case0:

HCLK=FCLK;

break;

case1:

HCLK=FCLK>>1;

break;

case2:

if(s&2)

HCLK=FCLK>>3;

else

HCLK=FCLK>>2;

break;

case3:

if(s&1)

HCLK=FCLK/6;

else

HCLK=FCLK/3;

break;

}

if(p)

PCLK=HCLK>>1;

else

PCLK=HCLK;

if(s&0x10)

cpu_freq=HCLK;

else

cpu_freq=FCLK;

val=rUPLLCON;

m=(val>>12)&0xff;

p=(val>>4)&0x3f;

s=val&3;

UPLL=((m+8)*FIN)/((p+2)*(1<

UCLK=(rCLKDIVN&8)?

(UPLL>>1):

UPLL;

}

//****************************我添加的一段程序**************************************

voidRTC_Time_Set(void)

{

rRTCCON=1;//RTCreadandwriteenable

rBCDYEAR=0x10;//年

rBCDMON=0x01;//月

rBCDDATE=0x28;//日

rBCDDAY=0x05;//星期

rBCDHOUR=0x12;//小时

rBCDMIN=0x00;//分

rBCDSEC=0x00;//秒

rRTCCON&=~1;//RTCreadandwritedisable

//RTC_flag=false;//这是我添加的,用于标记时钟设置时间。

}

//****************************我添加的一段程序**************************************

doublesin(doublex)

{

intn;

doublei=0.0000001;

doublej=0;

doublek;

k=x;

n=1;

do

{

j=j+k;

n++;

k=-k*x*x/(2*n-1)/(2*n-2);

}

while(k>i||-k>i);

return(j);

}

doublecos(doublex)

{

intn;

doublei=0.0000001;

doublej=0;

doublek;

k=1;

n=1;

do

{

j=j+k;

k=-k*x*x/(2*n)/(2*n-1);

n++;

}

while(k>i||-k>i);

return(j);

}

voidMain(void)

{

doubleaas,aam,aah;

intssbit,sgbit,msbit,mgbit,hsbit,hgbit;

doublexxs,yys,xxm,yym,xxh,yyh;

doublexxs1,yys1,xxm1,yym1,xxh1,yyh1;//这句调适很重要

intsecondp,minutep,hourp;

intAlarm_flag;

intAlm_count;

intx0,y0;

intx1,y1;

//-------addbgn-------------------

U32pix_x,pix_y,offset_x,offset_y;

//-------addend-------------------

U16year,rBCDYEAR1;

U8month,day;//week

U8hour,minute,second,sec_cfg,hour_cfg,min_cfg;

U8rBCDYEARS,rBCDYEARG;

U8rBCDMON1,rBCDDATE1,rBCDHOUR1,rBCDMIN1,rBCDSEC1;//闹钟临时变量

char*mode;

inti,ii;

U8key;

U32mpll_val=0;

//U32divn_upll=0;

//#ifADS10

//__rt_lib_init();//forADS1.0

//#endif

Port_Init();

Isr_Init();

i=2;//don'tuse100M!

switch(i)

{

case0:

//200

key=12;

mpll_val=(92<<12)|(4<<4)|

(1);

break;

case1:

//300

key=13;

mpll_val=(67<<12)|(1<<4)|

(1);

break;

case2:

//400

key=14;

mpll_val=(92<<12)|(1<<4)|

(1);

break;

case3:

//440!

!

!

key=14;

mpll_val=(102<<12)|(1<<4)|

(1);

break;

default:

key=14;

mpll_val=(92<<12)|(1<<4)|

(1);

break;

}

//initFCLK=400M,sochangeMPLLfirst

ChangeMPllValue((mpll_val>>12)&0xff,(mpll_val>>4)&0x3f,mpll_val&3);

ChangeClockDivider(key,12);

cal_cpu_bus_clk();

consoleNum=0;//Uart1selectfordebug.

Uart_Init(0,115200);

Uart_Select(consoleNum);

Beep(2000,100);

Uart_SendByte('\n');

Uart_Printf("<***************************************>\n");

Uart_Printf("TQ2440TestProgram\n");

Uart_Printf("\n");

Uart_Printf("Buildtimeis:

%s%s\n",__DATE__,__TIME__);//wangwang如果不删掉,pc串口依然可以工作

Uart_Printf("<***************************************>\n");

rMISCCR=rMISCCR&~(1<<3);//USBDisselectedinsteadofUSBH1

rMISCCR=rMISCCR&~(1<<13);//USBport1isenabled.

rDSC0=0x2aa;

rDSC1=0x2aaaaaaa;

//EnableNAND,USBD,PWMTImer,UART0,1andGPIOclock,

//theothersmustbeenabledinOS!

!

!

rCLKCON=0xfffff0;

MMU_Init();//

pISR_SWI=(_ISR_STARTADDRESS+0xf0);//forpSOS

Led_Display(0x66);

mode="DMA";

Clk0_Disable();

Clk1_Disable();

mpll_val=rMPLLCON;

#ifdefCSTM_LCD

cstmLcd_init();

#else

Lcd_TFT_Init();//LCDinitial

#endif

download_run=1;//ThedefaultmenuistheDownload&Runmode.

rADCDLY=50000;

//Normalconversionmodedelayabout(1/3.6864M)*50000=13.56ms

rADCCON=(1<<14)+(ADCPRS<<6);//ADCPRSEn,ADCPRSValue

//Uart_Printf("\nTouchScreentest\n");

rADCTSC=0xd3;//Wfait,XP_PU,XP_Dis,XM_Dis,YP_Dis,YM_En

pISR_ADC=(int)AdcTsAuto;

rINTMSK=~BIT_ADC;//ADCTouchScreenMaskbitclear

rINTSUBMSK=~(BIT_SUB_TC);

Lcd_ClearScr(0xffff);

RTC_Time_Set();

//-------addbgn---------------

#ifdefCSTM_LCD

g_type=get_pix(&pix_x,&pix_y);

offset_x=(pix_x-320)/2;

offset_y=(pix_y-240)/2;

#else

offset_x=(LCD_XSIZE_TFT-320)/2;

offset_y=(LCD_YSIZE_TFT-240)/2;

if(LCD_Type==LCDW35)

g_type=LCD_35;

elseif(LCD_Type==LCDW43)

g_type=LCD_43;

elseif(LCD_Type==LCDA70)

g_type=LCD_70;

#endif

//-------addend---------------

while

(1)

{

Paint_Bmp(0+offset_x,0+offset_y,320,240,windesk_320240);

x0=100;

y0=158;

x1=224;

y1=158;

Alarm_flag=0;

Alm_count=0;

xxs=xxm=xxh=x0;

yys=yym=yyh=y0;//和共同sec_cfg进行去痕迹;

xxs1=xxm1=xxh1=x1;

yys1=yym1=yyh1=y1;

while

(1)

{

if(rBCDSEC!

=second)

Alm_count++;

if(0x2000+rBCDYEAR==rBCDYEAR1&&rBCDMON==rBCDMON1&&

rBCDDATE==rBCDDATE1&&rBCDHOUR==rBCDHOUR1&&rBCDMIN==

rBCDMIN1&&rBCDSEC==rBCDSEC1)

{

U16freq=800;

Buzzer_Freq_Set(freq);

}//闹钟检查

//闹钟只响60s

if(Alm_count==60)

{

Buzzer_Stop();

}

if(xdata>(270+offset_x)&&xdata<(320+offset_x)&&ydata<(240+offset_y)&&ydata>(210+offset_y))

break;

//返回键

//电子时钟////////////////////////////////////////////////////////////////////////////////////////////

if(xdata<(45+offset_x)&&xdata>(0+offset_x)&&ydata<(100+offset_y)&&ydata>(70+offset_y))

{

Lcd_ClearScr(0x0000);

Paint_Bmp(0+offset_x,0+offset_y,320,240,electro_320240);

xdata=X_NULL;

while

(1)

{

if(rBCDSEC!

=second)

Alm_count++;

if(0x2000+rBCDYEAR==rBCDYEAR1&&rBCDMON==rBCDMON1

&&rBCDDATE==rBCDDATE1&&rBCDHOUR==rBCDHOUR1&&

rBCDMIN==rBCDMIN1&&rBCDSEC==rBCDSEC1)

{

U16freq=800;

Buzzer_Freq_Set(freq);

}//闹钟检查

if(Alm_count==60)

{

Buzzer_Stop();

}

if(xdata<(45+offset_x)&&xdata>(0+offset_x)&&ydata<(60+offset_y)&&ydata>(30+offset_y))

break;

//切换键

if(xdata<(310+offset_x)&&xdata>(260+offset_x)&&ydata<(235+offset_y)&&ydata>(210+offset_y))

break;

//返回键

/************************************************************

时间调整bgn

************************************************************/

//小时调整

if(xdata<(130+offset_x)&&xdata>(70+offset_x)&&ydata>(40+offset_y)&&ydata<(70+offset_y))

{

rRTCCON=1;

//如果没有这句使能的语句的话,这个调整是不被系统接收的。

rBCDHOUR=0x01+rBCDHOUR;

if(rBCDHOUR==0x0A)

{

rBCDHOUR=rBCDHOUR+0x06;

}

elseif(rBCDHOUR==0x13)

{

rBCDHOUR=0x01;

}

xdata=X_NULL;//防止无限的加下去。

rRTCCON&=~1;

}

//分调整

if(xdata>(130+offset_x)&&xdata<(180+offset_x)&&ydata>(40+offset_y)&&ydata<(70+offset_y))

{

rRTCCON=1;

rBCDMIN=0x01+rBCDMIN;

if(rBCDMIN==0x0A||rBCDMIN==0x1A||rBCDMIN==

0x2A||rBCDMIN==0x3A||rBCDMIN==0x4A||

rBCDMIN==0x5A)

{

rBCDMIN=rBCDMIN+0x06;

//wang我添加的代码,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 环境科学食品科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1