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

📄 main.c

📁 MSP430子程序集
💻 C
字号:

//功能:PC机先发送一字节数据给单片机单片机在把原数据发送给PC机 波特率为19200
#include "msp430x14x.h"
#define   SHUMA_PORT_DIR  P5DIR//数码管数据口
#define   SHUMA_PORT_OUT  P5OUT
#define   SHUMA_1_LOW     P6OUT&=~BIT6//开数码管的第一位P6.6口控制数码管的第一位
#define   SHUMA_1_HIGH    P6OUT|=BIT6//灭第一位数码管
#define   SHUMA_2_LOW     P6OUT&=~BIT5//开数码管的第二位
#define   SHUMA_2_HIGH    P6OUT|=BIT5//灭数码管的第二位
#define   SHUMA_3_LOW     P6OUT&=~BIT4//开数码管的第三位
#define   SHUMA_3_HIGH    P6OUT|=BIT4//灭数码管的第三位
#define   SHUMA_4_LOW     P6OUT&=~BIT0//开数码管的第四位
#define   SHUMA_4_HIGH    P6OUT|=BIT0//灭数码管的第四位
void int_clk();//出使化时钟函数声明
void int_usart();//串口初始化
void sent_byte(unsigned char);//
void delay_us(unsigned int i);//2.5微妙延时程序
void shumaguan_xianshi();
const unsigned char tabl1[11]={0xa0,0xbb,0x62,0x2a,0x39,0x2c,0x24,0xba,0X20,0x38,0xff};
                // ;0  ,1   ,2   ,3  , 4,   5,   6    ,7   ,8  ,9 ,灭}数码管段码表

static unsigned int DISPLAY=0;
static unsigned char data=0;
//2.5微秒延时程序
void delay_us(unsigned int i)//delay 2.5us at 8M
{  
   unsigned int ii;
   for(ii =i;ii > 0;ii--)
   { 
      _NOP();_NOP();_NOP();_NOP();   
      _NOP();_NOP();_NOP();_NOP();
      _NOP();_NOP();_NOP();_NOP();
      _NOP();_NOP();_NOP();_NOP();       
   }    
}
void shumaguan_xianshi()
{
   unsigned int DISPLAY1;//=0x00;
   unsigned int DISPLAY2;//=0X01;
   unsigned int DISPLAY3;//=0X02;
   unsigned int DISPLAY4;//=0X03;
   DISPLAY2=DISPLAY/100%10;
   DISPLAY1=DISPLAY/1000%10;
   DISPLAY3=DISPLAY/10%10;
   DISPLAY4=DISPLAY%10;
   //以下是数码管的动态扫描程序
   SHUMA_PORT_OUT=tabl1[DISPLAY1];//求取BCD码对应的数码管段码,并送到控制数码管的数据扣
   SHUMA_1_LOW;//开第一位数码管
   delay_us(1000);//简单延时
   SHUMA_1_HIGH;//灭第一位数码管
   SHUMA_PORT_OUT=tabl1[DISPLAY2];//送数码管第二位显示的段码
   SHUMA_2_LOW;//开显示第二位数码管
   delay_us(1000);//延时
   SHUMA_2_HIGH;//灭第二位数码管,接下去重复1二
   SHUMA_PORT_OUT=tabl1[DISPLAY3];
   SHUMA_3_LOW;
   delay_us(1000);
   SHUMA_3_HIGH;
   SHUMA_PORT_OUT=tabl1[DISPLAY4];
   SHUMA_4_LOW;
   delay_us(1000);
   SHUMA_4_HIGH;
}
#pragma vector=UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  data=U0RXBUF;//读取接收到的数据
  DISPLAY=data;
  sent_byte(data);//发向PC机
}  
void sent_byte(unsigned char data)
{
  while((IFG1 & UTXIFG0)==0);//判断发送是否结束
  U0TXBUF=data;
}  
void int_usart()
{
  U0CTL|=SWRST;//复位串口
  U0CTL|=CHAR;//选择8位数据
  U0TCTL|=SSEL1;//SELECT SMCLK AS USART CLK
  U0BR0=0XA0;
  U0BR1=0X01;
  UMCTL0=0XC0;//设置波特率为19200
  ME1|=UTXE0+URXE0;//使能中接收和发送
  U0CTL&=~SWRST;//清除串口复位信号
  IE1|=URXIE0;//使能接收中断
  P3SEL|=BIT4;
  P3SEL|=BIT5;//设置I0口为第二功能
  P3DIR|=BIT4;
}  
void int_clk()
{
  unsigned char i;
  BCSCTL1&=~XT2OFF;//打开XT震荡器
  BCSCTL2|=SELM1+SELS;//mclk=smlk=8MHz
  do
  {
   IFG1&=~OFIFG;//清除震荡错误标志
   for(i=0;i<100;i++)_NOP();
  }while((IFG1& OFIFG)!=0);  
  IFG1&=~OFIFG;
}  
         
int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;// Stop watchdog timer to prevent time out reset
  int_clk();
  SHUMA_PORT_DIR|=0XFF;//set P5 is out  设置控制数码管数据口的IO口为输出模式
  P6DIR|=BIT0+BIT4+BIT5+BIT6;
  P3DIR|=BIT0;//P3.0控制74HC573的OE,把这个口设置为输出
  P3OUT&=~BIT0;//使能74573,使得74573的输出随输入变化
  int_usart();//串口初始化
  _EINT();
  for(;;)
  {
   shumaguan_xianshi();  //调用显示程序
  }  
}


⌨️ 快捷键说明

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