• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

STC89C52RC芯片 高频DDS信号发生器AD9851信号源方波正弦波系统设计

武飞扬头像
Jonathan.sin
帮助1

【01】设计大致思路

一开始是使用按键进行频率输出数值的增加或者减少,后改进成使用EC11调节输出数值,使数值的输出更加顺滑流畅。

学新通

【02】参考资料

链接:https://pan.百度.com/s/1gz9DuRynFkpIcYw1fGyf6A?pwd=1111 
提取码:1111

【03】部分代码

AD9851.c

  1.  
    #include <AD9851.h>
  2.  
     
  3.  
    //*******************************************************************/
  4.  
    //功能:AD9851复位
  5.  
    //形参:无
  6.  
    //返回:无
  7.  
    //详解:AD9851复位(并口模式)
  8.  
    //*******************************************************************/
  9.  
    void ad9851_reset()
  10.  
    {
  11.  
    ad9851_w_clk=0;
  12.  
    ad9851_fq_up=0;
  13.  
    //rest信号
  14.  
    ad9851_rest=0;
  15.  
    ad9851_rest=1;
  16.  
    ad9851_rest=0;
  17.  
    }
  18.  
     
  19.  
    //*******************************************************************/
  20.  
    //功能:AD9851复位
  21.  
    //形参:无
  22.  
    //返回:无
  23.  
    //详解:AD9851复位(串口模式)
  24.  
    //*******************************************************************/
  25.  
    void ad9851_reset_serial()
  26.  
    {
  27.  
    ad9851_w_clk=0;
  28.  
    ad9851_fq_up=0;
  29.  
    //rest信号
  30.  
    ad9851_rest=0;
  31.  
    ad9851_rest=1;
  32.  
    ad9851_rest=0;
  33.  
    //w_clk信号
  34.  
    ad9851_w_clk=0;
  35.  
    ad9851_w_clk=1;
  36.  
    ad9851_w_clk=0;
  37.  
    //fq_up信号
  38.  
    ad9851_fq_up=0;
  39.  
    ad9851_fq_up=1;
  40.  
    ad9851_fq_up=0;
  41.  
    }
  42.  
     
  43.  
    //*******************************************************************/
  44.  
    //功能:向AD9851中写命令与数据
  45.  
    //形参:转移数据变量-->> w0;频率变量-->> frequence
  46.  
    //返回:无
  47.  
    //详解:向AD9851中写命令与数据(并口)
  48.  
    //*******************************************************************/
  49.  
    void ad9851_wr_parrel(unsigned char w0,double frequence)
  50.  
    {
  51.  
    unsigned char w;
  52.  
    long int y;
  53.  
    double x;
  54.  
    //计算频率的HEX值
  55.  
    x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)
  56.  
    //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
  57.  
    frequence=frequence/1000000;
  58.  
    frequence=frequence*x;
  59.  
    y=frequence;
  60.  
    //写w0数据
  61.  
    w=w0;
  62.  
    P1=w; //w0
  63.  
    ad9851_w_clk=1;
  64.  
    ad9851_w_clk=0;
  65.  
    //写w1数据
  66.  
    w=(y>>24);
  67.  
    P1=w; //w1
  68.  
    ad9851_w_clk=1;
  69.  
    ad9851_w_clk=0;
  70.  
    //写w2数据
  71.  
    w=(y>>16);
  72.  
    P1=w; //w2
  73.  
    ad9851_w_clk=1;
  74.  
    ad9851_w_clk=0;
  75.  
    //写w3数据
  76.  
    w=(y>>8);
  77.  
    P1=w; //w3
  78.  
    ad9851_w_clk=1;
  79.  
    ad9851_w_clk=0;
  80.  
    //写w4数据
  81.  
    w=(y>>=0);
  82.  
    P1=w; //w4
  83.  
    ad9851_w_clk=1;
  84.  
    ad9851_w_clk=0;
  85.  
    //移入始能
  86.  
    ad9851_fq_up=1;
  87.  
    ad9851_fq_up=0;
  88.  
    }
  89.  
     
  90.  
    //*******************************************************************/
  91.  
    //功能:向AD9851中写命令与数据
  92.  
    //形参:转移数据变量-->> w0;频率变量-->> frequence
  93.  
    //返回:无
  94.  
    //详解:向AD9851中写命令与数据(串口)
  95.  
    //*******************************************************************/
  96.  
    void ad9851_wr_serial(unsigned char w0,double frequence)
  97.  
    {
  98.  
    unsigned char i,w;
  99.  
    long int y;
  100.  
    double x;
  101.  
    //计算频率的HEX值
  102.  
    x=4294967295/180;//适合180M晶振/180为最终时钟频率(或30M六倍频)
  103.  
    //如果时钟频率不为180MHZ,修改该处的频率值,单位MHz !!!
  104.  
    frequence=frequence/1000000;
  105.  
    frequence=frequence*x;
  106.  
    y=frequence;
  107.  
    //写w4数据
  108.  
    w=(y>>=0);
  109.  
    for(i=0;i<8;i )
  110.  
    {
  111.  
    ad9851_bit_data=(w>>i)&0x01;
  112.  
    ad9851_w_clk=1;
  113.  
    ad9851_w_clk=0;
  114.  
    }
  115.  
    //写w3数据
  116.  
    w=(y>>8);
  117.  
    for(i=0;i<8;i )
  118.  
    {
  119.  
    ad9851_bit_data=(w>>i)&0x01;
  120.  
    ad9851_w_clk=1;
  121.  
    ad9851_w_clk=0;
  122.  
    }
  123.  
    //写w2数据
  124.  
    w=(y>>16);
  125.  
    for(i=0;i<8;i )
  126.  
    {
  127.  
    ad9851_bit_data=(w>>i)&0x01;
  128.  
    ad9851_w_clk=1;
  129.  
    ad9851_w_clk=0;
  130.  
    }
  131.  
    //写w1数据
  132.  
    w=(y>>24);
  133.  
    for(i=0;i<8;i )
  134.  
    {
  135.  
    ad9851_bit_data=(w>>i)&0x01;
  136.  
    ad9851_w_clk=1;
  137.  
    ad9851_w_clk=0;
  138.  
    }
  139.  
    //写w0数据
  140.  
    w=w0;
  141.  
    for(i=0;i<8;i )
  142.  
    {
  143.  
    ad9851_bit_data=(w>>i)&0x01;
  144.  
    ad9851_w_clk=1;
  145.  
    ad9851_w_clk=0;
  146.  
    }
  147.  
    //移入始能
  148.  
    ad9851_fq_up=1;
  149.  
    ad9851_fq_up=0;
  150.  
    }
学新通

AD9851.h

  1.  
    #ifndef __AD9851_H_
  2.  
    #define __AD9851_H_
  3.  
    //----------------AD9851 头文件----------------//
  4.  
    #include <stc8.h>
  5.  
    # include <intrins.h>
  6.  
     
  7.  
    //----------------AD9851 IO口定义----------------//
  8.  
    sbit ad9851_w_clk =P2^2; //P2.2口接AD9851的w_clk脚/PIN7
  9.  
    sbit ad9851_fq_up =P2^4; //P2.1口接AD9851的fq_up脚/PIN8
  10.  
    sbit ad9851_rest =P2^3; //P2.0口接AD9851的rest脚/PIN12
  11.  
    sbit ad9851_bit_data =P2^2; //P1.7口接AD9851的D7脚/PIN25
  12.  
    //P1为8位数据口
  13.  
     
  14.  
    //----------------函数快速调用(复制粘贴)列表----------------//
  15.  
    /*******************************************************************
  16.  
    void ad9851_reset(void); //ad9851复位(并口模式)
  17.  
    void ad9851_reset_serial(void); //ad9851复位(串口模式)
  18.  
    void ad9851_wr_parrel(unsigned char w0,double frequence); //向AD9851中写命令与数据(并口)
  19.  
    void ad9851_wr_serial(unsigned char w0,double frequence); //向AD9851中写命令与数据(串口)
  20.  
    ******************************************************************/
  21.  
     
  22.  
    //----------------函数声明列表----------------//
  23.  
    //
  24.  
    //*******************************************************************/
  25.  
    //功能:AD9851复位
  26.  
    //形参:无
  27.  
    //返回:无
  28.  
    //详解:AD9851复位(并口模式)
  29.  
    //*******************************************************************/
  30.  
    void ad9851_reset();
  31.  
     
  32.  
    //*******************************************************************/
  33.  
    //功能:AD9851复位
  34.  
    //形参:无
  35.  
    //返回:无
  36.  
    //详解:AD9851复位(串口模式)
  37.  
    //*******************************************************************/
  38.  
    void ad9851_reset_serial();
  39.  
     
  40.  
    //*******************************************************************/
  41.  
    //功能:向AD9851中写命令与数据
  42.  
    //形参:转移数据变量-->> w0;频率变量-->> frequence
  43.  
    //返回:无
  44.  
    //详解:向AD9851中写命令与数据(并口)
  45.  
    //*******************************************************************/
  46.  
    void ad9851_wr_parrel(unsigned char w0,double frequence);
  47.  
     
  48.  
    //*******************************************************************/
  49.  
    //功能:向AD9851中写命令与数据
  50.  
    //形参:转移数据变量-->> w0;频率变量-->> frequence
  51.  
    //返回:无
  52.  
    //详解:向AD9851中写命令与数据(串口)
  53.  
    //*******************************************************************/
  54.  
    void ad9851_wr_serial(unsigned char w0,double frequence);
  55.  
     
  56.  
    #endif
学新通

LCD12864.c

  1.  
    #include <LCD12864.h>
  2.  
     
  3.  
    //*******************************************************************/
  4.  
    //功能:延时函数
  5.  
    //形参:无
  6.  
    //返回:无
  7.  
    //详解:LCD12864写数据、写命令与检测忙状态时提供延时
  8.  
    //*******************************************************************/
  9.  
    void delayNOP()
  10.  
    {
  11.  
    _nop_();
  12.  
    _nop_();
  13.  
    _nop_();
  14.  
    _nop_();
  15.  
    }
  16.  
     
  17.  
    //*******************************************************************/
  18.  
    //功能:延时函数
  19.  
    //形参:毫秒级延时-->> ms
  20.  
    //返回:无
  21.  
    //详解:LCD12864初始化与显示字符、图形时提供延时
  22.  
    //*******************************************************************/
  23.  
    void delayms(unsigned int ms)
  24.  
    {
  25.  
    unsigned char y;
  26.  
    while (ms--)
  27.  
    {
  28.  
    for (y = 0; y < 114; y )
  29.  
    ;
  30.  
    }
  31.  
    }
  32.  
     
  33.  
    //*******************************************************************/
  34.  
    //功能:检查LCD忙状态
  35.  
    //形参:无
  36.  
    //返回:无
  37.  
    //详解:lcd_busy为1时,忙,等待;lcd-busy为0时,闲,可写指令与数据。
  38.  
    //*******************************************************************/
  39.  
    bit lcd_busy()
  40.  
    {
  41.  
    bit result;
  42.  
    LCD_RS = 0;
  43.  
    LCD_RW = 1;
  44.  
    LCD_EN = 1;
  45.  
    delayNOP();
  46.  
    result = (bit)(P0 &0x80);
  47.  
    LCD_EN = 0;
  48.  
    return (result);
  49.  
    }
  50.  
     
  51.  
    //*******************************************************************/
  52.  
    //功能:LCD12864写命令
  53.  
    //形参:写入的命令-->> cmd
  54.  
    //返回:无
  55.  
    //详解:向LCD12864写命令
  56.  
    //*******************************************************************/
  57.  
    void lcd_wcmd(unsigned char cmd)
  58.  
    {
  59.  
    while (lcd_busy())
  60.  
    ;
  61.  
    LCD_RS = 0;
  62.  
    LCD_RW = 0;
  63.  
    LCD_EN = 1;
  64.  
    P0 = cmd;
  65.  
    delayNOP();
  66.  
    LCD_EN = 0;
  67.  
    }
  68.  
     
  69.  
    //*******************************************************************/
  70.  
    //功能:LCD12864写数据
  71.  
    //形参:写入的数据-->> dat
  72.  
    //返回:无
  73.  
    //详解:向LCD12864写数据
  74.  
    //*******************************************************************/
  75.  
    void lcd_wdat(unsigned char dat)
  76.  
    {
  77.  
    while (lcd_busy())
  78.  
    ;
  79.  
    LCD_RS = 1;
  80.  
    LCD_RW = 0;
  81.  
    LCD_EN = 1;
  82.  
    P0 = dat;
  83.  
    delayNOP();
  84.  
    LCD_EN = 0;
  85.  
    }
  86.  
     
  87.  
    //*******************************************************************/
  88.  
    //功能:初始化LCD12864
  89.  
    //形参:无
  90.  
    //返回:无
  91.  
    //详解:LCD12864初始化
  92.  
    //*******************************************************************/
  93.  
    void lcd_init()
  94.  
    {
  95.  
    LCD_PSB = 1; //并口方式
  96.  
     
  97.  
    LCD_RST = 0; //液晶复位
  98.  
    delayms(5);
  99.  
    LCD_RST = 1;
  100.  
    delayms(5);
  101.  
     
  102.  
    lcd_wcmd(0x34); //扩充指令操作
  103.  
    delayms(5);
  104.  
    lcd_wcmd(0x30); //基本指令操作
  105.  
    delayms(5);
  106.  
    lcd_wcmd(0x0C); //显示开,关光标
  107.  
    delayms(5);
  108.  
    lcd_wcmd(0x06); //光标的移动方向
  109.  
    delayms(5);
  110.  
    lcd_wcmd(0x01); //清除LCD的显示内容
  111.  
    delayms(5);
  112.  
    }
  113.  
     
  114.  
    //*******************************************************************/
  115.  
    //功能:LCD12864显示地址输入
  116.  
    //形参:X轴写地址-->> X;Y轴写地址-->> Y
  117.  
    //返回:无
  118.  
    //详解:写地址,用于LCD12864显示位置的控制
  119.  
    //*******************************************************************/
  120.  
    void lcd_pos(unsigned char X, unsigned char Y)
  121.  
    {
  122.  
    unsigned char pos;
  123.  
     
  124.  
    if (X == 1)
  125.  
    {
  126.  
    X = 0x80; // 第一行的地址是80H
  127.  
    }
  128.  
    else if (X == 2)
  129.  
    {
  130.  
    X = 0x90; //第二行的地址是90H
  131.  
    }
  132.  
    else if (X == 3)
  133.  
    {
  134.  
    X = 0x88; //第三行的地址是88H
  135.  
    }
  136.  
    else if (X == 4)
  137.  
    {
  138.  
    X = 0x98; //第三行的地址是98H
  139.  
    }
  140.  
    pos = X Y; //确定显示地址
  141.  
     
  142.  
    lcd_wcmd(pos); //写显示地址
  143.  
    }
  144.  
     
  145.  
    //*******************************************************************/
  146.  
    //功能:LCD12864标志
  147.  
    //形参:无
  148.  
    //返回:无
  149.  
    //详解:标志函数
  150.  
    //*******************************************************************/
  151.  
    void lcdflag()
  152.  
    {
  153.  
    lcd_wcmd(0x08); //关闭显示
  154.  
    delayms(1000);
  155.  
    lcd_wcmd(0x0c); //开启显示
  156.  
    delayms(1000);
  157.  
    lcd_wcmd(0x08);
  158.  
    delayms(1000);
  159.  
    lcd_wcmd(0x0c);
  160.  
    delayms(1000);
  161.  
    lcd_wcmd(0x08);
  162.  
    delayms(1000);
  163.  
    lcd_wcmd(0x0c);
  164.  
    delayms(1000);
  165.  
    lcd_wcmd(0x01); //清屏
  166.  
    delayms(5);
  167.  
    }
  168.  
     
  169.  
    //*******************************************************************/
  170.  
    //功能:LCD12864图形显示
  171.  
    //形参:图片数据存储-->> *bmp
  172.  
    //返回:无
  173.  
    //详解:向LCD12864写入图片数据,显示图形
  174.  
    //*******************************************************************/
  175.  
    void photodisplay(unsigned char *bmp)
  176.  
    {
  177.  
    unsigned char i, j;
  178.  
     
  179.  
    lcd_wcmd(0x34); //写数据时,关闭图形显示
  180.  
     
  181.  
    for (i = 0; i < 32; i )
  182.  
    //32行(上半屏)
  183.  
    {
  184.  
    lcd_wcmd(0x80 i); //先写入Y坐标值
  185.  
    lcd_wcmd(0x80); //写入X坐标值
  186.  
    for (j = 0; j < 16; j )
  187.  
    //16*8列
  188.  
    lcd_wdat(*bmp );
  189.  
    delayms(1);
  190.  
    }
  191.  
     
  192.  
    for (i = 0; i < 32; i )
  193.  
    //32行(下半屏)
  194.  
    {
  195.  
    lcd_wcmd(0x80 i); //先写入Y坐标值
  196.  
    lcd_wcmd(0x88); //写入X坐标值
  197.  
    for (j = 0; j < 16; j )
  198.  
    //16*8列
  199.  
    lcd_wdat(*bmp );
  200.  
    delayms(1);
  201.  
    }
  202.  
    lcd_wcmd(0x36); //写完数据,开图形显示
  203.  
    }
  204.  
     
  205.  
    //*******************************************************************/
  206.  
    //功能:LCD12864指令操作
  207.  
    //形参:无
  208.  
    //返回:无
  209.  
    //详解:扩充指令与基本指令操作、清屏
  210.  
    //*******************************************************************/
  211.  
    void clr_screen()
  212.  
    {
  213.  
    lcd_wcmd(0x34); //扩充指令操作
  214.  
    delayms(5);
  215.  
    lcd_wcmd(0x30); //基本指令操作
  216.  
    delayms(5);
  217.  
    lcd_wcmd(0x01); //清屏
  218.  
    delayms(5);
  219.  
    }
  220.  
     
  221.  
    //*******************************************************************/
  222.  
    //功能:LCD12864字符串显示
  223.  
    //形参:字符串存储-->> str[]
  224.  
    //返回:无
  225.  
    //详解:向LCD12864写入字符串数据,显示字符串
  226.  
    //*******************************************************************/
  227.  
    void wr_string(unsigned char str[])
  228.  
    {
  229.  
    unsigned char num = 0;
  230.  
     
  231.  
    while (str[num])
  232.  
    {
  233.  
    lcd_wdat(str[num ]); //写数据
  234.  
    delayms(10); //延时形成逐字显示效果
  235.  
    }
  236.  
    }
学新通

LCD12864.h

  1.  
    #ifndef __LCD12864_H_
  2.  
    #define __LCD12864_H_
  3.  
    //----------------LCD12864 头文件----------------//
  4.  
    #include <stc8.h>
  5.  
    #include <intrins.h> //延时函数_nop_()头文件
  6.  
     
  7.  
    //----------------LCD12864 IO口定义----------------//
  8.  
    #define LCD_data P0 //数据口
  9.  
    sbit LCD_RS = P3 ^ 5; //寄存器选择输入
  10.  
    sbit LCD_RW = P3 ^ 6; //液晶读/写控制
  11.  
    sbit LCD_EN = P3 ^ 4; //液晶使能控制
  12.  
    sbit LCD_PSB = P3 ^ 7; //串/并方式控制
  13.  
    sbit LCD_RST = P3 ^ 0; //液晶复位端口
  14.  
     
  15.  
    //char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节
  16.  
     
  17.  
    //----------------函数快速调用(复制粘贴)列表----------------//
  18.  
    /*******************************************************************
  19.  
    void delayNOP(); //LCD12864写数据、写命令与检测忙状态时提供延时
  20.  
    void delayms(unsigned int ms); //LCD12864初始化与显示字符、图形时提供延时
  21.  
    bit lcd_busy(); //lcd_busy为1时,忙,等待;lcd-busy为0时,闲,可写指令与数据。
  22.  
    void lcd_wcmd(unsigned char cmd); //向LCD12864写命令
  23.  
    void lcd_wdat(unsigned char dat); //向LCD12864写数据
  24.  
    void lcd_init(); //LCD12864初始化
  25.  
    void lcd_pos(unsigned char X, unsigned char Y); //写地址,用于LCD12864显示位置的控制
  26.  
    void lcdflag(); //标志函数
  27.  
    void photodisplay(unsigned char *bmp); //向LCD12864写入图片数据,显示图形
  28.  
    void clr_screen(); //扩充指令与基本指令操作、清屏
  29.  
    void wr_string(unsigned char str[]); //向LCD12864写入字符串数据,显示字符串
  30.  
    ******************************************************************/
  31.  
     
  32.  
     
  33.  
    //----------------函数声明列表----------------//
  34.  
    //
  35.  
    //*******************************************************************/
  36.  
    //功能:延时函数
  37.  
    //形参:无
  38.  
    //返回:无
  39.  
    //详解:LCD12864写数据、写命令与检测忙状态时提供延时
  40.  
    //*******************************************************************/
  41.  
    void delayNOP();
  42.  
     
  43.  
    //*******************************************************************/
  44.  
    //功能:延时函数
  45.  
    //形参:毫秒级延时-->> ms
  46.  
    //返回:无
  47.  
    //详解:LCD12864初始化与显示字符、图形时提供延时
  48.  
    //*******************************************************************/
  49.  
    void delayms(unsigned int ms);
  50.  
     
  51.  
    //*******************************************************************/
  52.  
    //功能:检查LCD忙状态
  53.  
    //形参:无
  54.  
    //返回:无
  55.  
    //详解:lcd_busy为1时,忙,等待;lcd-busy为0时,闲,可写指令与数据。
  56.  
    //*******************************************************************/
  57.  
    bit lcd_busy();
  58.  
     
  59.  
    //*******************************************************************/
  60.  
    //功能:LCD12864写命令
  61.  
    //形参:写入的命令-->> cmd
  62.  
    //返回:无
  63.  
    //详解:向LCD12864写命令
  64.  
    //*******************************************************************/
  65.  
    void lcd_wcmd(unsigned char cmd);
  66.  
     
  67.  
    //*******************************************************************/
  68.  
    //功能:LCD12864写数据
  69.  
    //形参:写入的数据-->> dat
  70.  
    //返回:无
  71.  
    //详解:向LCD12864写数据
  72.  
    //*******************************************************************/
  73.  
    void lcd_wdat(unsigned char dat);
  74.  
     
  75.  
    //*******************************************************************/
  76.  
    //功能:初始化LCD12864
  77.  
    //形参:无
  78.  
    //返回:无
  79.  
    //详解:LCD12864初始化
  80.  
    //*******************************************************************/
  81.  
    void lcd_init();
  82.  
     
  83.  
    //*******************************************************************/
  84.  
    //功能:LCD12864显示地址输入
  85.  
    //形参:X轴写地址-->> X;Y轴写地址-->> Y
  86.  
    //返回:无
  87.  
    //详解:写地址,用于LCD12864显示位置的控制
  88.  
    //*******************************************************************/
  89.  
    void lcd_pos(unsigned char X, unsigned char Y);
  90.  
     
  91.  
    //*******************************************************************/
  92.  
    //功能:LCD12864标志
  93.  
    //形参:无
  94.  
    //返回:无
  95.  
    //详解:标志函数
  96.  
    //*******************************************************************/
  97.  
    void lcdflag();
  98.  
     
  99.  
    //*******************************************************************/
  100.  
    //功能:LCD12864图形显示
  101.  
    //形参:图片数据存储-->> *bmp
  102.  
    //返回:无
  103.  
    //详解:向LCD12864写入图片数据,显示图形
  104.  
    //*******************************************************************/
  105.  
    void photodisplay(unsigned char *bmp);
  106.  
     
  107.  
    //*******************************************************************/
  108.  
    //功能:LCD12864指令操作
  109.  
    //形参:无
  110.  
    //返回:无
  111.  
    //详解:扩充指令与基本指令操作、清屏
  112.  
    //*******************************************************************/
  113.  
    void clr_screen();
  114.  
     
  115.  
    //*******************************************************************/
  116.  
    //功能:LCD12864字符串显示
  117.  
    //形参:字符串存储-->> str[]
  118.  
    //返回:无
  119.  
    //详解:向LCD12864写入字符串数据,显示字符串
  120.  
    //*******************************************************************/
  121.  
    void wr_string(unsigned char str[]);
  122.  
     
  123.  
    #endif
学新通

EC11.c

  1.  
    #include "EC11.h"
  2.  
     
  3.  
    // -----------------------------------(03)-------------------------------------
  4.  
    // --------------本头文件添加到的组别
  5.  
    /** @addtogroup BSP 本文件添加到板级支持包(board support package) 组别
  6.  
    * @{
  7.  
    */
  8.  
     
  9.  
    // -----------------------------------(04)-------------------------------------
  10.  
    // --------------添加驱动模块
  11.  
    /** @defgroup EC11
  12.  
    * @brief EC11 driver modules
  13.  
    * @{
  14.  
    */
  15.  
     
  16.  
    // ----------------------------------(04-01)-----------------------------------
  17.  
    // --------------添加私有类型定义
  18.  
    /** @defgroup EC11 _Private_TypesDefinitions
  19.  
    * @{
  20.  
    */
  21.  
     
  22.  
     
  23.  
     
  24.  
    // ----------------------------------(04-01)-----------------------------------
  25.  
    // 04-01的结尾--------------
  26.  
    /**
  27.  
    * @}
  28.  
    */
  29.  
     
  30.  
    // 04-01的结尾标识符--------------
  31.  
     
  32.  
    // ----------------------------------(04-02)-----------------------------------
  33.  
    // --------------添加私有定义
  34.  
    /** @defgroup EC11 _Private_Defines
  35.  
    * @{
  36.  
    */
  37.  
    //#define RCC_OFFSET (RCC_BASE - PERIPH_BASE)
  38.  
     
  39.  
     
  40.  
    // ----------------------------------(04-02)-----------------------------------
  41.  
    // 04-02的结尾--------------
  42.  
    /**
  43.  
    * @}
  44.  
    */
  45.  
     
  46.  
    // 04-02的结尾标识符--------------
  47.  
     
  48.  
    // ----------------------------------(04-03)-----------------------------------
  49.  
    // --------------添加私有宏
  50.  
    /** @defgroup EC11 _Private_Macros
  51.  
    * @{
  52.  
    */
  53.  
     
  54.  
    // ----------------------------------(04-03)-----------------------------------
  55.  
    // 04-03的结尾--------------
  56.  
    /**
  57.  
    * @}
  58.  
    */
  59.  
    // 04-03的结尾标识符--------------
  60.  
     
  61.  
    // ----------------------------------(04-04)-----------------------------------
  62.  
    // --------------添加私有变量
  63.  
    /** @defgroup EC11 _Private_Variables
  64.  
    * @{
  65.  
    */
  66.  
    bit FLAG_EC11Rota; // 旋转编码器旋转状态标志位1:旋转 0:停止;
  67.  
    bit FLAG_EC11Key; // 旋转编码器旋转轻触开关处于微调和粗调模式状态标志位0:粗调 1:微调
  68.  
    bit FLAG_EC11Directional; // 旋转编码器旋转方向状态标志位 0:逆时针转动 1:顺时针转动
  69.  
    unsigned char EC11Key_CountAdd; // 旋转编码器旋转轻触开关顺时针旋转次数
  70.  
    unsigned char EC11Key_CountSub; // 旋转编码器旋转轻触开关逆时针旋转次数
  71.  
    // ----------------------------------(04-04)-----------------------------------
  72.  
    // 04-04的结尾--------------
  73.  
    /**
  74.  
    * @}
  75.  
    */
  76.  
    // 04-04的结尾标识符--------------
  77.  
     
  78.  
    // ----------------------------------(04-05)-----------------------------------
  79.  
    // --------------添加私有函数属性
  80.  
    /** @defgroup EC11 _Private_FunctionPrototypes
  81.  
    * @{
  82.  
    */
  83.  
    void EC11_Init(void); //INT0中断初始化函数
  84.  
     
  85.  
    // ----------------------------------(04-05)-----------------------------------
  86.  
    // 04-05的结尾--------------
  87.  
    /**
  88.  
    * @}
  89.  
    */
  90.  
    // 04-05的结尾标识符--------------
  91.  
     
  92.  
    // ----------------------------------(04-06)-----------------------------------
  93.  
    // --------------添加私有函数
  94.  
     
  95.  
    /** @defgroup EC11 _Private_Functions
  96.  
    * @{
  97.  
    */
  98.  
    /** EC11控制端口初始化函数
  99.  
    * @brief (1)
  100.  
    * (2)
  101.  
    * (3)
  102.  
    * @note None
  103.  
    * @param None
  104.  
    * @retval None
  105.  
    */
  106.  
    void EC11_Init() //@11.0592MHz
  107.  
    {
  108.  
    //端口输出模式初始化 : STC89C52
  109.  
    // -P3.3 EXINT1---EC11旋转编码器A脚 在INT1外部中断初始化中定义了
  110.  
    // -P3.6:EXINT1---EC11旋转编码器B脚
  111.  
    // -P3.7:EXINT1---EC11旋转编码器轻触按键KEY脚
  112.  
    FLAG_EC11Key=0;
  113.  
    EC11Key_CountAdd=0;
  114.  
    EC11Key_CountSub=0;
  115.  
    IT1 = 1; //set INT1 int type (1:Falling 0:Low level)
  116.  
    EX1 = 1; //enable INT1 interrupt
  117.  
    EA = 1; //open global interrupt switch
  118.  
     
  119.  
     
  120.  
    }
  121.  
     
  122.  
    void ExInt1() interrupt 2 //(location at 0013H)
  123.  
    {
  124.  
    FLAG_EC11Key=1;
  125.  
    EX1 = 0 ;
  126.  
    if(EC11_B)
  127.  
    {
  128.  
    EC11Key_CountAdd ;
  129.  
    FLAG_EC11Directional=1;
  130.  
    }
  131.  
    else
  132.  
    {
  133.  
    EC11Key_CountSub ;
  134.  
    FLAG_EC11Directional=0;
  135.  
    }
  136.  
     
  137.  
    }
  138.  
    // ----------------------------------(04-06)-----------------------------------
  139.  
    // 04-06的结尾--------------
  140.  
    /**
  141.  
    * @}
  142.  
    */
  143.  
     
  144.  
    // 04-06的结尾标识符--------------
  145.  
     
  146.  
     
  147.  
     
  148.  
    // -----------------------------------(04)-------------------------------------
  149.  
    // 04的结尾--------------
  150.  
    /**
  151.  
    * @}
  152.  
    */
  153.  
    // 04的结尾标识符--------------
  154.  
     
  155.  
     
  156.  
     
  157.  
    // -----------------------------------(03)-------------------------------------
  158.  
    // 3的结尾--------------
  159.  
    /**
  160.  
    * @}
  161.  
    */
  162.  
    // 3的结尾标识符--------------
  163.  
     
  164.  
    // -----------------------------------(01)-------------------------------------
学新通

EC11.h

  1.  
    #ifndef __EC11_H
  2.  
    #define __EC11_H
  3.  
     
  4.  
    // -----------------------------------(03)-------------------------------------
  5.  
    // --------------C C语言兼容说明 用于将C 代码以标准C形式输出(即以C的形式被调用),
  6.  
    // 这是因为C 虽然常被认为是C的超集,但是C 的编译器还是与C的编译器不同的。C中调用
  7.  
    // C 中的代码这样定义会是安全的。
  8.  
    #ifdef __cplusplus
  9.  
    extern "C" {
  10.  
    #endif
  11.  
     
  12.  
    // -----------------------------------(04)-------------------------------------
  13.  
    // --------------包含的头文件
  14.  
    /* Includes ------------------------------------------------------------------*/
  15.  
    #include "stc8.h"
  16.  
     
  17.  
    // -----------------------------------(05)-------------------------------------
  18.  
    // --------------本头文件添加到的组别
  19.  
    /** @addtogroup BSP 本文件添加到开发文件的组别
  20.  
    * @{
  21.  
    */
  22.  
     
  23.  
     
  24.  
    // ----------------------------------(06-01)------------------------------------
  25.  
    // --------------添加任意若干个外部使用到的常量 数据类型
  26.  
    //structures、Configuration_section_for_CMSIS、Exported_types、Peripheral_registers_structures
  27.  
    //Library_configuration_section、Peripheral_memory_map、Peripheral_declaration、Exported_constants
  28.  
    //Peripheral_Registers_Bits_Definition、Exported_macro
  29.  
    /** @defgroup PORT_memory_map
  30.  
    * @{
  31.  
    */
  32.  
    /**
  33.  
    * @brief EC11 Port_Defines
  34.  
    */
  35.  
    sbit EC11_A=P3^3;
  36.  
    sbit EC11_B=P3^6;
  37.  
    sbit EC11_Key=P3^7;
  38.  
     
  39.  
    /**
  40.  
    * @brief EC11 Public_Defines
  41.  
    */
  42.  
     
  43.  
    /**
  44.  
    * @brief EC11 Public_Variables
  45.  
    */
  46.  
    extern bit FLAG_EC11Rota; // 旋转编码器旋转状态标志位1:旋转 0:停止;
  47.  
    extern bit FLAG_EC11Key; // 旋转编码器旋转轻触开关处于微调和粗调模式状态标志位0:微调 1:粗调
  48.  
    extern bit FLAG_EC11Directional; // 旋转编码器旋转方向状态标志位 0:逆时针转动 1:顺时针转动
  49.  
    extern unsigned char EC11Key_CountAdd; // 旋转编码器旋转轻触开关顺时针旋转次数
  50.  
    extern unsigned char EC11Key_CountSub; // 旋转编码器旋转轻触开关逆时针旋转次数
  51.  
    // ----------------------------------(06-01)------------------------------------
  52.  
    // 06-01的结尾--------------
  53.  
    /**
  54.  
    * @}
  55.  
    */
  56.  
    // 06-01的结尾标识符--------------
  57.  
     
  58.  
     
  59.  
     
  60.  
     
  61.  
    // -----------------------------------(07)-------------------------------------
  62.  
    // --------------添加外部调用本头文件的宏定义
  63.  
    /** @defgroup EC11 _Exported_Macros
  64.  
    * @{
  65.  
    */
  66.  
    #define Fine_Adj 10 //系统频率
  67.  
    #define Roughly_Adj 100 //系统频率
  68.  
    //typedef unsigned char BYTE;
  69.  
    //typedef unsigned int WORD;
  70.  
    /**
  71.  
    * @}
  72.  
    */
  73.  
    // -----------------------------------(07)-------------------------------------
  74.  
    // 7的结尾标识符--------------
  75.  
     
  76.  
     
  77.  
    // -----------------------------------(08)-------------------------------------
  78.  
    // --------------添加外部调用本头文件的函数
  79.  
    /** @defgroup EC11 _Exported_Functions
  80.  
    * @{
  81.  
    */
  82.  
    void EC11_Init(void); //INT0中断初始化函数
  83.  
     
  84.  
     
  85.  
    /**
  86.  
    * @}
  87.  
    */
  88.  
    // -----------------------------------(08)-------------------------------------
  89.  
    // 8的结尾标识符--------------
  90.  
     
  91.  
    // -----------------------------------(05)-------------------------------------
  92.  
    // 5的结尾--------------
  93.  
    /**
  94.  
    * @}
  95.  
    */
  96.  
    // 5的结尾标识符--------------
  97.  
     
  98.  
    // -----------------------------------(03)-------------------------------------
  99.  
    // 3的结尾--------------
  100.  
    #ifdef __cplusplus
  101.  
    }
  102.  
    #endif
  103.  
    /**
  104.  
    * @}
  105.  
    */
  106.  
    // 3的结尾标识符--------------
  107.  
    // -----------------------------------(02)-------------------------------------
  108.  
    // 2的结尾--------------
  109.  
    #endif /* __EC11_h*/
学新通

main.c

  1.  
    #include <LCD12864.h>
  2.  
    #include <AD9851.h>
  3.  
    #include <Timer.h>
  4.  
    #include <stdio.h>
  5.  
    #include <Uart.h>
  6.  
    //#include "EncoderEC11.h"
  7.  
    #include "EC11.h"
  8.  
    #include "MCP41010.h"
  9.  
    #include "Chart.h"
  10.  
     
  11.  
    //按键位定义
  12.  
    sbit s2=P3^0;
  13.  
    sbit s3=P3^1;
  14.  
    sbit s4=P3^2;
  15.  
    sbit s5=P3^3;
  16.  
    char code reserve[3]_at_ 0x3b; //保留0x3b开始的3个字节
  17.  
     
  18.  
    /*函数定义区*/
  19.  
    void Frequency_Check(void);//频率控制函数
  20.  
    void Frequency_Display(void);//频率显示函数
  21.  
    void Increase_Reduction_Display(void);//步进频率控制函数
  22.  
    void Increase_Reduction_Check(void);//步进频率显示函数
  23.  
    void Wave_Change(void);//波形切换函数
  24.  
    void Wave_Form_Display(void);//波形显示函数
  25.  
    void EC11_Check(void);//EC11检测兼动作函数
  26.  
    void EC11_Display(void);//EC11动作显示函数
  27.  
     
  28.  
    /*显示内容定义区*/
  29.  
    unsigned char code DIS1[] ={"频率:"};
  30.  
    unsigned char code DIS2[] ={"步进:"};
  31.  
    unsigned char code DIS3[] ={"波形:"};
  32.  
    unsigned char code DIS4[] ={"Sine"};
  33.  
    unsigned char code DIS5[] ={"Square"};
  34.  
    unsigned char code DIS_NUM[] ={"0123456789"};//定义频率显示的数组
  35.  
     
  36.  
    /*全局变量区*/
  37.  
    unsigned char num;
  38.  
    unsigned char Form=1;
  39.  
    unsigned char u; //定义全局变量
  40.  
    unsigned int a;
  41.  
    unsigned int b;
  42.  
    unsigned int h=0;
  43.  
    unsigned long int m;
  44.  
    unsigned char Display_Flag=0;
  45.  
    unsigned char tmp;
  46.  
     
  47.  
    /*步进频率变量定义区*/
  48.  
    int Increase = 100;
  49.  
    int Reduction = 100;
  50.  
     
  51.  
    /*DDS变量定义区*/
  52.  
    extern long Freq = 100;//初始频率设置
  53.  
    extern unsigned char Freq_Mode = 0x01;//0x00 关闭六倍频模式;0x01 开启六倍频模式
  54.  
     
  55.  
    //*******************************************************************/
  56.  
    //功能:延时函数
  57.  
    //形参:无
  58.  
    //返回:无
  59.  
    //详解:提供延时
  60.  
    //*******************************************************************/
  61.  
    void delay(unsigned int z)
  62.  
    {
  63.  
    unsigned int x,y;
  64.  
    for(x = z; x > 0; x--)
  65.  
    for(y = 114; y > 0 ; y--);
  66.  
    }
  67.  
     
  68.  
    /*******************************************************************************
  69.  
    * 函 数 名 : main
  70.  
    * 函数功能 : 主函数
  71.  
    * 输 入 : 无
  72.  
    * 输 出 : 无
  73.  
    *******************************************************************************/
  74.  
    void main()
  75.  
    {
  76.  
    delayms(100); //上电,等待稳定
  77.  
    lcd_init(); //初始化LCD
  78.  
    UartInit(); //115200bps@24.000MHz
  79.  
    Timer0Init(); //1毫秒@24.000MHz
  80.  
     
  81.  
     
  82.  
    while (1)
  83.  
    {
  84.  
    //频率控制
  85.  
    Frequency_Check();
  86.  
     
  87.  
    //步进频率控制
  88.  
    // Increase_Reduction_Check();
  89.  
     
  90.  
    //波形控制
  91.  
    // Wave_Change();
  92.  
     
  93.  
    //LCD12864显示
  94.  
    // Frequency_Display();
  95.  
    // Increase_Reduction_Display();
  96.  
    // Wave_Form_Display();
  97.  
    EC11_Display();
  98.  
     
  99.  
     
  100.  
    //AD9851频率输出
  101.  
    // ad9851_reset_serial();
  102.  
    // ad9851_wr_serial(Freq_Mode,Freq);
  103.  
     
  104.  
    if(FLAG_EC11Key)
  105.  
    {
  106.  
    FLAG_EC11Key=0;
  107.  
    if(EC11Key_CountAdd>EC11Key_CountSub)
  108.  
    {
  109.  
    tmp=EC11Key_CountAdd-EC11Key_CountSub;
  110.  
    }
  111.  
    else
  112.  
    {
  113.  
    tmp=EC11Key_CountSub-EC11Key_CountAdd;
  114.  
    }
  115.  
    if(FLAG_EC11Directional)
  116.  
    {
  117.  
    tmp=EC11Key_CountAdd 1;
  118.  
    if(tmp>9) tmp=9;
  119.  
    EC11Key_CountAdd=tmp;
  120.  
    tmp=tmp 0x30;
  121.  
    }
  122.  
    else
  123.  
    {
  124.  
    if(EC11Key_CountAdd>1)tmp=EC11Key_CountAdd-1;
  125.  
    else tmp=0;
  126.  
    EC11Key_CountAdd=tmp;
  127.  
    tmp=tmp 0x30;
  128.  
    }
  129.  
    lcd_wcmd(0x8a);
  130.  
    wr_string(tmp);
  131.  
    EX1 = 1;
  132.  
    }
  133.  
    }
  134.  
    }
  135.  
     
  136.  
    //*******************************************************************/
  137.  
    //功能:频率控制函数
  138.  
    //形参:无
  139.  
    //返回:无
  140.  
    //详解:控制频率的增大减小
  141.  
    //*******************************************************************/
  142.  
    void Frequency_Check()
  143.  
    {
  144.  
    if(h==0)
  145.  
    {
  146.  
    if(s2==0)
  147.  
    {
  148.  
    EA=0;
  149.  
    delay(5);
  150.  
    if(s2==0)
  151.  
    {
  152.  
    while(!s2);
  153.  
    Freq = Freq Increase;
  154.  
    if(Freq>1000000)
  155.  
    {
  156.  
    Freq=0;
  157.  
    }
  158.  
    Frequency_Display();
  159.  
    m=65536-(150000/Freq);
  160.  
    a=m/256;
  161.  
    b=m%256;
  162.  
    EA=1;
  163.  
    }
  164.  
    }
  165.  
    if(s3==0)
  166.  
    {
  167.  
    delay(5);
  168.  
    if(s3==0)
  169.  
    {
  170.  
    EA=0;
  171.  
    while(!s3);
  172.  
    Freq-=Increase;
  173.  
    if(Freq<0)
  174.  
    {
  175.  
    Freq=1000000;
  176.  
    }
  177.  
    Frequency_Display();
  178.  
    m=65536-(150000/Freq);
  179.  
    a=m/256;
  180.  
    b=m%256;
  181.  
    EA=1;
  182.  
    }
  183.  
    }
  184.  
    }
  185.  
    }
  186.  
     
  187.  
    //*******************************************************************/
  188.  
    //功能:步进频率控制函数
  189.  
    //形参:无
  190.  
    //返回:无
  191.  
    //详解:控制AD9851的步进频率
  192.  
    //*******************************************************************/
  193.  
    void Increase_Reduction_Check()
  194.  
    {
  195.  
    if(s5==0)
  196.  
    {
  197.  
    delay(5);
  198.  
    if(s5==0)
  199.  
    {
  200.  
    EA=0;
  201.  
    while(!s5);
  202.  
    h ;
  203.  
    if(h==1)
  204.  
    {
  205.  
    Reduction=Increase;
  206.  
    }
  207.  
    if(h==2)
  208.  
    {
  209.  
    h=0;
  210.  
    Increase=Reduction;
  211.  
    Timer0Init();
  212.  
    Frequency_Display();
  213.  
    Increase_Reduction_Display();
  214.  
    EA=1;
  215.  
    }
  216.  
    }
  217.  
    }
  218.  
    if(h==1)
  219.  
    {
  220.  
    if(s2==0)
  221.  
    {
  222.  
    EA=0;
  223.  
    delay(5);
  224.  
    if(s2==0)
  225.  
    {
  226.  
    while(!s2);
  227.  
    Reduction=Reduction 100;
  228.  
    if(Reduction>=100000)
  229.  
    {
  230.  
    Reduction=0;
  231.  
    }
  232.  
    EA=1;
  233.  
    }
  234.  
    }
  235.  
    if(s3==0)
  236.  
    {
  237.  
    delay(5);
  238.  
    if(s3==0)
  239.  
    {
  240.  
    EA=0;
  241.  
    while(!s3);
  242.  
    Reduction=Reduction-100;
  243.  
    if(Reduction<0)
  244.  
    {
  245.  
    Reduction=500;
  246.  
    }
  247.  
    EA=1;
  248.  
    }
  249.  
    }
  250.  
    }
  251.  
    }
  252.  
     
  253.  
    //*******************************************************************/
  254.  
    //功能:波形切换函数
  255.  
    //形参:无
  256.  
    //返回:无
  257.  
    //详解:波形的切换
  258.  
    //*******************************************************************/
  259.  
    void Wave_Change(void)
  260.  
    {
  261.  
    if(h==1)
  262.  
    {
  263.  
    if(s4==0) //判断波形变换按键是否按下
  264.  
    {
  265.  
    delay(5);
  266.  
    if(s4==0)
  267.  
    {
  268.  
    EA=0;
  269.  
    while(!s4);
  270.  
    Form ; //波形变换
  271.  
    if(Form>2) //最多四种变化
  272.  
    {
  273.  
    Form=1;
  274.  
    }
  275.  
    clr_screen();
  276.  
    Wave_Form_Display();
  277.  
    EA=1;
  278.  
    }
  279.  
    }
  280.  
    }
  281.  
    }
  282.  
     
  283.  
    //*******************************************************************/
  284.  
    //功能:频率显示函数
  285.  
    //形参:无
  286.  
    //返回:无
  287.  
    //详解:AD9851频率的显示
  288.  
    //*******************************************************************/
  289.  
    void Frequency_Display()
  290.  
    {
  291.  
    unsigned char Million,One_Hundred_Thousand,Myriad,Thousand,Hundred,Ten,One;
  292.  
    Million=Freq/1000000;
  293.  
    One_Hundred_Thousand=Freq%1000000/100000;
  294.  
    Myriad=Freq%1000000%100000/10000;
  295.  
    Thousand=Freq%1000000%100000%10000/1000;
  296.  
    Hundred=Freq%1000000%100000%10000%1000/100;
  297.  
    Ten=Freq%1000000%100000%10000%1000%100/10;
  298.  
    One=Freq%1000000%100000%10000%1000%100%10;
  299.  
     
  300.  
    lcd_wcmd(0x83); //设置显示位置为第一行
  301.  
    lcd_wdat(DIS_NUM[Million]);
  302.  
    lcd_wdat(DIS_NUM[One_Hundred_Thousand]);
  303.  
    lcd_wdat(DIS_NUM[Myriad]);
  304.  
    lcd_wdat(DIS_NUM[Thousand]);
  305.  
    lcd_wdat(DIS_NUM[Hundred]);
  306.  
    lcd_wdat(DIS_NUM[Ten]);
  307.  
    lcd_wdat(DIS_NUM[One]);
  308.  
    lcd_wdat('H');
  309.  
    lcd_wdat('z');
  310.  
     
  311.  
     
  312.  
    lcd_wcmd(0x80);
  313.  
    wr_string(DIS1);
  314.  
    }
  315.  
     
  316.  
    //*******************************************************************/
  317.  
    //功能:步进频率显示函数
  318.  
    //形参:无
  319.  
    //返回:无
  320.  
    //详解:AD9851步进频率的显示
  321.  
    //*******************************************************************/
  322.  
    void Increase_Reduction_Display()
  323.  
    {
  324.  
    unsigned int Myriad,Thousand,Hundred,Ten,One;
  325.  
    Myriad=Reduction/10000;
  326.  
    Thousand=Reduction%10000/1000;
  327.  
    Hundred=Reduction%10000%1000/100;
  328.  
    Ten=Reduction%10000%1000%100/10;
  329.  
    One=Reduction%10000%1000%100%10;
  330.  
    lcd_wcmd(0x98 11);
  331.  
     
  332.  
    lcd_wcmd(0x93);
  333.  
    lcd_wdat(DIS_NUM[Myriad]);
  334.  
    lcd_wdat(DIS_NUM[Thousand]);
  335.  
    lcd_wdat(DIS_NUM[Hundred]);
  336.  
    lcd_wdat(DIS_NUM[Ten]);
  337.  
    lcd_wdat(DIS_NUM[One]);
  338.  
    lcd_wdat('H');
  339.  
    lcd_wdat('z');
  340.  
     
  341.  
    lcd_wcmd(0x90);
  342.  
    wr_string(DIS2);
  343.  
    }
  344.  
     
  345.  
    //*******************************************************************/
  346.  
    //功能:波形显示函数
  347.  
    //形参:无
  348.  
    //返回:无
  349.  
    //详解:波形的显示
  350.  
    //*******************************************************************/
  351.  
    void Wave_Form_Display()
  352.  
    {
  353.  
    if(Form==1)
  354.  
    {
  355.  
    lcd_wcmd(0x8b);
  356.  
    wr_string(DIS4);
  357.  
    }
  358.  
    else
  359.  
    {
  360.  
    lcd_wcmd(0x8b);
  361.  
    wr_string(DIS5);
  362.  
    }
  363.  
     
  364.  
    lcd_wcmd(0x88);
  365.  
    wr_string(DIS3);
  366.  
    }
  367.  
     
  368.  
    //*******************************************************************/
  369.  
    //功能:EC11检测兼动作函数
  370.  
    //形参:无
  371.  
    //返回:无
  372.  
    //详解:检测EC11动作并执行相应的行为
  373.  
    //*******************************************************************/
  374.  
    void EC11_Check() interrupt 1
  375.  
    {
  376.  
    static int tmp =0;
  377.  
    Encoder_EC11_Analyze(Encoder_EC11_Scan());
  378.  
    if(P20 == 0)
  379.  
    {
  380.  
    Display_Flag ;
  381.  
    }
  382.  
    }
  383.  
     
  384.  
    //*******************************************************************/
  385.  
    //功能:EC11动作显示函数
  386.  
    //形参:无
  387.  
    //返回:无
  388.  
    //详解:检测EC11动作并显示相应的代号
  389.  
    //*******************************************************************/
  390.  
    void EC11_Display()
  391.  
    {
  392.  
    lcd_wcmd(0x90);
  393.  
    lcd_wdat(DIS_NUM[dat]);
  394.  
    lcd_wcmd(0x80);
  395.  
    lcd_wdat(DIS_NUM[Display_Flag]);
  396.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhibhafi
系列文章
更多 icon
同类精品
更多 icon
继续加载