Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53937
  • 博文数量: 18
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-10-23 10:35
文章存档

2016年(1)

2012年(7)

2011年(10)

分类: C/C++

2011-07-29 20:29:28

  1. /************STC12C5A60S2 12MHz***********************/
  2. #include<reg52.h>
  3. #include<intrins.h>                    
  4. sbit MISO=P2^4;//主机输入 DOUT
  5. sbit CS=P2^5;//片选信号
  6. sbit SCLK=P2^6;//CLOCK
  7. sbit MOSI=P2^7;//主机输出 DIN
  8. unsigned int dat;

  9. void delayms(unsigned int z) //延时Z MS子函数     //MCU STC12C5A60S2 12MHZ
  10. {
  11.     unsigned int x,y;
  12.     for(x=z;x>0;x--)
  13.         for(y=915;y>0;y--);    
  14. }

  15. void delay2us()
  16. {
  17.     _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  18. }


  19. ///发送一个字节,有高位开始发送,数据往高位移动
  20. void SPI_sendbyte()
  21. {    
  22.     unsigned int ch;
  23.     unsigned char n=12;
  24.     ch=dat;
  25.     CS=1;
  26.     delay2us();delay2us();
  27.     CS=0;
  28.     SCLK=0;
  29.     while(n--)     //发送12位,可改变了N
  30.     {
  31.         if((ch&0x0800)==0x0800) MOSI=1; //若发送的数据最高位为1,则发送1
  32.         else MOSI=0;      //否则发送0
  33.         delay2us();delay2us();        
  34.         SCLK=0;
  35.         delay2us();    delay2us();
  36.         SCLK=1;
  37.         ch=ch<<1;//数据左移一位
  38.     }
  39.     CS=1;
  40. }
  41. ///////接收一个字节子程序,数据从低位开始接收,数据右移
  42. //unsigned char SPI_recbyte()
  43. //{
  44. //    unsigned char n=12;
  45. //    unsigned long int tdata;
  46. //    
  47. //    SCLK=1;
  48. //    Delay_nop();
  49. //    CS=0;
  50. //    Delay_nop();
  51. //    while(n--)
  52. //    {
  53. //        Delay_nop();
  54. //        SCLK=0;
  55. //        Delay_nop();
  56. //        tdata=tdata<<1;
  57. //        if(MISO==1)
  58. //        {
  59. //            tdata=tdata|0x01;
  60. //        }
  61. //        else tdata=tdata&0x0ffe;
  62. //        SCLK=1;
  63. //        Delay_nop();        
  64. //    }
  65. //    CS=1;
  66. //    Delay_nop();
  67. //    return(tdata);
  68. //}
  69. //void DelayMs(unsigned int z)
  70. //{
  71. //    unsigned int x,y;
  72. //    for(x=z;x>0;x--)
  73. //        for(y=110;y>0;y--);
  74. //}
  75. //void Init_max531()
  76. //{
  77. //    MISO=1;
  78. //    SCLK=1;
  79. //    CS=1;
  80. //}

  81. void key_dat()
  82. {
  83.   unsigned char key;
  84.   key=P3;
  85.    switch(key)
  86.    {
  87.        case 0xfe: dat=dat+500;break;
  88.       case 0xfd: dat=dat+100;break;
  89.     case 0xfb: dat=dat+50;break;
  90.     case 0xf7: dat=dat+10;break;
  91.     default: dat=0;
  92.     }
  93. }
  94. void main()
  95. {
  96. while(1)
  97. {
  98.     if(P3!=0xff)
  99.     {
  100.          delayms(100);
  101.      if(P3!=0xff)
  102.      {
  103.          key_dat();    
  104.          SPI_sendbyte();
  105.      }
  106.     }
  107. }        
  108. }
阅读(1836) | 评论(0) | 转发(0) |
0

上一篇:MAX531 AVR驱动程序

下一篇:AD9850信号源

给主人留下些什么吧!~~