找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3101|回复: 1
打印 上一主题 下一主题
收起左侧

用iar编译的mspg2553程序,74hc164驱动四段共阴管显示

[复制链接]
跳转到指定楼层
楼主
ID:111475 发表于 2016-3-30 19:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
74HC164数码管显示 msp430g2553IAR: 74HC164数码管显示.zip (164.57 KB, 下载次数: 10)

  1. #include"io430.h"
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define ulong unsigned long
  5. #define CLK0  P1OUT&=~BIT6
  6. #define CLK1   P1OUT|=BIT6
  7. #define hc_sr040  P1OUT&=~BIT4
  8. #define hc_sr041   P1OUT|=BIT4
  9. #define CPU_F ((double)1000000)   //外部高频晶振16MHZ
  10. //#define CPU_F ((double)32768)   //外部低频晶振32.768KHZ
  11. #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
  12. #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))

  13. unsigned char const code_hex[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x79,0x0e,0x3e};//0,1,2,3,4,5,6,7,8,9,c,e,j,u
  14. uchar t;
  15. uchar hc_sr04_cishu,hc_sr04_flag;
  16. uchar xianshi_flag;
  17. float hc_sr04_time;
  18. uint xishu;
  19. uchar dis_play[4]={10,11,12,13};
  20. void extern_16m()
  21. {
  22.   WDTCTL = WDTPW + WDTHOLD;
  23.     if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF)
  24.         {
  25.                 while(1);                // If calibration constants erased, trap CPU!!
  26.         }
  27. DCOCTL |= DCO0 + DCO1+DCO2;                                                                   //SMCLK选择LFXT1CLK
  28. // BCSCTL2 |= SELM_0;//MCLK采用1M的内部DCO   
  29. // BCSCTL2 |= DIVS_0;//SMCLK采用内部的时钟


  30. }

  31. void hc164_init()
  32. {
  33.   P1DIR |=BIT6+BIT7+BIT0+BIT1+BIT2+BIT3;                            // P1.0 output
  34.   
  35. }

  36. void hc_sr04()
  37. {
  38.   P1DIR |=BIT4;
  39.   P1DIR &=~BIT5;
  40.   P1IE |=0x20;            //上升沿触发
  41.   P1IES |=0x00;   
  42.   hc_sr04_flag=3;//默认准备发射状态  
  43. }
  44. void sendbyte(uchar byte)
  45. {            
  46. uchar c,num;   
  47. num=byte;
  48. for(c=0;c<8;c++)        
  49. {     
  50. P1OUT&=~0x80;
  51. CLK0;   
  52. P1OUT|=num&0x80; //(0x80即十进制的128, 二进制的10000000 按位发送
  53. CLK1;         
  54. num<<=1;   
  55. }
  56. }


  57. void send_char(uchar weizhi,uchar byte)
  58. {
  59.   
  60.   P1OUT |= 0x0f;   
  61.   uchar c,send_byte;
  62.   send_byte=code_hex[byte];
  63.   if((weizhi==0)&&(xianshi_flag==0))
  64.    send_byte|=0x80;
  65.   if((weizhi==1)&&(xianshi_flag==1))
  66.    send_byte|=0x80;
  67.   sendbyte(send_byte);
  68.   c=weizhi&0x03;
  69.   P1OUT&=~(1<<c);
  70. }



  71. void init_TA()
  72. {

  73.   TACCR0 = 5000;                            //4ms中断一次
  74.   TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode,8分频,
  75.   TACCTL0 = CCIE;                           // TACCR0 interrupt enabled
  76. }


  77. void shumaguan()
  78. {
  79.    ++t;
  80. if(t>=4)
  81.    t=0;
  82.   send_char(t,dis_play[t]);
  83. }

  84. #pragma vector=TIMER0_A0_VECTOR  
  85. __interrupt void TIMERA0_ISR() // the interrupt source is CC0
  86. {
  87. shumaguan();
  88.   hc_sr04_cishu++;
  89.   if(( hc_sr04_flag==3)&&(hc_sr04_cishu==100))//500ms测距一次
  90.   {
  91.      hc_sr041;
  92.      P1IE |=0x20;
  93.      delay_us(10);
  94.      hc_sr040;     
  95.   }
  96.   
  97.   if(hc_sr04_flag==2)
  98. {
  99.    float juli;
  100.    uint juli1;
  101.    juli=(float)(hc_sr04_time/5.8139);
  102.    juli1=(uint)(juli);
  103.    if(juli1<10000)
  104.    {
  105.      xianshi_flag=0;
  106.      dis_play[0]=(juli1/1000);
  107.      dis_play[1]=(juli1%1000/100);
  108.      dis_play[2]=(juli1%1000%100/10);
  109.      dis_play[3]=(juli1%10);
  110.    }
  111.    else
  112.    {
  113.      xianshi_flag=1;
  114.      dis_play[0]=(juli1/10000);
  115.      dis_play[1]=(juli1%10000/1000);
  116.      dis_play[2]=(juli1%10000%1000/100);
  117.      dis_play[3]=(juli1%10000%1000%100/10);
  118.    }
  119.    hc_sr04_flag=3;
  120.    hc_sr04_cishu=0;
  121.    
  122. }
  123. }

  124. #pragma vector =PORT1_VECTOR
  125. __interrupt void Port_1(void)
  126. {
  127. switch(P1IES&0x20)
  128. {
  129.    case 0:TAR=0;P1IES=0x20;hc_sr04_flag=1;hc_sr04_cishu=0;break;
  130. case 0x20:hc_sr04_time=5000*hc_sr04_cishu+TAR;P1IES=0;hc_sr04_flag=2;P1IE &=~0x20;break;
  131. }
  132. P1IFG=0;

  133. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:117823 发表于 2016-6-4 02:06 来自手机 | 只看该作者
这个和上个重复了,都是超声波测速的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表