1、闹钟裸奔核心代码/*NAME: u2440mon.cDESC: u2440mon entry point,menu,download */#define GLOBAL_CLK 1#define REQCNT 30#define ADCPRS 9#define LOOP 1void _irq AdcTsAuto(void);int count = 0;volatile int xdata, ydata;/extern volatile int xdata, ydata;/extern int count;/volatile bool RTC_flag;#include #include #inc
2、lude 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#includecstm_lcd.h#define X_NULL (0UL)U8 g_type;extern char Image$RO$Limit;
3、extern char Image$RO$Base;extern char Image$RW$Limit;extern char Image$RW$Base;extern char Image$ZI$Limit;extern char Image$ZI$Base;extern unsigned char _CHS; /我添加的字库实验extern unsigned char _VGA;void Lcd_PutASCII(unsigned int x, unsigned int y, unsigned char ch, unsigned int c, unsigned int bk_c, uns
4、igned int st); /英文void Lcd_PutHZ(unsigned int x, unsigned int y, unsigned short int QW, unsigned int c, unsigned int bk_c, unsigned int st); /中文void Lcd_printf(unsigned int x, unsigned int y, unsigned int c, unsigned int bk_c, unsigned int st, char *fmt, .); /输出void Isr_Init(void);void HaltUndef(voi
5、d);void HaltSwi(void);void HaltPabort(void);void HaltDabort(void);void ClearMemory(void);void Clk0_Enable(int clock_sel);void Clk1_Enable(int clock_sel);void Clk0_Disable(void);void Clk1_Disable(void);extern void Lcd_TFT_Init(void);extern void KeyScan_Test(void);extern void Lcd_ClearScr(U32 c);exter
6、n void Lcd_ClearScr1(int x0, int y0, int h, int l, U32 c);extern void Glib_Rectangle(int x1, int y1, int x2, int y2, int color);extern void Glib_Line(int x1, int y1, int x2, int y2, int color);volatile U32 downloadAddress;void(*restart)(void) = (void(*)(void)0x0;volatile unsigned char *downPt;volati
7、le U32 downloadFileSize;volatile U16 checkSum;volatile unsigned int err = 0;volatile U32 totalDmaCount;volatile int isUsbdSetConfiguration;int download_run = 0;U32 tempDownloadAddress;int menuUsed = 0;extern char Image$RW$Limit;U32 *pMagicNum = (U32*)Image$RW$Limit;int consoleNum;int a, b, c, d, e;s
8、tatic U32 cpu_freq;static U32 UPLL;static void cal_cpu_bus_clk(void) U32 val; U8 m, p, s; int start = 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 1) &3; p = val &1; val = rCAMDIVN; s = val 8; switch (m) case
9、 0: HCLK = FCLK; break; case 1: HCLK = FCLK 1; break; case 2: if (s &2) HCLK = FCLK 3; else HCLK = FCLK 2; break; case 3: 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) &
10、0xff; p = (val 4) &0x3f; s = val &3; UPLL = (m + 8) *FIN) / (p + 2)*(1 1): UPLL;/*我添加的一段程序*void RTC_Time_Set(void) rRTCCON = 1; /RTC read and write enable rBCDYEAR = 0x10; /年 rBCDMON = 0x01; /月 rBCDDATE = 0x28; /日 rBCDDAY = 0x05; /星期 rBCDHOUR = 0x12; /小时 rBCDMIN = 0x00; /分 rBCDSEC = 0x00; /秒 rRTCCON
11、 &= 1; /RTC read and write disable /RTC_flag=false; /这是我添加的,用于标记时钟设置时间。/*我添加的一段程序*double sin(double x) int n; double i = 0.0000001; double j = 0; double k; 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);double cos(double x) int n; double i
12、= 0.0000001; double j = 0; double k; 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);void Main(void) double aas, aam, aah; int ssbit, sgbit, msbit, mgbit, hsbit, hgbit; double xxs, yys, xxm, yym, xxh, yyh; double xxs1, yys1, xxm1, yym1, xxh1, yy
13、h1; /这句调适很重要 int secondp, minutep, hourp; int Alarm_flag; int Alm_count; int x0, y0; int x1, y1;/-add bgn- U32 pix_x,pix_y,offset_x,offset_y;/-add end- U16 year, rBCDYEAR1; U8 month, day; / week U8 hour, minute, second, sec_cfg, hour_cfg, min_cfg; U8 rBCDYEARS, rBCDYEARG; U8 rBCDMON1, rBCDDATE1, rBC
14、DHOUR1, rBCDMIN1, rBCDSEC1; /闹钟临时变量 char *mode; int i, ii; U8 key; U32 mpll_val = 0; /U32 divn_upll = 0 ; / #if ADS10 / _rt_lib_init(); /for ADS 1.0 / #endif Port_Init(); Isr_Init(); i = 2; /dont use 100M! switch (i) case 0: /200 key = 12; mpll_val = (92 12) | (4 4) | (1); break; case 1: /300 key =
15、13; mpll_val = (67 12) | (1 4) | (1); break; case 2: /400 key = 14; mpll_val = (92 12) | (1 4) | (1); break; case 3: /440! key = 14; mpll_val = (102 12) | (1 4) | (1); break; default: key = 14; mpll_val = (92 12) | (1 12) &0xff, (mpll_val 4) &0x3f, mpll_val &3); ChangeClockDivider(key, 12); cal_cpu_
16、bus_clk(); consoleNum = 0; / Uart 1 select for debug. Uart_Init(0, 115200); Uart_Select(consoleNum); Beep(2000, 100);Uart_SendByte(n);Uart_Printf(n);Uart_Printf( TQ2440 Test Programn);Uart_Printf( n);Uart_Printf( Build time is: %s %sn, _DATE_ , _TIME_ ); /wangwang如果不删掉,pc串口依然可以工作Uart_Printf(n); rMIS
17、CCR = rMISCCR &(1 3); / USBD is selected instead of USBH1 rMISCCR = rMISCCR &(1 13); / USB port 1 is enabled. rDSC0 = 0x2aa; rDSC1 = 0x2aaaaaaa; /Enable NAND, USBD, PWM TImer, UART0,1 and GPIO clock, /the others must be enabled in OS! rCLKCON = 0xfffff0; MMU_Init(); / pISR_SWI = (_ISR_STARTADDRESS +
18、 0xf0); /for pSOS Led_Display(0x66); mode = DMA; Clk0_Disable(); Clk1_Disable(); mpll_val = rMPLLCON;#ifdef CSTM_LCD cstmLcd_init();#else Lcd_TFT_Init(); / LCD initial#endif download_run = 1; /The default menu is the Download & Run mode. rADCDLY = 50000; /Normal conversion mode delay about (1/3.6864
19、M)*50000=13.56ms rADCCON = (1 14) + (ADCPRS (270+offset_x) & xdata (320+offset_x) & ydata (210+offset_y) break; /返回键 /电子时钟/ if (xdata (0+offset_x) & 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)
20、 Alm_count+; if (0x2000 + rBCDYEAR = rBCDYEAR1 & rBCDMON = rBCDMON1 & rBCDDATE = rBCDDATE1 & rBCDHOUR = rBCDHOUR1 & rBCDMIN = rBCDMIN1 & rBCDSEC = rBCDSEC1) U16 freq = 800; Buzzer_Freq_Set(freq); /闹钟检查 if (Alm_count = 60) Buzzer_Stop(); if (xdata (0+offset_x) & ydata (30+offset_y) break; /切换键 if (xd
21、ata (260+offset_x) & ydata (210+offset_y) break; /返回键 /* 时间调整 bgn */ /小时调整 if (xdata (70+offset_x) & ydata (40+offset_y) & ydata (130+offset_x) & xdata (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