⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mwclock.c

📁 在uClinux 2.4X 的GUI 驱动 microwindows-Drives 测试OK
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************** 
** Microwindows 时间显示演示程序 cnmusic@163.net 2006.2.26 ********** 
*********************************************************************
** 利用S3C44B0X 的RTC功能提供时间的显示							   **
** 还提供了设置时间的界面。										   **
*********************************************************************/
#define MWINCLUDECOLORS 
#include <stdio.h> 
#include <strings.h>
#include "nano-X.h" 

// 寄存器定义
#define MCLK 64000000

#define WRBUFOPT (0x8)   //write_buf_on

#define SYSCFG_0KB (0x0|WRBUFOPT)
#define SYSCFG_4KB (0x2|WRBUFOPT)
#define SYSCFG_8KB (0x6|WRBUFOPT)

#define DRAM	    1		//In case DRAM is used
#define SDRAM	    2		//In case SDRAM is used
#define BDRAMTYPE   SDRAM	//used in power.c,44blib.c

//BUSWIDTH; 16,32
#define BUSWIDTH    (16)

#define CACHECFG    SYSCFG_8KB

#define _RAM_STARTADDRESS 0xc000000

//#define _ISR_STARTADDRESS 0xc1fff00   //GCS6:16M DRAM
#define _ISR_STARTADDRESS 0xc7fff00     //GCS6:64M DRAM/SDRAM

//this code is in Feng's board

#define Non_Cache_Start	(0x2000000)
#define Non_Cache_End 	(0xc000000)

/* System */
#define rSYSCFG		(*(volatile unsigned *)0x1c00000)

/* Cache */
#define rNCACHBE0	(*(volatile unsigned *)0x1c00004)
#define rNCACHBE1	(*(volatile unsigned *)0x1c00008)

/* Bus control */
#define rSBUSCON	(*(volatile unsigned *)0x1c40000)
    
/* Memory control */
#define rBWSCON		(*(volatile unsigned *)0x1c80000)
#define rBANKCON0	(*(volatile unsigned *)0x1c80004)
#define rBANKCON1	(*(volatile unsigned *)0x1c80008)
#define rBANKCON2	(*(volatile unsigned *)0x1c8000c)
#define rBANKCON3	(*(volatile unsigned *)0x1c80010)
#define rBANKCON4	(*(volatile unsigned *)0x1c80014)
#define rBANKCON5	(*(volatile unsigned *)0x1c80018)
#define rBANKCON6	(*(volatile unsigned *)0x1c8001c)
#define rBANKCON7	(*(volatile unsigned *)0x1c80020)
#define rREFRESH	(*(volatile unsigned *)0x1c80024)
#define rBANKSIZE	(*(volatile unsigned *)0x1c80028)
#define rMRSRB6		(*(volatile unsigned *)0x1c8002c)
#define rMRSRB7		(*(volatile unsigned *)0x1c80030)

/* UART */
#define rULCON0		(*(volatile unsigned *)0x1d00000)
#define rULCON1		(*(volatile unsigned *)0x1d04000)
#define rUCON0		(*(volatile unsigned *)0x1d00004)
#define rUCON1		(*(volatile unsigned *)0x1d04004)
#define rUFCON0		(*(volatile unsigned *)0x1d00008)
#define rUFCON1		(*(volatile unsigned *)0x1d04008)
#define rUMCON0		(*(volatile unsigned *)0x1d0000c)
#define rUMCON1		(*(volatile unsigned *)0x1d0400c)
#define rUTRSTAT0	(*(volatile unsigned *)0x1d00010)
#define rUTRSTAT1	(*(volatile unsigned *)0x1d04010)
#define rUERSTAT0	(*(volatile unsigned *)0x1d00014)
#define rUERSTAT1	(*(volatile unsigned *)0x1d04014)
#define rUFSTAT0	(*(volatile unsigned *)0x1d00018)
#define rUFSTAT1	(*(volatile unsigned *)0x1d04018)
#define rUMSTAT0	(*(volatile unsigned *)0x1d0001c)
#define rUMSTAT1	(*(volatile unsigned *)0x1d0401c)
#define rUBRDIV0	(*(volatile unsigned *)0x1d00028)
#define rUBRDIV1	(*(volatile unsigned *)0x1d04028)

#ifdef __BIG_ENDIAN
#define rUTXH0		(*(volatile unsigned char *)0x1d00023)
#define rUTXH1		(*(volatile unsigned char *)0x1d04023)
#define rURXH0		(*(volatile unsigned char *)0x1d00027)
#define rURXH1		(*(volatile unsigned char *)0x1d04027)
#define WrUTXH0(ch)	(*(volatile unsigned char *)(0x1d00023))=(unsigned char)(ch)
#define WrUTXH1(ch)	(*(volatile unsigned char *)(0x1d04023))=(unsigned char)(ch)
#define RdURXH0()	(*(volatile unsigned char *)(0x1d00027))
#define RdURXH1()	(*(volatile unsigned char *)(0x1d04027))  
#define UTXH0		(0x1d00020+3)  //byte_access address by BDMA
#define UTXH1		(0x1d04020+3)
#define URXH0		(0x1d00024+3)  
#define URXH1		(0x1d04024+3)  

#else //Little Endian
#define rUTXH0		(*(volatile unsigned char *)0x1d00020)
#define rUTXH1		(*(volatile unsigned char *)0x1d04020)
#define rURXH0		(*(volatile unsigned char *)0x1d00024)
#define rURXH1		(*(volatile unsigned char *)0x1d04024)
#define WrUTXH0(ch)	(*(volatile unsigned char *)0x1d00020)=(unsigned char)(ch)
#define WrUTXH1(ch)	(*(volatile unsigned char *)0x1d04020)=(unsigned char)(ch)
#define RdURXH0()	(*(volatile unsigned char *)0x1d00024)
#define RdURXH1()	(*(volatile unsigned char *)0x1d04024)
#define UTXH0		(0x1d00020)    //byte_access address by BDMA
#define UTXH1		(0x1d04020)
#define URXH0		(0x1d00024)
#define URXH1		(0x1d04024)
#endif

/* SIO */
#define rSIOCON		(*(volatile unsigned *)0x1d14000)
#define rSIODAT		(*(volatile unsigned *)0x1d14004)
#define rSBRDR		(*(volatile unsigned *)0x1d14008)
#define rIVTCNT		(*(volatile unsigned *)0x1d1400c)
#define rDCNTZ		(*(volatile unsigned *)0x1d14010)

/* IIS */
#define rIISCON		(*(volatile unsigned *)0x1d18000)
#define rIISMOD		(*(volatile unsigned *)0x1d18004)
#define rIISPSR		(*(volatile unsigned *)0x1d18008)
#define rIISFCON	(*(volatile unsigned *)0x1d1800c)

#ifdef __BIG_ENDIAN
#define rIISFIF		((volatile unsigned short *)0x1d18012)

#else //Little Endian
#define rIISFIF		((volatile unsigned short *)0x1d18010)
#endif

/* I/O PORT */
#define rPCONA		(*(volatile unsigned *)0x1d20000)
#define rPDATA		(*(volatile unsigned *)0x1d20004)

#define rPCONB		(*(volatile unsigned *)0x1d20008)
#define rPDATB		(*(volatile unsigned *)0x1d2000c)

#define rPCONC		(*(volatile unsigned *)0x1d20010)
#define rPDATC		(*(volatile unsigned *)0x1d20014)
#define rPUPC		(*(volatile unsigned *)0x1d20018)

#define rPCOND		(*(volatile unsigned *)0x1d2001c)
#define rPDATD		(*(volatile unsigned *)0x1d20020)
#define rPUPD		(*(volatile unsigned *)0x1d20024)

#define rPCONE		(*(volatile unsigned *)0x1d20028)
#define rPDATE		(*(volatile unsigned *)0x1d2002c)
#define rPUPE		(*(volatile unsigned *)0x1d20030)

#define rPCONF		(*(volatile unsigned *)0x1d20034)
#define rPDATF		(*(volatile unsigned *)0x1d20038)
#define rPUPF		(*(volatile unsigned *)0x1d2003c)

#define rPCONG		(*(volatile unsigned *)0x1d20040)
#define rPDATG		(*(volatile unsigned *)0x1d20044)
#define rPUPG		(*(volatile unsigned *)0x1d20048)

#define rSPUCR		(*(volatile unsigned *)0x1d2004c)
#define rEXTINT		(*(volatile unsigned *)0x1d20050)
#define rEXTINTPND	(*(volatile unsigned *)0x1d20054)



/* WATCHDOG */
#define rWTCON		(*(volatile unsigned *)0x1d30000)
#define rWTDAT		(*(volatile unsigned *)0x1d30004)
#define rWTCNT		(*(volatile unsigned *)0x1d30008)

/* ADC */
#define rADCCON		(*(volatile unsigned *)0x1d40000)
#define rADCPSR		(*(volatile unsigned *)0x1d40004)
#define rADCDAT		(*(volatile unsigned *)0x1d40008)

/* Timer */
#define rTCFG0		(*(volatile unsigned *)0x1d50000)
#define rTCFG1		(*(volatile unsigned *)0x1d50004)
#define rTCON		(*(volatile unsigned *)0x1d50008)

#define rTCNTB0		(*(volatile unsigned *)0x1d5000c)
#define rTCMPB0		(*(volatile unsigned *)0x1d50010)
#define rTCNTO0		(*(volatile unsigned *)0x1d50014)

#define rTCNTB1		(*(volatile unsigned *)0x1d50018)
#define rTCMPB1		(*(volatile unsigned *)0x1d5001c)
#define rTCNTO1		(*(volatile unsigned *)0x1d50020)

#define rTCNTB2		(*(volatile unsigned *)0x1d50024)
#define rTCMPB2		(*(volatile unsigned *)0x1d50028)
#define rTCNTO2		(*(volatile unsigned *)0x1d5002c)

#define rTCNTB3		(*(volatile unsigned *)0x1d50030)
#define rTCMPB3		(*(volatile unsigned *)0x1d50034)
#define rTCNTO3		(*(volatile unsigned *)0x1d50038)

#define rTCNTB4		(*(volatile unsigned *)0x1d5003c)
#define rTCMPB4		(*(volatile unsigned *)0x1d50040)
#define rTCNTO4		(*(volatile unsigned *)0x1d50044)

#define rTCNTB5		(*(volatile unsigned *)0x1d50048)
#define rTCNTO5		(*(volatile unsigned *)0x1d5004c)

/* IIC */
#define rIICCON         (*(volatile unsigned *)0x1d60000)
#define rIICSTAT        (*(volatile unsigned *)0x1d60004)
#define rIICADD         (*(volatile unsigned *)0x1d60008)
#define rIICDS          (*(volatile unsigned *)0x1d6000c)

/* RTC */
#ifdef __BIG_ENDIAN
#define rRTCCON		(*(volatile unsigned char *)0x1d70043)
#define rRTCALM         (*(volatile unsigned char *)0x1d70053)
#define rALMSEC         (*(volatile unsigned char *)0x1d70057)
#define rALMMIN         (*(volatile unsigned char *)0x1d7005b)
#define rALMHOUR        (*(volatile unsigned char *)0x1d7005f)
#define rALMDAY         (*(volatile unsigned char *)0x1d70063)
#define rALMMON         (*(volatile unsigned char *)0x1d70067)
#define rALMYEAR        (*(volatile unsigned char *)0x1d7006b)
#define rRTCRST         (*(volatile unsigned char *)0x1d7006f)
#define rBCDSEC         (*(volatile unsigned char *)0x1d70073)
#define rBCDMIN         (*(volatile unsigned char *)0x1d70077)
#define rBCDHOUR        (*(volatile unsigned char *)0x1d7007b)
#define rBCDDAY         (*(volatile unsigned char *)0x1d7007f)
#define rBCDDATE        (*(volatile unsigned char *)0x1d70083)
#define rBCDMON         (*(volatile unsigned char *)0x1d70087)
#define rBCDYEAR        (*(volatile unsigned char *)0x1d7008b)
#define rTICINT         (*(volatile unsigned char *)0x1d7008e)
#else
#define rRTCCON         (*(volatile unsigned char *)0x1d70040)
#define rRTCALM         (*(volatile unsigned char *)0x1d70050)
#define rALMSEC         (*(volatile unsigned char *)0x1d70054)
#define rALMMIN         (*(volatile unsigned char *)0x1d70058)
#define rALMHOUR        (*(volatile unsigned char *)0x1d7005c)
#define rALMDAY         (*(volatile unsigned char *)0x1d70060)
#define rALMMON         (*(volatile unsigned char *)0x1d70064)
#define rALMYEAR        (*(volatile unsigned char *)0x1d70068)
#define rRTCRST         (*(volatile unsigned char *)0x1d7006c)
#define rBCDSEC         (*(volatile unsigned char *)0x1d70070)
#define rBCDMIN         (*(volatile unsigned char *)0x1d70074)
#define rBCDHOUR        (*(volatile unsigned char *)0x1d70078)
#define rBCDDAY         (*(volatile unsigned char *)0x1d7007c)
#define rBCDDATE        (*(volatile unsigned char *)0x1d70080)
#define rBCDMON         (*(volatile unsigned char *)0x1d70084)
#define rBCDYEAR        (*(volatile unsigned char *)0x1d70088)
#define rTICINT         (*(volatile unsigned char *)0x1d7008c)
#endif

typedef struct tagSpinButton
{
	GR_WINDOW_ID	wWindow;
	int				nValue;
	int				nMax;
	int				nMin;
	int				*pValue;
}SPINBUTTON;

GR_FONT_ID		ChineseFont;

// 绘制按钮,这里没用它的Widget,自己绘制的按钮
void DrawButton(GR_WINDOW_ID wButton,int Width,int Height,int bDown);

// 显示时间,其实就是把一个数字显示到指定的位置里。
void PrintTimer(int nValue,int X,int Y,GR_GC_ID hDC,GR_WINDOW_ID wWindow);

// 数字转换成BCD码,这里只能处理2位数字,对于日期够用了。
int NumberToBCD(int nValue);

// 显示设置时间的对话框
void do_setup_time(GR_WINDOW_ID wRootWindow);
/******************************************************************************/ 
int main(int ac,char **av) 
{
	char		szTimer[10];
	int			nYear=0;
	int			nMonth=0;
	int			nDay=0;
	int			nHours=0;
	int			nMinutes=0;
	int			nSeconds=0;

	GR_WINDOW_ID	w;
	GR_WINDOW_ID	wSetButton;
	GR_GC_ID		DCTimer;
	GR_GC_ID		DCButton;
	GR_EVENT		event;

	if (GrOpen()<0)
	{
		printf("Can't open graphics\n");
		exit(1);
		
	}

	rRTCCON = 1; // 允许访问RTC寄存器。

	// 创建主窗口
	w = GrNewWindowEx(
		GR_WM_PROPS_MAXIMIZE|GR_WM_PROPS_NOAUTOMOVE, "Clock", GR_ROOT_WINDOW_ID, 
		10, 10, 230, 22, GrGetSysColor(GR_COLOR_BTNFACE));
	
	// 创建设置按钮
	wSetButton = GrNewWindowEx(
		GR_WM_PROPS_BORDER|GR_WM_PROPS_APPFRAME,
		"Set", w, 
		160, 1, 60, 20, GrGetSysColor(GR_COLOR_BTNFACE));

	// 设置事件
	GrSelectEvents(w, GR_EVENT_MASK_CLOSE_REQ | GR_EVENT_MASK_TIMEOUT);
	GrSelectEvents(wSetButton, GR_EVENT_MASK_EXPOSURE | GR_EVENT_MASK_BUTTON_DOWN | GR_EVENT_MASK_BUTTON_UP);

	// 显示窗口和按钮
	GrMapWindow(w);
	GrMapWindow(wSetButton);
 	
	// 获得绘图句柄
	DCTimer = GrNewGC();
	// 设置前景颜色
	GrSetGCForeground(DCTimer,BLACK); 
	// 背景颜色
	GrSetGCBackground(DCTimer,GrGetSysColor(GR_COLOR_BTNFACE));
	// 创建字体,汉字的 12
	// 后来找到原因了,make menuconfig里面的汉字支持设置没有
	// 传递到engine的编译过程里
	// 最后手动修改device.h
	// 增加了
	/*

	#ifndef HAVE_HZK_SUPPORT
	#define HAVE_HZK_SUPPORT		1
	#endif

	#ifndef HZK_FONT_DIR
	#define HZK_FONT_DIR			"/bin"		//字库的存放位置,这里我放到了bin里。
	#endif
	才搞定,只有12和16号字可以使用。

	*/
	
	ChineseFont=GrCreateFont("HZKFONT",12,NULL);
	// 选中字体
	GrSetGCFont(DCTimer,ChineseFont); 

	// 创建按钮的绘制句柄
	DCButton = GrNewGC();

	// 前景、背景、字体
	GrSetGCForeground(DCButton,BLACK); 
	GrSetGCBackground(DCButton,GrGetSysColor(GR_COLOR_BTNFACE));
	GrSetGCFont(DCButton,ChineseFont); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -