找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2783|回复: 0
打印 上一主题 下一主题
收起左侧

这个开发板如何接线啊 Proteus仿真可以啊

[复制链接]
跳转到指定楼层
楼主

程序是:
#include     
#include


sbit rs    = P3^5;        //define P2.6 as rs
sbit lcde= P3^4;  //define lcd enable signal is P2.7 pin .

unsigned int Freq = 100;

unsigned int Duty = 1;

unsigned int Time_H = 0;
unsigned int Time_L = 0;

sbit Pulse=P1^1;

sbit ADD_F = P1^4;
sbit SUB_F  = P1^5;
sbit ADD_C = P1^6;
sbit SUB_C = P1^7;

unsigned char numpos = 0;
unsigned char mode = 0;

unsigned char temppos = 0xff;

void Delay1ms(void)
{
    unsigned char i, j;

    _nop_();
    i = 2;
    j = 199;
    do
    {
        while (--j);
    } while (--i);
}

void DelayNms(unsigned int dly)
{
    while(dly > 0)
    {
        dly--;
        Delay1ms();
    }
}

// void Delay1ms(unsigned int c)   //?? 0us
// {
// //     unsigned char a, b;

// //     
// //     for (;c>0;c--)
// //     {
// //         for (b=38;b>0;b--)
// //         {
// //             for (a=13;a>0;a--);
// //         }
// //            
// //     }  
// }

/*****write command to lcd "com" is data to mcu by use P0.0 to P0.7 pin**********/
void sendcomandtolcd(unsigned char com)
{
    rs=0;                    //fix format of send commond to lcd
    P0=com;                //transfer data of com to P0 (total 8 pin ).
    DelayNms(1);
    lcde=1;                //enable signal to lcd .
    DelayNms(1);        //5ms time to let mcu read data from P0.0 to P0.7(com)
    lcde=0;                //end of enable signal :data transfer finish .


}


void senddatatolcd(unsigned char dat)
{
    rs=1;                    //fix format of send commond to lcd
    P0=dat;                //transfer data of com to P0 (total 8 pin ).
    DelayNms(1);
    lcde=1;                //enable signal to lcd .
    DelayNms(1);        //5ms time to let mcu read data from P0.0 to P0.7(com)
    lcde=0;                //end of enable signal :data transfer finish .


}
/************write normal word to screen*****************************************/
void lcdputstr(unsigned char  *d)//lcd display a sentense of "d" ,d<16bit

{   
    while(*d>0)
    {
    senddatatolcd(*d++);
   
    }
}
/*************lcd init commond will clear screen and set cursor to beganing of first line ****/
void lcd_init()
{        
    lcde=0;                                           //Initliz the lcd enable signal to 0
    sendcomandtolcd(0x01);            //lcd clear screen
    sendcomandtolcd(0x38);            //fix format of lcd ,0x38 means select lcd screen 16*2 type .
    sendcomandtolcd(0x0c);            //0x0f =0b 0001 1111 ,last 111 means on display ,on cursor,and cursor blinking.
    sendcomandtolcd(0x06);            //0b 0000 0110, 11  1,means cursor move righ when receive 1 charactor .1,means:screen not move .
   
   
}

void display(void)
{
    sendcomandtolcd(0x80);
    senddatatolcd('F');
    senddatatolcd('r');
    senddatatolcd('e');
    senddatatolcd('q');
    senddatatolcd(':');   
   
    senddatatolcd('0'+Freq/100);
    senddatatolcd('0'+Freq%100/10);
    senddatatolcd('0'+Freq%10);
    senddatatolcd('H');   
    senddatatolcd('z');   
   
    sendcomandtolcd(0x80+0x40);
    senddatatolcd('D');
    senddatatolcd('u');
    senddatatolcd('t');
    senddatatolcd('y');   
    senddatatolcd(':');   
    senddatatolcd('0'+Duty%10);
    senddatatolcd('0');
    senddatatolcd('%');   
   
    Time_H = (100*Duty)/Freq;
    Time_L = (100*(10-Duty))/Freq;
   
    sendcomandtolcd(0x80+0x40+ 10);
    senddatatolcd('P');
    senddatatolcd(':');
    senddatatolcd('0'+Time_H/100);
    senddatatolcd('0'+Time_H%100/10);
    senddatatolcd('0'+Time_H%10);   
    senddatatolcd('m');   
    senddatatolcd('s');   
}

void keyscan(void)
{
    if(ADD_F == 0)
    {
         if(Freq < 300)
             Freq += 1;
            while(ADD_F == 0);
    }

    if(SUB_F == 0)
    {
         if(Freq > 1)
             Freq -= 1;
            while(SUB_F == 0);
    }

    if(ADD_C == 0)
    {
        
         if(Duty < 9)
             Duty += 1;
            while(ADD_C == 0);
    }

    if(SUB_C == 0)
    {
         if(Duty > 1)
                Duty -= 1;
            while(SUB_C == 0);
    }
}

void exint0() interrupt 0           //(location at 0003H)
{
  keyscan();
    display();
}

void EX0_Init(void)
{
    IT0 = 1;                        //set INT0 int type (1:Falling 0:Low level)
    EX0 = 1;                        //enable INT0 interrupt
    EA = 1;                         //open global interrupt switch
}


void main (void)
{
    lcd_init();
    EX0_Init();   
    display();

    while(1)
    {
        Pulse = 0;
        DelayNms(Time_H);
        Pulse = 1;
        DelayNms(Time_L);
    }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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