DA转换源程序(lcd1602显示)

  • 格式:doc
  • 大小:73.00 KB
  • 文档页数:9

/***********************DA源程序*****************************************/#include<reg52.h>#include"lm1602.h"#include<intrins.h>sbit Key0 = P2^7;sbit Key1 = P2^0;sbit Key2 = P2^1;sbit Key3 = P2^2;sbit Key4 = P2^3;sbit OE = P3^6;bit flag = 0;unsigned char Square[]="Square Wave"; //方波unsigned char Triangular[]="Triangular Wave"; //三角波unsigned char Sawtooth[]="Sawtooth Wave"; //锯齿波unsigned char Sine[]="Sine Wave";unsigned char Frequency[]="Freq:";unsigned char Hz[]="Hz";unsigned char Cycle[]="25000";//unsigned char PWM[]="PWM:50%";unsigned int X = 0;unsigned char code sin[]={125,128,131,134,138,141,144,147,150,153,156,159, 162,165,168,171,174,177,180,182,185,188,191,193,196,198,201,203,206,208,211,213,215,217,219,221,223,225,227,229,231,232,234,235,237,238,239,241,242,243,244,245,246,246,247,248,248,249,249,250,250,250,250,250,250,250,250,249,249,248,248,247,246,246,245,244,243,242,241,239,238,237,235,234,232,231,229,227,225,223,221,219,217,215,213,211,208,206,203,201,198,196,193,191,188,185,182,180,177,174,171,168,165,162,159,156,153,150,147,144,141,138,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76,73,70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,29,27,25,27,29,27,25,23,21,19,18,16,15,13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,1,1,2,2,3,4,4,5,6,7,8,9,11,12,13,15,16,18,19,21,23,25,27,29,31,33,35,37,39,42,44,47,49,52,54,57,59,62,65,68,70,73,76,79,82,85,88,97,94,97,100,103,106,109,112,116,119,122};void Delay(unsigned int num){unsigned int i;for(i=0;i<num;i++);}void SanJiao(unsigned char num){unsigned char dat =0;LCD_Write_String(0x80,Triangular);while(1){P1 = dat++;Delay(num);if(dat==0xff)flag = 1;if(Key0==0){Delay(5000);if(Key0==0)break;}while(flag){P1 = dat--;Delay(num);if(dat==0)flag = 0;if(Key0==0){Delay(5000);if(Key0==0)break;}}if(Key1==0){Delay(5000);if(Key1==0){num = num+5;X = num*500;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}if(Key2==0){Delay(5000);if(Key2==0){num = num-5;X = num*500;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}}}void JuChi(unsigned char num){unsigned char dat =0;LCD_Write_String(0x80,Sawtooth);while(1){P1 = dat++;if(dat==0xff)dat = 0;Delay(num);if(Key0==0){Delay(5000);if(Key0==0)break;}if(Key1==0){Delay(5000);if(Key1==0){num = num+5;X = num*255;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}if(Key2==0){Delay(5000);if(Key2==0){num = num-5;X = num*255;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}}}void ZhengXuan(unsigned char num){unsigned char i=0;LCD_Write_String(0x84,Sine);while(1){P1 = sin[i++];Delay(num);if(i==255)i=0;if(Key0==0){Delay(5000);if(Key0==0)break;}if(Key1==0){Delay(5000);if(Key1==0){num = num+5;X = num*255;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}if(Key2==0){Delay(5000);if(Key2==0){num = num-5;X = num*255;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}}}void FangBo(unsigned int num){unsigned char dat=0xff;LCD_Write_String(0x80,Square);while(1){P1 = dat;Delay(num);P1 = ~dat;Delay(num);if(Key0==0){Delay(1000);if(Key0==0);break;}if(Key1==0){Delay(5000);if(Key1==0){num = num+3000;X = num;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}if(Key2==0){Delay(5000);if(Key2==0){num = num-3000;X = num;Cycle[0] = X/10000+0x30;Cycle[1] = X%10000/1000+0x30;Cycle[2] = X%1000/100+0x30;Cycle[3] = X%100/10+0x30;Cycle[4] = X%10+0x30;LCD_Write_String(0xc5,Cycle);}}}}void main(void){unsigned char i=0;LCD_Init();LCD_Write_String(0xc0,Frequency);LCD_Write_String(0xca,Hz);OE = 0;while(1){if(Key1==0)SanJiao(2);if(Key4==0)JuChi(2);if(Key3==0)ZhengXuan(2);if(Key2==0)FangBo(30000);}}/*******************************************************1602.c文件************/ #include"lm1602.h"void delay_us(unsigned int num){unsigned int i;for(i=0;i<num;i++);}void write_cmd(unsigned char dd){c_rs=0;c_rw=0;c_e=0;delay_us(50);P0=dd;c_e=1;delay_us(50);c_e=0;delay_us(50);}void write_dat(unsigned char dd){c_rs=1;c_rw=0;c_e=0;delay_us(50);P0=dd;c_e=1;delay_us(50);c_e=0;delay_us(50);}void LCD_Init( ){delay_us(200);write_cmd(0x38);delay_us(200);write_cmd(0x38);delay_us(200);write_cmd(0x38);delay_us(200);write_cmd(0x08);delay_us(200);write_cmd(0x01);delay_us(200);write_cmd(0x06);delay_us(200);write_cmd(0x0c);}void LCD_Write_String(unsigned char x,unsigned char *s){write_cmd(x);while (*s){write_dat(*s);s++;}}void LCD_Write_Char(unsigned char x,unsigned char Data){write_cmd(x);write_dat(Data);}/************************lcd.h封装模块********************************/ #ifndef __LM1602_H__#define __LM1602_H__#include<reg52.h>#include<intrins.h>sbit c_rs = P2^4;sbit c_rw = P2^5;sbit c_e = P2^6;void LCD_Write_Char(unsigned char x,unsigned char Data); void LCD_Write_String(unsigned char x,unsigned char *s); void LCD_Init(void);#endif仿真图。