为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

电子生日蜡烛设计

2017-09-24 10页 doc 66KB 36阅读

用户头像

is_882336

暂无简介

举报
电子生日蜡烛设计/******************************************************************************* *  *                广西科技大学电气学院 *  *                    -------------------------------------------------------------------------------- * 实 验 名        : LCD1602显示试验 * 实验说明      : LCD...
电子生日蜡烛设计
/******************************************************************************* *  *                广西科技大学电气学院 *  *                    -------------------------------------------------------------------------------- * 实 验 名        : LCD1602显示试验 * 实验说明      : LCD1602显示Pechin Science * 连接方式      : 见连接图 * 注    意        : *******************************************************************************/ #include    #define uchar unsigned char #define uint unsigned int /********************************** PIN口定义 **********************************/ #define LCD1602_DATAPINS P0 sbit LCD1602_E = P2 ^ 7; sbit LCD1602_RW = P2 ^ 5; sbit LCD1602_RS = P2 ^ 6;   sbit P1_0=P1^7;      // 扬声器输出口   #define key_p  P3  //按键输入口   int m,i=0;          int tri;   int l;   int x=0,y=2;   playc(char ch);   char code toneh[14]= {0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,}; char code tonel[14]= {0x22,0x56,0x85,0x9A,0xC1,0xE3,0x03,0x10,0x2B,0x42,0x4C,0x60,0x71,0x81};   //歌曲乐谱 char code song1[]="222322113336622552223221133336622550531141255311432536653326425434332321034554330217023443332"; char code song2[]="167176671111322225777711105666611667665555003111132222355531110566662661166550665054667705111"; char code song3[]="356665533566655335544332230332133665511666615623000356663550000230232161250330334332402230232"; char code length[]="444444444444444422224422224422224444444444"; /*在51单片机12MHZ时钟下的延时函数*/ void Lcd1602_Delay1ms(uint c);  //误差 0us /*LCD1602写入8位命令子函数*/ void LcdWriteCom(uchar com); /*LCD1602写入8位数据子函数*/ void LcdWriteData(uchar dat); /*LCD1602初始化子程序*/ void LcdInit(); /*显示行数子程序*/ void DisplayOneChar(uchar x,uchar y, uchar ddata); /*显示函数子程序*/ void display(uchar *ddata,x,y); /*按键控制函数子程序*/ void key(); //音乐部分 void timer0(void) interrupt 1 using 1        //计时器1 {   P1_0=~P1_0;   TH0=toneh[tri];   TL0=tonel[tri]; } void timer1(void) interrupt 3 using 3    //计时器2 {   TH1=0xCA;   TL1=0xFE;   m++;   key(); } /******************************************************************************* * 函 数 名        : Lcd1602_Delay1ms * 函数功能          : 延时函数,延时1ms * 输    入        : c * 输    出        : 无 * 说    名        : 该函数是在12MHZ晶振下,12分频单片机的延时。 *******************************************************************************/ int playc(char ch)                          {     int ti;     switch(ch)     {       case'q':ti=0;break;       case'w':ti=1;break;       case'e':ti=2;break;       case'r':ti=3;break;       case't':ti=4;break;       case'y':ti=5;break;       case'u':ti=6;break;       case'1':ti=7;break;       case'2':ti=8;break;       case'3':ti=9;break;       case'4':ti=10;break;       case'5':ti=11;break;       case'6':ti=12;break;       case'7':ti=13;break;       case' ':ti=50;break;       default:ti=50;break;     }     if(ti==50)return (100);     else return ti; } /******************************************************************************* * 函 数 名        : Lcd1602_Delay1ms * 函数功能          : 延时函数,延时1ms * 输    入        : c * 输    出        : 无 * 说    名        : 该函数是在12MHZ晶振下,12分频单片机的延时。 *******************************************************************************/ void Lcd1602_Delay1ms(uint c)  //误差 0us {     uchar a, b;     for (; c>0; c--)     {         for (b = 199; b>0; b--)         {             for (a = 1; a>0; a--);         }     } } /******************************************************************************* * 函 数 名        : LcdWriteCom * 函数功能          : 向LCD写入一个字节的命令 * 输    入        : com * 输    出        : 无 *******************************************************************************/ void LcdWriteCom(uchar com)      //写入命令 {     LCD1602_E = 0;    //使能     LCD1602_RS = 0;      //选择发送命令     LCD1602_RW = 0;      //选择写入     LCD1602_DATAPINS = com;    //放入命令     Lcd1602_Delay1ms(1);        //等待数据稳定     LCD1602_E = 1;              //写入时序     Lcd1602_Delay1ms(5);      //保持时间     LCD1602_E = 0; } /******************************************************************************* * 函 数 名        : LcdWriteData * 函数功能          : 向LCD写入一个字节的数据 * 输    入        : dat * 输    出        : 无 *******************************************************************************/ void LcdWriteData(uchar dat)            //写入数据 {     LCD1602_E = 0;    //使能清零     LCD1602_RS = 1;    //选择输入数据     LCD1602_RW = 0;    //选择写入     LCD1602_DATAPINS = dat; //写入数据     Lcd1602_Delay1ms(1);     LCD1602_E = 1;  //写入时序     Lcd1602_Delay1ms(5);  //保持时间     LCD1602_E = 0; } /******************************************************************************* * 函 数 名      : LcdInit() * 函数功能        : 初始化LCD屏 * 输    入      : 无 * 输    出      : 无 *******************************************************************************/    void LcdInit()                          //LCD初始化子程序 {     LcdWriteCom(0x38);  //开显示     LcdWriteCom(0x0c);  //开显示不显示光标     LcdWriteCom(0x01);  //清屏     LcdWriteCom(0x06);  //写一个指针加1     LcdWriteCom(0x80);  //设置数据指针起点 } /***************************************************************************** *函数名        :DisplayOneChr(uchar x,uchar y, uchar ddata) *函数功能      :显示行数的设定 * 输    入      : x,y ddata * 输    出      : 无 *******************************************************************************/ void DisplayOneChar(uchar x,uchar y, uchar ddata) {   y&=1;   x&=15;   if(y)x|=0x40;   x|=0x80;   LcdWriteCom(x);   LcdWriteData(ddata); } /***************************************************************************** *函数名        :display(uchar *ddata,x,y) *函数功能      :显示函数 * 输    入      : x,y *ddata * 输    出      : 无 *******************************************************************************/ void display(uchar *ddata,x,y) {   uchar lis=0;   y&=0x01;   x&=0x0f;   while(x<16)   {     DisplayOneChar(x,y,ddata[lis]);     lis++;     x++;   } } /******************************************************************************* * 函 数 名        : key() * 函数功能          : 按键控制函数 * 输    入        : 无 * 输    出        : 无 *******************************************************************************/ void key() {   uchar key1;   key_p=0XFF;   key1=key_p;   if(key1!=0xFF)     {         Lcd1602_Delay1ms(1);         key_p=0xFF;         key1=key_p;         if(key1!=0xFF)             {                 key1=key_p;                 switch(key1)                     {                         case 0xFE:x=1;      break;                         case 0xFD:x=2;      break;                         case 0xFB:x=3;      break;                         case 0xF7:y=1;      break;                         case 0xEF:y=~y;      break;                         default  :          break;                     }             }     }  } /******************************************************************************* * 函 数 名        : main * 函数功能          : 主函数 * 输    入        : 无 * 输    出        : 无 *******************************************************************************/ void main(void) {     //--定变量--//   uchar *s1,*s2,*s3,*h,*h1,*h2,*h3,*h4;                           //uchar z;                           uchar xi=16;     m=0;TMOD=0x11;     P1_0=0;     TH0=toneh[0];     TL0=tonel[0];     TH1=0xCE;     TL1=0xFE;     IP=0x08;     EA=1;                               LcdInit();     s1=" I LOVE Chopin  ";        s2=" MY LOVE        ";     s3=" Without You    ";     h=" Hello Music        ";     h1=" Music 1:          ";     h2=" Music 2:          ";     h3=" Music 3:          ";     h4=" Music is OVER      ";     display(h,0,0)  ;     Lcd1602_Delay1ms(10);     while(1)     {       key();       if(x==1) {display(h1,0,0);display(s1,0,1); }       if(x==2) {x=2;display(h2,0,0);display(s2,0,1); }       if(x==3) {display(h3,0,0);display(s3,0,1); }       if(y==1)       {          switch(x){            case 1:                   for(i=0;i<93;i++)                   {                        ET1=1; TR1=1;                     ET0=1; TR0=1;                     while(!y){P1_0=1;}                     xi=xi%16;                     display(s1,xi,1);                     xi--;                     tri=playc(song1[i]);                     l=length[i]-0x03;                     while(m
/
本文档为【电子生日蜡烛设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索