西电32位嵌入式实验报告

更新时间:2024-06-21 19:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

32位嵌入式综合性实验报告

学院:研究生院 姓名:范峻豪 学号:1500030088

(一) 实验目的

1. 了解STR75xF微处理器芯片的体系结构; 2. 了解32位嵌入式系统程序设计基本技巧; 3. 掌握开发工具软件IAR的使用。

(二) 实验内容

设计程序下载到开发板中并用串口线将开发板与电脑相连,通过串口调试助手来控制开发板实现不同的功能。串口调试助手通过发送不同的控制字节来控制开发板,要求实现如下几项功能:

1.串口回显功能,串口调试助手向开发板发送一个字节,开发板接收到该字节后再将该字节传回到串口调试助手;

2.AD采集传送功能,利用控制器自带的AD,采集变阻器上的

电压值,将采集到的数据经过简单的平滑滤波后显示到数码管上,并通过串口传回到串口调试助手;

3.0.5S延时计数,并将计数值通过串口传回到串口调试助手; 4.200MS通用定时器计数,并将计数值通过串口传回到串口调

试助手;

5.100MS流水灯闪烁,开发板上的四个LED灯都要工作; 6.KEY2,KEY3触发两个外部中断,一个中断用来强制关闭其

他正在运行的程序并开启功能2程序,另外一个中断则用来关闭功能2程序。

(三)实验步骤

3.1 实验环境搭建

3.1.1 生成新的工作区

(1) 双击桌面IAR的快捷方式打开工作区,生成一个空白的工作区。 (2) 选择主菜单“Project->Create New Project”,弹出“生成新项目”窗口。如图3-1所示

(3) 在“Tool chain”栏中选择“ARM”,然后单击“OK”按钮,弹出“另存为”窗口。

图3-1 生成新项目窗口 图3-2 生成新项目

(5) 在“另存为”窗口中找到D:\\新建一个文件夹,命名为YXY,打开YXY文件夹,将新项目的名称命名为“EXTIT”然后保存。如图1-2所示。 在图1-2中项目“EXTIT”名后面的“Debug”表示本项目输出含调试信息的代码文件。EWARM能输出两种代码模式:Debug和Release。Debug模式生成包含

调试信息的程序代码,我们可以利用它在EWARM环境下调试应用程序;而Release模式生成不含调试信息的发行版本的程序代码,其代码比较紧凑,两者的代码量比可以达几倍。“Workspace”窗口顶部的下拉菜单显示当前项目的配置。EWARM为Debug提供两种运行模式,即在片内Flash中运行模式或在片内Flash中运行模式。两种运行模式需要提供不同的连接命令文件(.XCL),此实验选择在ARM中运行模式。项目保存以后,在“EXTIT”目录下生成一个空目录“setting”。

注意:EIC-Debug后的*号表示当前的工作区还没有保存。

(4)保存工作区。新生成的工作区需保存才有,选择主菜单“File->Save Workspace”,浏览并选择“D:\\ EXTIT”目录,然后输入工作区名“EXTIT”,单击“SAVE”按钮退出。这时在“EXTIT”目录下将生成工作区文件“EXTIT.eww”和项目参数设置文件EXTIT.dep、EXTIT.ewd和EXTIT.ewp等。窗口和断点放置,以及与当前操作有关的其他信息则存储在“setting”目录下的文件中。

注意:保存工作区操作完成后项目名后的*号已经消失。

3.1.2 给项目添加文件

(1) 选择在工作区窗口中的“EXTIT”项目名,使其高亮。单击鼠标右键 在弹出的菜单中选择“Add Group?”或选择主菜单“Project->Add Group?”执行添加文件组命令。在弹出菜单中将文件组起名为“startup” 。

(2)在工作区窗口中选择刚建立的文件目录“startup”,使其高亮。单击鼠标右键在弹出菜单中选择“Add Files...”执行添加文件命令。在弹出的添加文件窗口中浏览“D:\\Program Files\\NE-STR750开发学习板软件包\\NESTR75xF\\STDLIB\\LIBRARY\\STARTUP”目录,从中选择文件75x_init.s和75x_vect.s(对话菜单中的“文件类型”注意选择为All Files(*.*))。这两个文件将添加到工作区窗口的“startup”目录下。

(3)重新选择工作区窗口中的“EXTIT”项目名,使其高亮。单击鼠标右键在弹出的菜单中选择“Add Files...”执行添加文件命令。在弹出的添加文件窗口中浏览“D:\\Program Files\\NE-STR750文件。

另外,在这个路径下有一个Readme.txt文件,它是对EXTIT实验的说明,可以看到需要添加的函数文件,这些可以从“Source”库中复制,选择工作区窗口中的EXTIT项目名,单击鼠标右键在弹出菜单中选择“Add Files...”执行添加文件命令。在弹出的添加文件窗口中浏览“D:\\Program Files\\NE-STR750开发学习板软件包\\ NESTR75xF\\STDLIB\\LIBRARY\\SRC”目录,从中选择EXTIT实验需要添加的文件75x_lib.c、 75x_gpio.c、75x_eic.c、75x_extit.c和

开发学习板软件包

\\NESTR75xF\\EXAMPLES\\EXTIT”目录,从中选择75x_conf.h、75x_it.c、main.c

75x_mrcc.c。

注意:在项目中添加文件时只需要添加汇编语言和C语言的源程序,不需要添加头文件。

但是必须在设置项目的编译器(Compiler)选件时指明包含C语言用的头文件的路径和目录;而汇编程序的头文件路径则由EWARM自动指向,因此不必关心。

添加文件后的工作区窗口如图3-3所示。源文件后面的红色星号表示还没有经过编译处理,至此,EXTIT外部中断控制器的工程已经创建完成。

图3-3 添加文件后的工作区窗口

3.3 设置项目选件

生成新项目和添加文件后的下一步是为项目设置选件。设置项目选件是非常重要的一步,如果设置不当,编译、连接就会出错,无法生成正确的代码文件。在创建新项目是选择了“Empty project”模板,表示采用默认的项目选件设置。但是这些默认的设置还要根据具体项目进行修改。

IAR EWARM提供的项目选件内容繁多,实际上最关键的选件并不多,只要设置正确了,其他的采用默认设置就不会出错。

首先选中工作区中的项目名“EXTIT”,单击鼠标右键在弹出的菜单中选择“Options...”或选择主菜单“Project-> Options...”。在弹出的“Options”窗口左边的目录“Category”中选择要修改的选件。

(1)通用选件“General Option”设置。在弹出的“Options”窗口左边的目录“Category”中选择第一项“General Options”,然后分别在:

①“Target”页面中,“Processor Variant”框中选择“Device”,并单击

u8 TxBuffer[] = \Interrupt\\n\\r\

u8 RxBuffer[RxBufferSize]; u8 TxCounter = 0;

u8 NbrOfDataToTransfer = TxBufferSize; u8 NbrOfDataToRead = RxBufferSize; ErrorStatus OSC4MStartUpStatus;

void MRCC_Configuration(void); void GPIO_Configuration(void); void EIC_Configuration(void); int main() {

#ifdef DEBUG debug(); #endif

MRCC_Configuration(); GPIO_Configuration();

UART_InitStructure.UART_WordLength = UART_WordLength_8D; UART_InitStructure.UART_StopBits = UART_StopBits_1; UART_InitStructure.UART_Parity = UART_Parity_No ; UART_InitStructure.UART_BaudRate = 115200; UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;

UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx; UART_InitStructure.UART_FIFO = UART_FIFO_Enable;

UART_InitStructure.UART_TxFIFOLevel = UART_FIFOLevel_1_4; UART_InitStructure.UART_RxFIFOLevel = UART_FIFOLevel_1_8;

UART_Init(UART0, &UART_InitStructure);

while(TxCounter < 0x05) {

UART_SendData(UART0, TxBuffer[TxCounter++]); }

UART_ITConfig(UART0, UART_IT_Receive, ENABLE); UART_ITConfig(UART0, UART_IT_Transmit, ENABLE); EIC_Configuration();

UART_Cmd(UART0, ENABLE); while (1); }

void MRCC_Configuration(void) {

MRCC_DeInit();

OSC4MStartUpStatus = MRCC_WaitForOSC4MStartUp(); if(OSC4MStartUpStatus == SUCCESS) {

MRCC_HCLKConfig(MRCC_CKSYS_Div2); MRCC_CKTIMConfig(MRCC_HCLK_Div1); MRCC_PCLKConfig(MRCC_CKTIM_Div1);

MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15); }

MRCC_IOVoltageRangeConfig(MRCC_IOVoltageRange_3V3); MRCC_PeripheralClockConfig(MRCC_Peripheral_UART0 | MRCC_Peripheral_GPIO, ENABLE); }

void GPIO_Configuration(void) {

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_Init(GPIO0, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIO0, &GPIO_InitStructure); }

void EIC_Configuration(void) {

EIC_IRQInitTypeDef EIC_IRQInitStructure;

EIC_IRQInitStructure.EIC_IRQChannel = UART0_IRQChannel; EIC_IRQInitStructure.EIC_IRQChannelPriority = 1;

EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit(&EIC_IRQInitStructure); EIC_IRQCmd(ENABLE); }

2. AD采集传送功能子程序:

#include %u8 ADC10,ADC1; u16 adc_filter_cnt; u16 adcdata,adc_result; #define SA 0x0400 #define SB 0x0080 #define SC 0x0040 #define SD 0x0010 #define SE 0x0020 #define SF 0x0008 #define SG 0x0100

#define SH 0x0200

#define Digit_0 SA | SB | SC | SD | SE | SF #define Digit_1 SB | SC

#define Digit_2 SA | SB | SD | SE | SG #define Digit_3 SA | SB | SC | SD | SG #define Digit_4 SB | SC | SF | SG #define Digit_5 SA | SC | SD | SF | SG #define Digit_6 SA | SC | SD | SE | SF | SG #define Digit_7 SA | SB | SC

#define Digit_8 SA | SB | SC | SD | SE | SF | SG #define Digit_9 SA | SB | SC | SD | SF | SG #define Digit_A SA | SB | SC | SE | SF | SG #define Digit_B SC | SD | SE | SF | SG #define Digit_C SA | SD | SE | SF

#define Digit_D SB | SC | SD | SE | SG #define Digit_E SA | SD | SE | SF | SG #define Digit_F SA | SE | SF | SG #define Digit_SP 0

const u16 DigitTab[] = {Digit_0,Digit_1,Digit_2,Digit_3, Digit_4,Digit_5,Digit_6,Digit_7, Digit_8,Digit_9,Digit_A,Digit_B, Digit_C,Digit_D,Digit_E,Digit_F, Digit_SP};

GPIO_InitTypeDef GPIO_InitStructure ; EXTIT_InitTypeDef EXTIT_InitStructure; UART_InitTypeDef UART_InitStructure; ADC_InitTypeDef ADC_InitStructure;

void EIC_Configuration(void); void MRCC_Configuration(void); void GPIO_Configuration(void); void Display(u8 Digit,u8 position); ErrorStatus OSC4MStartUpStatus01; void main(void) {

#ifdef DEBUG debug(); #endif

EIC_Configuration(); MRCC_Configuration(); GPIO_Configuration();

TIM_SetPrescaler(TIM0, 0X3E7); TIM_SetPeriod(TIM0, 0xEA5F);

TIM_ITConfig(TIM0, TIM_IT_Update, ENABLE); TIM_Cmd(TIM0, ENABLE);

ADC_InitStructure.ADC_ConversionMode=ADC_ConversionMode_Scan; ADC_InitStructure.ADC_ExtTrigger = ADC_ExtTrigger_Disable; ADC_InitStructure.ADC_AutoClockOff = ADC_AutoClockOff_Disable; ADC_InitStructure.ADC_SamplingPrescaler = 7; ADC_InitStructure.ADC_ConversionPrescaler = 7;

ADC_InitStructure.ADC_FirstChannel = ADC_CHANNEL14; ADC_InitStructure.ADC_ChannelNumber = 1; ADC_Init(&ADC_InitStructure);

ADC_ITConfig(ADC_IT_EOC, ENABLE); ADC_Cmd(ENABLE);

ADC_ConversionCmd(ADC_Conversion_Start);

UART_InitStructure.UART_WordLength = UART_WordLength_8D; UART_InitStructure.UART_StopBits = UART_StopBits_1; UART_InitStructure.UART_Parity = UART_Parity_Odd ; UART_InitStructure.UART_BaudRate = 115200; UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None;

UART_InitStructure.UART_Mode = UART_Mode_Tx; UART_InitStructure.UART_FIFO = UART_FIFO_Enable; UART_Init(UART0, &UART_InitStructure); UART_Cmd(UART0, ENABLE); Display(14,1); while(1) {

Display(ADC10,0); Display(ADC1,1); } }

void MRCC_Configuration(void) {

MRCC_DeInit();

OSC4MStartUpStatus01 = MRCC_WaitForOSC4MStartUp(); if(OSC4MStartUpStatus01 == SUCCESS) {

MRCC_HCLKConfig(MRCC_CKSYS_Div1); MRCC_CKTIMConfig(MRCC_HCLK_Div1); MRCC_PCLKConfig(MRCC_CKTIM_Div2);

CFG_FLASHBurstConfig(CFG_FLASHBurst_Enable);

MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15); }

MRCC_IOVoltageRangeConfig(MRCC_IOVoltageRange_3V3);

MRCC_PeripheralClockConfig(MRCC_Peripheral_GPIO, ENABLE); MRCC_PeripheralClockConfig(MRCC_Peripheral_ADC, ENABLE); MRCC_PeripheralClockConfig(MRCC_Peripheral_TIM0, ENABLE); MRCC_PeripheralClockConfig(MRCC_Peripheral_UART0, ENABLE); }

void GPIO_Configuration(void) {

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_1; GPIO_Init(GPIO0,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_9 | GPIO_Pin_8 | GPIO_Pin_7 | GPIO_Pin_6 | GPIO_Pin_5 | GPIO_Pin_4 | GPIO_Pin_3; GPIO_Init(GPIO1, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_Init(GPIO0,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_Init(GPIO1,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_Init(GPIO0, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_Init(GPIO0, &GPIO_InitStructure); }

void Display(u8 Digit,u8 position) {

u16 i;

GPIO0->PD &= 0xFFF0; Digit &= 0x0F;

GPIO_Write(GPIO1, DigitTab[Digit]);

if (position == 0)

GPIO0->PD |= 0x0004; // P02= COMM of digit 10 else

GPIO0->PD |= 0x0002; // P01= COMM of digit 1 for(i=0; i<0x100; i++); }

void EIC_Configuration(void) {

EIC_IRQInitTypeDef EIC_IRQInitStructure;

EIC_IRQInitStructure.EIC_IRQChannel = TIM0_UP_IRQChannel;

EIC_IRQInitStructure.EIC_IRQChannelPriority = 3;

EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit(&EIC_IRQInitStructure);

EIC_IRQInitStructure.EIC_IRQChannel = ADC_IRQChannel; EIC_IRQInitStructure.EIC_IRQChannelPriority = 10; EIC_IRQInit(&EIC_IRQInitStructure); EIC_IRQCmd(ENABLE); }

3.通用定时器计数子程序:

#include \

TB_InitTypeDef TB_InitStructure; ErrorStatus OSC4MStartUpStatus; void MRCC_Configuration(void); void EIC_Configuration(void); void main() {

#ifdef DEBUG debug(); #endif

MRCC_Configuration(); GPIO_Configuration(); EIC_Configuration();

TB_InitStructure.TB_Mode = TB_Mode_Timing;

TB_InitStructure.TB_ClockSource = TB_ClockSource_CKTIM;

TB_InitStructure.TB_Prescaler = 239; TB_InitStructure.TB_CounterMode = TB_CounterMode_Up;

TB_InitStructure.TB_AutoReload = 999; TB_Init(&TB_InitStructure);

TB_ITConfig(TB_IT_Update, ENABLE); TB_Cmd(ENABLE); while(1); }

void MRCC_Configuration(void) {

MRCC_DeInit();

OSC4MStartUpStatus = MRCC_WaitForOSC4MStartUp(); if(OSC4MStartUpStatus == SUCCESS) {

MRCC_HCLKConfig(MRCC_CKSYS_Div1); MRCC_CKTIMConfig(MRCC_HCLK_Div1); MRCC_PCLKConfig(MRCC_CKTIM_Div2);

CFG_FLASHBurstConfig(CFG_FLASHBurst_Enable);

MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15);

}

MRCC_IOVoltageRangeConfig(MRCC_IOVoltageRange_3V3);

MRCC_PeripheralClockConfig(MRCC_Peripheral_TB | MRCC_Peripheral_GPIO, ENABLE); }

void EIC_Configuration(void) {

EIC_IRQInitTypeDef EIC_IRQInitStructure;

EIC_IRQInitStructure.EIC_IRQChannel = TB_IRQChannel; EIC_IRQInitStructure.EIC_IRQChannelPriority = 1;

EIC_IRQInitStructure.EIC_IRQChannelCmd = ENABLE; EIC_IRQInit(&EIC_IRQInitStructure); EIC_IRQCmd(ENABLE); }

4.流水灯子程序:

#include \

GPIO_InitTypeDef GPIO_InitStructure; ErrorStatus OSC4MStartUpStatus; void MRCC_Configuration(void); static void Delay(u32 nCount); u32 a=0; int main() {

#ifdef DEBUG debug(); #endif

MRCC_Configuration();

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 |GPIO_Pin_12 | GPIO_Pin_13 ;

GPIO_Init(GPIO0, &GPIO_InitStructure);

GPIO_PinMaskConfig(GPIO0, ~(GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_12| GPIO_Pin_13), ENABLE);

GPIO_Write(GPIO0, 0x00); while(1) {

GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_SET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_RESET); Delay(0xffFFF);

GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_SET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_RESET); Delay(0xfFFFF);

GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_SET); Delay(0xfFFFF);

GPIO_WriteBit(GPIO0, GPIO_Pin_8, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_9, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_12, Bit_RESET); GPIO_WriteBit(GPIO0, GPIO_Pin_13, Bit_SET); Delay(0xfFFFF); } }

void MRCC_Configuration(void) {

MRCC_DeInit();

OSC4MStartUpStatus = MRCC_WaitForOSC4MStartUp();

if(OSC4MStartUpStatus == SUCCESS) {

MRCC_HCLKConfig(MRCC_CKSYS_Div2); MRCC_CKTIMConfig(MRCC_HCLK_Div2); MRCC_PCLKConfig(MRCC_CKTIM_Div1);

MRCC_CKSYSConfig(MRCC_CKSYS_OSC4MPLL, MRCC_PLL_Mul_15); }

MRCC_IOVoltageRangeConfig(MRCC_IOVoltageRange_3V3);

MRCC_PeripheralClockConfig(MRCC_Peripheral_GPIO, ENABLE); }

static void Delay(u32 nCount) {

u32 j = 0;

for(j = nCount; j != 0; j--); }

4. 中断服务子程序:

#include \

u8 pit=0,con=0,biao=0;

void USART1_IRQHandler(void) {

char che;

DisableInterrupts; / che = uart_getchar (UART1);

printf(\你发送的字符为: %c\\n\\n\

con=che;

EnableInterrupts; } #if 1

void PIT0_IRQHandler(void) {

LED_turn(LED1); PIT_Flag_Clear(PIT0); pit=1; } #else

extern u32 test_time;

void PIT0_IRQHandler(void) {

test_time++;

PIT_Flag_Clear(PIT0); }

#endif

void PORTA_IRQHandler() {

u8 n=0; n = 19;

if(PORTA_ISFR & (1 << n)) {

PORTA_ISFR |= (1 << n); con='0';

if (biao) printf(\关闭功能2\\n\ } n = 26;

if(PORTA_ISFR & (1 << n)) {

PORTA_ISFR |= (1 << n); con='2';printf(\开启功能2\\n\ biao=1;

//LED_turn(LED1); } }

5. 主程序:

/

#include \ void display( u16 result ); extern u8 con,pit,biao;

u8 dis_code[12]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,

0x7D,0x07,0x7F,0x6F,0x80,0xFF }; void main() {

char ch;

u8 ADresult,conn,i,j; u16 count; DisableInterrupts; LED_INIT();

pit_init_ms(PIT0,200); uart_init (UART1, 115200); adc_init (ADC0, SE17); gpio_init (PORTB,20,GPO,1); gpio_init (PORTB,21,GPO,1); gpio_init (PORTB,22,GPO,1); gpio_init (PORTB,23,GPO,1); exti_init(PORTA,26,rising_down); exti_init(PORTA,19,rising_down); for(i = 0;i< 8;i++) {

gpio_init (PORTD,i,GPO,1); }

EnableInterrupts ; disable_irq(68);

uart_irq_EN (UART1);

printf(\请输入控制字节: \\n\

while(1) {

if(conn!=con) {count=0;disable_irq(68);} conn=con; switch(conn)

{ case '1':printf(\串口回显功能\\n\ ch=uart_getchar(UART1);

printf(\你发送的字符为: %c\\n\\n\ break;

case '2':if(j==1) printf(\采样传送功能\\n\

ADresult=ad_ave(ADC0 ,SE17, ADC_8bit , 3);j++; if(con=='2'&&j>100)

{j=0; printf(\结果为 :%d\\n\\n\ display(ADresult); break;

case '3':printf(\延时计数\\n\

delayms(400);count++;LED_turn(LED1);display(count); printf(\延时计数结果为 :%d\\n\\n\ break;

case '4':enable_irq(68);

if(pit) {printf(\定时器计数\\n\

printf(\定时计数结果为 :%d\\n\\n\ break;

case '5': printf(\流水灯功能\\n\ water_lights();break;

case '6': printf(\中断功能\\n\ delayms(500);break; } } }

void display( u16 result ) {

u8 qian=0,shi=0,ge=0,bai=0; qian=result/1000;

bai=(result-qian*1000)/100;

shi=(result-qian*1000-bai*100)/10; ge=result-qian*1000-bai*100-shi*10;

GPIO_SET_8bit(PORTD,0,1);

GPIO_SET_8bit(PORTD,0,dis_code[qian]); gpio_set(PORTB,20,0); delayms(1);

gpio_set(PORTB,20,1);

GPIO_SET_8bit(PORTD,0,1);

GPIO_SET_8bit(PORTD,0,dis_code[bai]); gpio_set(PORTB,21,0); delayms(1);

gpio_set(PORTB,21,1);

GPIO_SET_8bit(PORTD,0,1);

GPIO_SET_8bit(PORTD,0,dis_code[shi]); gpio_set(PORTB,22,0); delayms(1);

gpio_set(PORTB,22,1);

GPIO_SET_8bit(PORTD,0,1);

GPIO_SET_8bit(PORTD,0,dis_code[ge]); gpio_set(PORTB,23,0); delayms(1);

gpio_set(PORTB,23,1); }

本文来源:https://www.bwwdw.com/article/g6i3.html

Top