单片机波形发生器源码

2019-11-07来源: 51hei关键字:单片机  波形发生器  LCD

程序源码

#include

#include

#include

#define  uchar  unsigned  char

#define  uint  unsigned   int

unsigned long Result,i;

sbit SDA=P1^1;    //PCF8591 接口

sbit SCL=P1^0;

unsigned int a=0;            //波形采样点值

unsigned int b=0;

unsigned  int c=0;

unsigned  int bx_chang=0;

unsigned  int n=40;  //频率计算值

unsigned char TH;

unsigned char TL;

unsigned int mode=0; //0为调节幅度 1为调节频率

unsigned int fd=6;         //幅度初值  3.0V

unsigned int  x;         //采样点的间隔

unsigned int u;                 //lcd刷屏变量

//*************

sbit CS =P3^5;                  //LCD接口

sbit SID=P3^6;

sbit SCLK=P3^7;

sbit PSB=P1^5;

//*************

sbit p20=P2^0; //波形调节

sbit p21=P2^1; //增加        频率、幅度

sbit p22=P2^2; //减少        频率、幅度

sbit p32=P3^2; //频率幅度选择

                                                                  //sin波形数组

uchar code tosin[256]={

            0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,

                        0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,

                        0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,

                        0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

                        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,

                        0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,

                        0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,

                        0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,

                        0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,

                        0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,

                        0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,

                        0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,

                        0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,

                        0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,

                        0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,

                        0x51,0x55,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x80

                        };

                  

//***********************************************

void delay(unsigned int z)                                //延迟函数

{   unsigned int x,y;   

     for(x=z;x>0;x--)  

       for(y=125;y>0;y--) ;

}

//***************************************************LCD显示函数组

void SendByte(unsigned char Dbyte)                                     //LCD字节传送

{

     unsigned char i;            

         CS=1;

     for(i=0;i<8;i++)

     {        SCLK = 0;           

            if((Dbyte<

                SID=1;                        

                else

                SID=0;

                SCLK = 1;

       SCLK = 0;

     }

         CS=0;

}

void Lcd_WriteCmd(unsigned char Cbyte )                   //LCD的数据与指令传送

{

     delay(10);

     SendByte(0xf8);           

     SendByte(0xf0&Cbyte);      

     SendByte(0xf0&(Cbyte<<4));   

}

void Lcd_WriteData(unsigned char Dbyte )

{

     delay(10);

     SendByte(0xfa);               

     SendByte(0xf0&Dbyte);      

     SendByte(0xf0&(Dbyte<<4));   

}                                                                 

void InitLCD()                                    //LCD初始化

{

        Lcd_WriteCmd(0x30);              

        Lcd_WriteCmd(0x06);               

        Lcd_WriteCmd(0x0c);               

        Lcd_WriteCmd(0x04);              

        Lcd_WriteCmd(0x01);                   

        Lcd_WriteCmd(0x02);                          

        Lcd_WriteCmd(0x80);                

}                                                               

void xianshi(unsigned char x,unsigned char y,unsigned char *stri)        //LCD数据传送地址

{                                                               

        if(x==1)      Lcd_WriteCmd(0x80+y-1);               

        else if(x==2) Lcd_WriteCmd(0x90+y-1);

        else if(x==3) Lcd_WriteCmd(0x88+y-1);

        else if(x==4) Lcd_WriteCmd(0x98+y-1);       

while(*stri>0)

        {

                Lcd_WriteData(*stri);

                stri++;

        }       

}

//****************************************************

void delayp()                         //延迟函数

{;;}

void delay_1ms(uint z)  

{  

    uint x,y;  

    for(x=z;x>0;x--)  

        for(y=110;y>0;y--)  

            ;  

}  

//****************************************I2C协议  

void start()//开始信号  

{  

    SDA=1;  

    delayp();  

    SCL=1;  

    delayp();  

    SDA=0;  

    delayp();  

}  

  

void stop() //停止信号  

{  

    SDA=0;  

    delayp();  

    SCL=1;  

    delayp();  

    SDA=1;  

    delayp();  

}  

  

  

void respons()//应答 相当于

[1] [2] [3]
关键字:单片机  波形发生器  LCD 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479232.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:八弦激光竖琴电路图与单片机源码
下一篇:单片机外部中断程序(给P3.2管脚低电平,led会显示取反状态)

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机汇编参考程序
该AVR的汇编程序选自《M128》,程序中体现了AVR汇编的基本特点,仅供大家参考。该应用系统为一个带1/100秒的简易24小时制时钟,它在上电后能够自动从11时59分55秒00开始计时和显示时间。下图为简易时钟系统硬件电路图。                           图  简易24小时时钟硬件原理图系统使用8个LED数码管显示时、分、秒、1/100秒4个时段的数字,每个时段占用2个LED。显示方式采用动态扫描方式,ATme
发表于 2019-11-14
avr单片机汇编参考程序
AVR单片机一些学习笔记
下面是自己在学习AVR单片机时的学习经验,分享出来给大家,一起学习。1、AVR单片机采用RISC架构,8051单片机采用CISC架构。 前者速度为后者的2~4倍,为流水线操作指令。2、 AVR单片机有32个通用寄存器(地址在RAM区从$0000开始到$001F),其中有6个(最后6个)合并为3个16位的X,Y,Z寄存器,用来存放地址指针,Z寄存器还可以寻址程序存储器。3、 哈佛结构,131条机器指令。4、 延迟开机功能。5、 内部自带RC振荡器,可提供1/2/4/8MHZ的工作时钟。6、 FLASH+EEPROM+SRAM+SPI+USART+TWI+PWM+RTC+10位ADC+模拟比较器+JTAG。7、 堆栈指针向下增长,51
发表于 2019-11-14
avr单片机mega32之ADC程序
查手册,写程序,有问题再讨论*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>#include "adc.h"int main(void){        int m;adc_init();             m = adc_get(0);     &n
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
学单片机的第二条槛:中断,每次我都选最简单的中断——外部中断。*****************************************************************//CPU:mega32//编译器:iar#include <ioavr.h>void eint0_init(void);int main(void){    DDRD |= (1 << 7);     //PD7置为输出    eint0_init();    
发表于 2019-11-14
mega32单片机最简单的中断程序——外部中断
PIC单片机入门指南
;    把最下面的框钩上后点保存这时看到文本框内的字变成了蓝色了。开始编写程序最后点上面中间的那个红色的图标编译,在项目目录里面就会有个hex的文件,最后下载到单片机PIC10F200里面就可以用了!
发表于 2019-11-14
PIC单片机入门指南
单片机之间通信(类红外发送与接收)
void call_user_sent()   {       static bit data_flag=0;      static unsigned char a=0,b=0,c=0;      TRISB5=1;      TRISB2=0;      if(!data_flag)        //起始头    
发表于 2019-11-14
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved