本帖最后由 hotpower 于 2011-10-21 01:10 编辑
-
- 一:先说一下写任何程序的通用思路:1.芯片注册解锁;函数为: UNLOCKREG();
- 2.设定晶振;
- 函数为: SYSCLK->;PWRCON.XTAL12M_EN = 1;
- (这里用的是常用的外部12M晶振,还可以是XTAL32K_EN,OSC22M_EN,OSC10K_EN)
- 3.等待时钟就绪;函数为: DrvSYS_Delay(5000);
- 4.写自己的程序
- 二:GPIO常用函数:1.设置端口模式:DrvGPIO_Open(端口,引脚,模式);
- 端口为E_GPA到E_GPE;
- 引脚为对应数字1,2......
- 模式有:E_IO_INPUT,E_IO_OUTPUT,E_IO_OPENDRAIN,E_IO_QUAST;
- 2.端口清零:DrvGPIO_ClrBit(端口,引脚)
- 3.端口置位:DrvGPIO_SetBit(端口,引脚)
- 4.端口统一设置:DrvGPIO_SetPortBits(端口,所有引脚的高低电平)
- 三:本函数设计思想:模拟资料里的实验1,2.自己设置通过串口来控制LED灯闪烁模式。
- 源程序如下:
-
- #include <stdio.h>
- #include "NUC1xx.h"
- #include "DrvSYS.h"
- #include "DrvGPIO.h"
- #include "DrvUART.h"
- void init(void) //初始化
- {
- UNLOCKREG(); //解锁
- SYSCLK->;PWRCON.XTL12M_EN = 1; //设定12M外部晶振
- DrvSYS_Delay(5000);
- }
- void set_gpio(void) //设置GPIO模式
- {
- DrvGPIO_Open(E_GPA,2,E_IO_OUTPUT);
- DrvGPIO_Open(E_GPA,3,E_IO_OUTPUT);
- DrvGPIO_Open(E_GPA,4,E_IO_OUTPUT);
- DrvGPIO_Open(E_GPA,5,E_IO_OUTPUT);
- }
- void set_uart() //设置串口
- {
- STR_UART_T param;
-
- DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); // 使能UART时钟
- DrvGPIO_InitFunction(E_FUNC_UART0); // 复用功能引脚设置
-
- param.u32BaudRate = 115200; // 波特率
- param.u8cDataBits = DRVUART_DATABITS_8; // 数据位
- param.u8cStopBits = DRVUART_STOPBITS_1; // 停止位
- param.u8cParity = DRVUART_PARITY_NONE; // 校验位
- param.u8cRxTriggerLevel = DRVUART_FIFO_1BYTES; // FIFO存储深度 1 字节
- param.u8TimeOut = 0; // FIFO超时设定
- DrvUART_Open(UART_PORT0, ¶m); // 串口开启、结构体整体赋值
- }
- void mode_1(void) //模式一
- {
- uint8_t i = 10;
- while(i--)
- {
- DrvGPIO_ClrBit(E_GPA, 2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetBit(E_GPA, 2);
- DrvGPIO_ClrBit(E_GPA, 3);
- DrvSYS_Delay(300000);
- DrvGPIO_SetBit(E_GPA, 3);
- DrvGPIO_ClrBit(E_GPA, 4);
- DrvSYS_Delay(300000);
- DrvGPIO_SetBit(E_GPA, 4);
- DrvGPIO_ClrBit(E_GPA, 5);
- DrvSYS_Delay(300000);
- DrvGPIO_SetBit(E_GPA, 5);
- }
- }
- void mode_2(void) //模式二
- {
- uint8_t i = 10;
- while(i--)
- {
- DrvGPIO_SetPortBits(E_GPA,0x03<<2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetPortBits(E_GPA,0x9<<2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetPortBits(E_GPA,0x0c<<2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetPortBits(E_GPA,0x6<<2);
- DrvSYS_Delay(300000);
- }
- }
- void mode_3(void) //模式三
- {
- uint8_t i = 10;
- while(i--)
- {
- DrvGPIO_SetPortBits(E_GPA,0x1<<2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetPortBits(E_GPA,0x2<<2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetPortBits(E_GPA,0x4<<2);
- DrvSYS_Delay(300000);
- DrvGPIO_SetPortBits(E_GPA,0x8<<2);
- DrvSYS_Delay(300000);
- }
- }
- void uart(void)
- {
- uint8_t mode;
- set_uart();
- printf("请选择模式1-3\n");
- scanf("%d\n",&mode);
- printf("您选择了模式%d\n",mode);
- do
- {
- switch (mode)
- {
- case 1 : mode_1();break;//模式一
- case 2 : mode_2();break;//模式二
- case 3 : mode_3();break;//模式三
- default: printf("输入有误");
- }
- printf("继续选择其它模式请输入相应模式号 1-3\n");
- printf("退出请输入 0");
- scanf("%d\n",&mode);
- printf("您选择了模式%d\n",mode);
- }while(mode!=0);
- }
- int main(void)
- {
- init();
- set_gpio();
- uart();
- while(1);
- //return 0;
- }
|