找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5724|回复: 5
收起左侧

公交车报站系统在proteus上仿真 原理图 源程序

[复制链接]
ID:127642 发表于 2016-6-22 10:35 | 显示全部楼层 |阅读模式
公交车报站系统的仿真,msp430f2272为中央处理器的键盘扫描,led驱动,7段数码管的控制。isd1420的驱动在proteus仿真的原理图,以及源程序。

0.png

单片机代码:
  1. /* Main.c file generated by New Project wizard
  2. *
  3. * Created:   周一 六月 20 2016
  4. * Processor: MSP430F2272
  5. * Compiler:  CodeComposer for MSP430
  6. */

  7. #include <msp430.h>

  8. void main()
  9. { #include <msp430f2272.h>
  10. #define CPU_F ((double)8000000)
  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. void Clock_Init()
  14.         {
  15.                         unsigned char i;
  16.                         BCSCTL1&=~XT2OFF;                 //打开XT2振荡器
  17.                         BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ
  18.                  do
  19.                 {
  20.                          IFG1&=~OFIFG;                   //清除振荡器错误标志
  21.                          for(i=0;i<100;i++)
  22.                                  _NOP();
  23.                 }
  24.                  while((IFG1&OFIFG)!=0);           //如果标志位1,则继续循环等待
  25.                          IFG1&=~OFIFG;

  26.         }


  27. int main(void)
  28. {
  29.         WDTCTL = WDTPW + WDTHOLD;
  30.         Clock_Init();

  31.         P1REN|=0xff;          //按键初始化
  32.         P1OUT |=0xff;

  33.         P2DIR |= 0x0F;                //控制端口初始化
  34.         P2OUT |= BIT0+BIT1+BIT2;


  35.         P3DIR |= 0xff;                        //LED控制端口

  36.         P4DIR |= 0xff;                        //语音地址端口初始化

  37.     unsigned int dz1[]={0x50,0x48};
  38.     unsigned  int dz2[]={0x60};
  39.     unsigned  int dz3[]={0x68};
  40.     unsigned  int dz4[]={0x88};
  41.     unsigned  int dz5[]={0x70};
  42.     unsigned  int dz6[]={0x58};
  43.     unsigned  int dz7[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40};

  44.     unsigned int counter1=0;          // ISD地址计数器
  45.     unsigned int temp;

  46.     unsigned int flag = 0;                //正反选择标志
  47.     unsigned int counter3 = 0;        //正反计数器

  48.     unsigned int buff2[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
  49.     unsigned int counter2=0 ;         // LED地址计数器
  50.         P3OUT = buff2[counter2];

  51.         unsigned int counter4=0;        //录音计数器
  52. while(1)
  53. {
  54.         if ((P1IN & BIT0) == 0)          // 录音模式
  55.                 {
  56.                         P2OUT&=~BIT0 ;
  57.                         counter4++;
  58.                         if(counter4<=14)
  59.                                 {
  60.                                         delay_ms(999);
  61.                                         P2OUT |= BIT0;
  62.                                 }
  63.                         if(counter4>14)
  64.                                 {
  65.                                         delay_ms(2999);
  66.                                           P2OUT |= BIT0;
  67.                                 }
  68.                         while(((P1IN & BIT0) == 0) );
  69.                  }

  70.         while ((P1IN & BIT1) == 0)          // 放音模式
  71.                 {       
  72.                         while((flag==0)&((P1IN & BIT1) == 0))
  73.                                 {
  74.                                         if ((P1IN&BIT3)==0)          // 报站
  75.                                                 {
  76.                                                         pl1:
  77.                                                         P3OUT|=BIT7;
  78.                                                         counter2++;
  79.                                                         P3OUT = buff2[counter2]+BIT7;
  80.                                                         if(counter1==0)
  81.                                                                 {
  82.                                                                         P2OUT&=~BIT1;
  83.                                                                         P4OUT=dz1[0];
  84.                                                                         delay_ms(1000);

  85.                                                                         P2OUT&=~BIT1;
  86.                                                                         P4OUT = dz7[0];
  87.                                                                         delay_ms(1000);

  88.                                                                         P2OUT&=~BIT1;
  89.                                                                         P4OUT = dz2[0];
  90.                                                                         delay_ms(1000);

  91.                                                                         P2OUT&=~BIT1;
  92.                                                                         P4OUT = dz7[1];
  93.                                                                         delay_ms(1000);

  94.                                                                         P2OUT&=~BIT1;
  95.                                                                         P4OUT = dz3[3];
  96.                                                                         delay_ms(1000);

  97.                                                                         P2OUT&=~BIT1;
  98.                                                                         P4OUT = dz7[1];
  99.                                                                         delay_ms(1000);

  100.                                                                         P2OUT&=~BIT1;
  101.                                                                         P4OUT = dz4[0];
  102.                                                                         delay_ms(3000);
  103.                                                                         P2OUT&=~BIT1 ;
  104.                                                                 }
  105.                                                         if((8!=counter1)&(0!=counter1))
  106.                                                                 {
  107.                                                                         P2OUT&=~BIT1;
  108.                                                                         P4OUT=dz7[counter1];
  109.                                                                         delay_ms(1000);

  110.                                                                         P2OUT&=~BIT1;
  111.                                                                         P4OUT = dz6[0];
  112.                                                                         delay_ms(1000);

  113.                                                                         P2OUT&=~BIT1;
  114.                                                                         P4OUT = dz5[0];
  115.                                                                         delay_ms(3000);

  116.                                                                         P2OUT&=~BIT1;
  117.                                                                         P4OUT = dz2[0];
  118.                                                                         delay_ms(1000);

  119.                                                                         counter1++;
  120.                                                                         temp = counter1;
  121.                                                                         counter1--;

  122.                                                                         P2OUT&=~BIT1;
  123.                                                                         P4OUT = dz7[temp];
  124.                                                                         delay_ms(1000);

  125.                                                                         P2OUT&=~BIT1;
  126.                                                                         P4OUT = dz3[3];
  127.                                                                         delay_ms(1000);

  128.                                                                         P2OUT&=~BIT1;
  129.                                                                         P4OUT = dz7[temp];
  130.                                                                         delay_ms(1000);

  131.                                                                         P2OUT&=~BIT1;
  132.                                                                         P4OUT = dz4[0];
  133.                                                                         delay_ms(3000);
  134.                                                                         P2OUT&=~BIT1 ;
  135.                                                                 }
  136.                                                         if(counter1==8)
  137.                                                                 {
  138.                                                                         P2OUT&=~BIT1;
  139.                                                                         P4OUT=dz1[1];
  140.                                                                         delay_ms(1000);

  141.                                                                         P2OUT&=~BIT1;
  142.                                                                         P4OUT=dz7[counter1];
  143.                                                                         delay_ms(1000);

  144.                                                                         P2OUT&=~BIT1;
  145.                                                                         P4OUT=dz6[0];
  146.                                                                         delay_ms(1000);

  147.                                                                         P2OUT&=~BIT1;
  148.                                                                         P4OUT = dz5[0];
  149.                                                                         delay_ms(3000);
  150.                                                                         P2OUT&=~BIT1 ;
  151.                                                                 }
  152.                                                         counter1++;
  153.                                                         while((P1IN&BIT3)==0);
  154.                                                         while((P1IN&BIT5)==0);
  155.                                                         P3OUT&=~BIT7;
  156.                                                 }

  157.                                         if ((P1IN & BIT4) == 0)          // 回退
  158.                                                 {
  159.                                                         counter1--;
  160.                                                         counter2--;
  161.                                                         P3OUT = buff2[counter2];
  162.                                                         while((P1IN&BIT4)==0);
  163.                                                 }

  164.                                         if ((P1IN & BIT5) == 0)          // 重复报站
  165.                                                 {
  166.                                                         P2OUT&=~BIT1;
  167.                                                         counter1--;
  168.                                                         counter2--;
  169.                                                         goto pl1;
  170.                                                 }

  171.                                         if ((P1IN & BIT6) == 0)          // 复位
  172.                                                 {
  173.                                                         counter1=0;
  174.                                                         counter2=0;
  175.                                                         P3OUT = buff2[counter2];
  176.                                                         while((P1IN&BIT6)==0);
  177.                                                 }

  178.                                         if ((P1IN & BIT2) == 0)          // 正反选择
  179.                                                 {
  180.                                                         counter3++;
  181.                                                         if((counter3%2)==0)
  182.                                                                 {
  183.                                                                         flag = 0;
  184.                                                                         P2OUT |=BIT2;
  185.                                                                         counter1=0;
  186.                                                                         counter2=0;
  187.                                                                 }
  188.                                                         if((counter3%2)==1)
  189.                                                                 {
  190.                                                                         flag = 1;
  191.                                                                         P2OUT &= ~BIT2;
  192.                                                                         counter1=8;
  193.                                                                         counter2=10;
  194.                                                                 }
  195.                                                         while((P1IN&BIT2)==0);
  196.                                                 }

  197.                         }
  198.                 while((flag==1)&((P1IN & BIT1) == 0))
  199.                         {
  200.                                 if ((P1IN&BIT3)==0)          // 报站
  201.                                         {
  202.                                                 pl2:
  203.                                                 P3OUT|=BIT7;
  204.                                                 counter2--;
  205.                                                 P3OUT = buff2[counter2]+BIT7;
  206.                                                 if(counter1==8)
  207.                                                         {
  208.                                                                 P2OUT&=~BIT1;
  209.                                                                 P4OUT = dz1[0];
  210.                                                                 delay_ms(1000);

  211.                                                                 P2OUT&=~BIT1;
  212.                                                                 P4OUT = dz7[8];
  213.                                                                 delay_ms(1000);

  214.                                                                 P2OUT&=~BIT1;
  215.                                                                 P4OUT = dz2[0];
  216.                                                                 delay_ms(1000);

  217.                                                                 P2OUT&=~BIT1;
  218.                                                                 P4OUT = dz7[1];
  219.                                                                 delay_ms(1000);

  220.                                                                 P2OUT&=~BIT1;
  221.                                                                 P4OUT = dz3[3];
  222.                                                                 delay_ms(1000);

  223.                                                                 P2OUT&=~BIT1;
  224.                                                                 P4OUT = dz7[7];
  225.                                                                 delay_ms(1000);

  226.                                                                 P2OUT&=~BIT1;
  227.                                                                 P4OUT = dz4[0];
  228.                                                                 delay_ms(3000);
  229.                                                                 P2OUT&=~BIT1 ;
  230.                                                         }
  231.                                                 if((1!=counter1) & (8!=counter1))
  232.                                                         {
  233.                                                         P2OUT&=~BIT1;
  234.                                                         P4OUT = dz7[counter1];
  235.                                                         delay_ms(1000);

  236.                                                         P2OUT&=~BIT1;
  237.                                                         P4OUT = dz6[0];
  238.                                                         delay_ms(1000);

  239.                                                         P2OUT&=~BIT1;
  240.                                                         P4OUT = dz5[0];
  241.                                                         delay_ms(3000);

  242.                                                         P2OUT&=~BIT1;
  243.                                                         P4OUT = dz2[0];
  244.                                                         delay_ms(1000);

  245.                                                         counter1--;
  246.                                                         temp = counter1;
  247.                                                         counter1++;

  248.                                                         P2OUT&=~BIT1;
  249.                                                         P4OUT = dz7[temp];
  250.                                                         delay_ms(1000);

  251.                                                         P2OUT&=~BIT1;
  252.                                                         P4OUT = dz3[3];
  253.                                                         delay_ms(1000);

  254.                                                         P2OUT&=~BIT1;
  255.                                                         P4OUT = dz7[temp];
  256.                                                         delay_ms(1000);

  257.                                                         P2OUT&=~BIT1;
  258.                                                         P4OUT = dz4[0];
  259.                                                         delay_ms(3000);
  260.                                                         P2OUT&=~BIT1 ;
  261.                                                 }
  262.                                         if(counter1==0)
  263.                                                 {
  264.                                                         P2OUT&=~BIT1;
  265.                                                         P4OUT = dz1[1];
  266.                                                         delay_ms(1000);

  267.                                                         P2OUT&=~BIT1;
  268.                                                         P4OUT = dz7[counter1];
  269.                                                         delay_ms(1000);

  270.                                                         P2OUT&=~BIT1;
  271.                                                         P4OUT = dz6[0];
  272.                                                         delay_ms(1000);

  273.                                                         P2OUT&=~BIT1;
  274.                                                         P4OUT = dz5[0];
  275.                                                         delay_ms(3000);
  276.                                                         P2OUT&=~BIT1 ;
  277.                                                 }

  278.                                         counter1--;
  279.                                         while((P1IN&BIT3)==0);
  280.                                         while((P1IN&BIT5)==0);
  281.                                         P3OUT&=~BIT7;
  282.                                 }

  283.                         if ((P1IN & BIT4) == 0)          // 回退
  284.                                 {
  285.                                         counter1++;
  286.                                         counter2++;
  287.                                         P3OUT = buff2[counter2];
  288.                                         while((P1IN&BIT4)==0);
  289.                                 }

  290.                         if ((P1IN & BIT5) == 0)          // 重复报站
  291.                                 {
  292.                                         P2OUT&=~BIT1;
  293.                                         counter1++;
  294.                                         counter2++;
  295.                                         goto pl2;
  296.                                 }

  297.                         if ((P1IN & BIT6) == 0)          // 复位
  298.                                 {
  299.                                         counter1=9;
  300.                                         counter2=0;
  301.                                         P3OUT = buff2[counter2];
  302.                                         counter2=10;
  303.                                         while((P1IN&BIT6)==0);
  304.                                 }

  305.                         if ((P1IN & BIT2) == 0)          // 正反选择
  306.                                 {
  307.                                         counter3++;
  308.                                         if((counter3%2)==0)
  309.                                                 {        flag = 0;
  310.                                                         P2OUT |= BIT2;
  311.                                                         counter1=0;
  312.                                                         counter2=0;
  313.                                                 }
  314.                                         if((counter3%2)==1)
  315.                                                 {
  316.                                                         flag = 1;
  317.                                                         P2OUT &= ~BIT2;
  318.                                                         counter1=8;
  319.                                                         counter2=10;
  320.                                                 }
  321.                                         while((P1IN&BIT2)==0);
  322.                                 }
  323.                         }
  324.                 }
  325. }
  326. }

  327. }
复制代码


proteus上键盘扫描.zip

70.24 KB, 下载次数: 109, 下载积分: 黑币 -5

仿真源程序,原理图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:157748 发表于 2016-12-27 22:48 | 显示全部楼层
没找到原理图
回复

使用道具 举报

ID:158453 发表于 2016-12-28 19:45 | 显示全部楼层
这个很感兴趣,好好学习一下
回复

使用道具 举报

ID:158453 发表于 2016-12-28 19:46 | 显示全部楼层
没有原理图不完整
回复

使用道具 举报

ID:362549 发表于 2018-7-1 15:53 | 显示全部楼层
原理图呢

回复

使用道具 举报

ID:699117 发表于 2020-2-29 19:22 | 显示全部楼层
要是51单片机的就好了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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