实验原理
ARM的P0.0口接LED,串口接Proteus的虚拟终端。每隔一段时间改变一次LED的状态,并且在串口上输出LED的当前状态。
Proteus仿真电路图
image.png
C语言源程序
#include <LPC21xx.H>
  • #include "uart.h"
  • #define CR 0x0D
  • char ledDown[]={"The LED is down!\n"};
  • char ledUp[]={"The LED is up!\n"};
  • int putchar (int ch)  {/* 向串口输出一个字符 */
  •   if (ch == '\n')  {
  •     while (!(U1LSR & 0x20));
  •     U1THR = CR;              a
  •   }
  •   while (!(U1LSR & 0x20));
  •   return (U1THR = ch);
  • }
  • void delay (void)  {                        
  •   unsigned volatile long i,j;
  •   for(i=0;i<60000;i++)
  •   for(j=0;j<5;j++)
  •   ;
  • }
  • void serialPuts(char *p){/* 向串口输出字符串 */
  •   while (*p != '\0'){
  •                 putchar(*p++);
  •   }
  • }
  • int main (void)  {
  • /* 开始初始化串口 */
  •   PINSEL0 = 0x00050000;/* 设置引脚,开串口功能 */
  •   U1LCR = 0x83;/* 8位数据,无效验,一个停止位 */
  •   U1DLL = 97;/* VPB 15MHz的时候波特率为9600 */
  •   U1LCR = 0x03;/* DLAB = 0 */
  • /* 结束初始化串口 */
  •   IO0DIR = 0x000001;/*将P0.0设置为输出 */
  •   while (1)  {
  •                 IO0CLR = 0x000001;
  •               serialPuts(ledUp);
  •               delay();
  •                 IO0SET = 0x000001;
  •               serialPuts(ledDown);
  •               delay();
  •   }
  • }     
  • 复制代码