找回密码
 注册

QQ登录

只需一步,快速开始

搜索

DES加密在STC12C56单片机中实现程序

[复制链接]
coolfire 发表于 2021-6-5 01:10:54 | 显示全部楼层 |阅读模式
在STC12C56,直接下就可以使用
  1. #include "STC12C56.h"
  2. #include <stdio.h>
  3. #include "TM1620.H"
  4. #include "des.h"

  5. #define FOSC 11059200L      //System frequency
  6. #define BAUD 57600           //UART baudrate

  7. unsigned char code key_tab[]={0x05,0x51,0x80,0x01,0x05,0x51,0xFf,0xFF};   //密钥
  8. unsigned char code plain_tab[]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};  //明文
  9. uint times=0;
  10. uchar RxdBuff[8];
  11. uchar Uart_DES = 0;
  12. uchar n;

  13. void UartInit(void)                //57600bps@11.0592MHz,开启波特率倍速
  14. {
  15.         PCON |= 0x80;                //使能波特率倍速位SMOD
  16.         SCON = 0x50;                //8位数据,可变波特率
  17.         AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
  18.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  19.         TMOD &= 0x0F;                //清除定时器1模式位
  20.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  21.         TL1 = 0xFF;                //设定定时初值
  22.         TH1 = 0xFF;                //设定定时器重装值
  23.         ET1 = 0;                //禁止定时器1中断
  24.         TR1 = 1;                //启动定时器1

  25.         ES = 1;                 //Enable UART interrupt
  26.         EA = 1;                 //Open master interrupt switch
  27. }
  28. void Delay200ms()                //@11.0592MHz
  29. {
  30.         unsigned char i, j, k;

  31.         i = 9;
  32.         j = 104;
  33.         k = 139;
  34.         do
  35.         {
  36.                 do
  37.                 {
  38.                         while (--k);
  39.                 } while (--j);
  40.         } while (--i);
  41. }

  42. void main()
  43. {
  44.         unsigned char cipher1[8];        //密文缓存

  45.         UartInit();
  46.                 Display_num(1,BAUD/10000%10,0);
  47.                 Display_num(2,BAUD/1000%10,0);
  48.                 Display_num(3,BAUD/100%10,0);
  49.                 Display_num(4,BAUD/10%10,0);
  50.                 Display_num(5,BAUD%10,0);
  51.         Delay200ms();
  52.         Delay200ms();
  53.         Init_TM1620();      
  54.       
  55.         des(plain_tab, key_tab, 1, cipher1);

  56.         ES = 0;
  57.         for(n=0;n<8;n++)
  58.         {
  59.                 SBUF=cipher1[n];   //回应发送者以成功接收
  60.                 while(!TI);                       
  61.                 TI = 0;      //手动清零发送中断标志位
  62.         }
  63.       
  64.         ES = 1;

  65.         while(1)
  66.         {

  67.                 times++;
  68.                 if (times%10==0)
  69.                         Display_Bit(1,0x80);
  70.         else  
  71.                         Display_Bit(1,0x00);

  72.                 if(Uart_DES == 1)
  73.                 {
  74.                         Uart_DES = 0;
  75.                 }
  76.         }
  77. }

  78. void Uart_Isr() interrupt 4
  79. {
  80.         ES = 0;
  81.         if(SBUF==0xA5)
  82.         {
  83.                 // uchar n;
  84.                 RI=0;
  85.                 // while(!RI);
  86.                 // RI=0;
  87.                 //Uart_len=SBUF;  //接收数据长度
  88.                 Uart_DES = 1;
  89.                 for(n=0;n<8;n++)  //开始接收数据
  90.                         {
  91.                                 while(!RI);
  92.                                 RI=0;
  93.                                 RxdBuff[n]=SBUF;
  94.                         }
  95.                 for(n=0;n<8;n++)
  96.                 {
  97.                         SBUF=RxdBuff[n];   //回应发送者以成功接收
  98.                         while(!TI);                       
  99.                         TI = 0;      //手动清零发送中断标志位
  100.                 }
  101.     }                       
  102.         else{
  103.                 SBUF=0x0E;   //回应发送者接收失败
  104.                 while(!TI);                       
  105.                 TI = 0;                  
  106.                 RI=0;  
  107.         }      
  108.         ES=1;
  109. }

  110. #include "STC12C56.h"
  111. #include <stdio.h>
  112. #include "TM1620.H"
  113. #include "des.h"

  114. #define FOSC 11059200L      //System frequency
  115. #define BAUD 57600           //UART baudrate

  116. unsigned char code key_tab[]={0x05,0x51,0x80,0x01,0x05,0x51,0xFf,0xFF};   //密钥
  117. unsigned char code plain_tab[]={0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88};  //明文
  118. uint times=0;
  119. uchar RxdBuff[8];
  120. uchar Uart_DES = 0;
  121. uchar n;

  122. void UartInit(void)                //57600bps@11.0592MHz,开启波特率倍速
  123. {
  124.         PCON |= 0x80;                //使能波特率倍速位SMOD
  125.         SCON = 0x50;                //8位数据,可变波特率
  126.         AUXR &= 0xBF;                //定时器1时钟为Fosc/12,即12T
  127.         AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
  128.         TMOD &= 0x0F;                //清除定时器1模式位
  129.         TMOD |= 0x20;                //设定定时器1为8位自动重装方式
  130.         TL1 = 0xFF;                //设定定时初值
  131.         TH1 = 0xFF;                //设定定时器重装值
  132.         ET1 = 0;                //禁止定时器1中断
  133.         TR1 = 1;                //启动定时器1

  134.         ES = 1;                 //Enable UART interrupt
  135.         EA = 1;                 //Open master interrupt switch
  136. }
  137. void Delay200ms()                //@11.0592MHz
  138. {
  139.         unsigned char i, j, k;

  140.         i = 9;
  141.         j = 104;
  142.         k = 139;
  143.         do
  144.         {
  145.                 do
  146.                 {
  147.                         while (--k);
  148.                 } while (--j);
  149.         } while (--i);
  150. }

  151. void main()
  152. {
  153.         unsigned char cipher1[8];        //密文缓存

  154.         UartInit();
  155.                 Display_num(1,BAUD/10000%10,0);
  156.                 Display_num(2,BAUD/1000%10,0);
  157.                 Display_num(3,BAUD/100%10,0);
  158.                 Display_num(4,BAUD/10%10,0);
  159.                 Display_num(5,BAUD%10,0);
  160.         Delay200ms();
  161.         Delay200ms();
  162.         Init_TM1620();      
  163.       
  164.         des(plain_tab, key_tab, 1, cipher1);

  165.         ES = 0;
  166.         for(n=0;n<8;n++)
  167.         {
  168.                 SBUF=cipher1[n];   //回应发送者以成功接收
  169.                 while(!TI);                       
  170.                 TI = 0;      //手动清零发送中断标志位
  171.         }
  172.       
  173.         ES = 1;

  174.         while(1)
  175.         {

  176.                 times++;
  177.                 if (times%10==0)
  178.                         Display_Bit(1,0x80);
  179.         else  
  180.                         Display_Bit(1,0x00);

  181.                 if(Uart_DES == 1)
  182.                 {
  183.                         Uart_DES = 0;
  184.                 }
  185.         }
  186. }

  187. void Uart_Isr() interrupt 4
  188. {
  189.         ES = 0;
  190.         if(SBUF==0xA5)
  191.         {
  192.                 // uchar n;
  193.                 RI=0;
  194.                 // while(!RI);
  195.                 // RI=0;
  196.                 //Uart_len=SBUF;  //接收数据长度
  197.                 Uart_DES = 1;
  198.                 for(n=0;n<8;n++)  //开始接收数据
  199.                         {
  200.                                 while(!RI);
  201.                                 RI=0;
  202.                                 RxdBuff[n]=SBUF;
  203.                         }
  204.                 for(n=0;n<8;n++)
  205.                 {
  206.                         SBUF=RxdBuff[n];   //回应发送者以成功接收
  207.                         while(!TI);                       
  208.                         TI = 0;      //手动清零发送中断标志位
  209.                 }
  210.     }                       
  211.         else{
  212.                 SBUF=0x0E;   //回应发送者接收失败
  213.                 while(!TI);                       
  214.                 TI = 0;                  
  215.                 RI=0;  
  216.         }      
  217.         ES=1;
  218. }


复制代码
1.png

2.png

完整源码下载: des_code.zip (120.43 KB, 售价: 2 E币)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-12-22 10:51

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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