微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 仿真程序

仿真程序

时间:10-02 整理:3721RD 点击:


不会写这个仿真的程序,用LCD显示。

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P1^0;                  
sbit key2=P1^1;               
sbit key3=P1^2;               
sbit key4=P1^3;               
sbit lcden=P2^2;          
sbit lcdrs=P2^0;               
sbit lcdrw=P2^1;       
sbit led=P2^4;                
sbit sound=P2^5;               
uint a,b,i,min,hour,minge,minshi,hourge,hourshi,amin,ahour,aminge,aminshi,ahourge,ahourshi,sec;
//unsigned char code x[]={0xFF,0xC7,0x83,0x01,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0xFF};
//unsigned char code z[]={0xFF,0xE3,0xC1,0x80,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x7F,0xFF,0xFF};
uchar code table1[]={'0','1','2','3','4','5','6','7','8','9'};
uchar code table2[]="Time:00:00      "        ;
uchar code Alarm_1[]="Alarm:00:00     ";
uchar code nul[]="                 ";
uchar num1,num2;
void delay(unsigned int xms)        //?
{
        uint i,j;                                                  
         for(i=xms;i>0;i--)
                 for(j=124;j>0;j--);
}
void write_com(uchar com)                 //?LCD命令控制
{
        delay(5) ;
        lcdrs=0;
        P0=com;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;       
}
void write_data(uchar date)                   //?LCD数据控制
{
        delay(5);
        lcdrs=1;
        P0=date;
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}
void time()                                                               
{
        while(1)
        {
                if(key1==0)                    
                {
                         delay(10);
                        if(key1==0)
                        {
                               
                                if(hour==23)                                 //        设置时间
                                        hour=0;
                                else
                                        hour++;
                                hourge=hour%10;
                                hourshi=hour/10;
                                write_com(0x0f);
                                delay(2);
                                write_com(0x80+6);
                                write_data(table1[hourge]);
                                delay(5);
                                write_com(0x80+5);
                                delay(2);
                                write_data(table1[hourshi]);
                                while(!key1);
                                //delay(1);
                                               
                        }
                }
                if(key2==0)
                 {
                        delay(10);
                        if(key2==0)
                        {
                               
                                if(min==59)                                        //分钟设置
                                        min=0;
                                else
                                        min++;
                                minge=min%10;
                                minshi=min/10;
                                write_com(0x0f);
                                write_com(0x80+9);
                                write_data(table1[minge]);
                                delay(1);
                                write_com(0x80+8);
                                write_data(table1[minshi]);
                                delay(1);
                                while(!key2);
                               
                       
                                       
                        }
                }
                if(key3==0)
                {
                        delay(10);
                        if(key3==0)
                        {
                                write_com(0x0c);
                                TR1=1;
                                while(!key3);
                                break;       
                        }
                }
        }
}
void alarm()                                       
{
        while(1)
        {
                if(key1==0)
                {
                         delay(10);
                        if(key1==0)
                        {
                                if(ahour==24)                               
                                        ahour=0;
                                else
                                        ahour++;
                                ahourge=ahour%10;
                                ahourshi=ahour/10;
                                write_com(0x0f);
                                //delay(2);
                               
                                write_com(0x80+0x40+8);
                                write_data(':');
                                write_com(0x80+0x40+7);
                                write_data(table1[ahourge]);
                                delay(1);
                                write_com(0x80+0x40+6);
                                //delay(2);
                               
                                write_data(table1[ahourshi]);
                                delay(1);
                                while(!key1);
                        }
                }
                if(key2==0)
                 {
                        delay(10);
                        if(key2==0)
                        {
                               
                                if(amin==59)                               
                                        amin=0;
                                else
                                        amin++;
                                aminge=amin%10;
                                aminshi=amin/10;
                                write_com(0x0f);
                                //delay(2);
                                write_com(0x80+0x40+10);
                                write_data(table1[aminge]);
                                delay(1);
                                write_com(0x80+0x40+9);
                        //        delay(2);
                                write_data(table1[aminshi]);
                                delay(1);
                                while(!key2);
                        }
                }
                if(key3==0)
                {
                        delay(10);
                        if(key3==0)
                        {
                                write_com(0x0c);
                                write_com(0x80+0x40);
                                for(i=0;i<11;i++)
                                write_data(nul[i]);
                                while(!key3);
                                break;       
                        }
                }
        }
}
void keyscan()                               
{       
         if(key1==0)                               
         {
                 delay(10);
                if(key1==0)
                {       
                        while(!key1);
                        time();
                       
                }       
        }   
         else if(key2==0)                       
         {
                 delay(10);
                if(key2==0)
                {
                        while(!key2)
                        {
                        ahourge=ahour%10;
                        ahourshi=ahour/10;
                        write_com(0x80+0x40+7);
                        write_data(table1[ahourge]);
                        delay(5);
                        write_com(0x80+0x40+6);
                        delay(2);
                        write_data(table1[ahourshi]);
                        aminge=amin%10;
                        aminshi=amin/10;
                        write_com(0x80+0x40+10);
                        write_data(table1[aminge]);
                        delay(5);
                        write_com(0x80+0x40+9);
                        delay(2);
                        write_data(table1[aminshi]);
                        write_com(0x80+0x40);
                        for(i=0;i<11;++i)
                        write_data(Alarm_1[i]);       
                        }
                        write_com(0x80+0x40);
                        for(i=0;i<11;i++)
                        write_data(nul[i]);

                }
         }
        else if(key3==0)                                       
         {
                 delay(10);
                if(key3==0)
                {       
                        while(!key3);
                                        ahourge=ahour%10;
                        ahourshi=ahour/10;
                        write_com(0x80+0x40+7);
                        write_data(table1[ahourge]);
                        delay(5);
                        write_com(0x80+0x40+6);
                        delay(2);
                        write_data(table1[ahourshi]);
                        aminge=amin%10;
                        aminshi=amin/10;
                        write_com(0x80+0x40+10);
                        write_data(table1[aminge]);
                        delay(5);
                        write_com(0x80+0x40+9);
                        delay(2);
                        write_data(table1[aminshi]);
                        write_com(0x80+0x40);
                        for(i=0;i<11;++i)
                        write_data(Alarm_1[i]);       
                        alarm();
                                       
                }
         }
else if(key4==0)                                       
                 delay(5);
                if(key4==0)
                {
                        while(!key4);
                        a=a+1;
                        if(a%2==0)
                        {
                                for(b=0;b<6;b++)
                                {
                                        sound=~sound;
                                        delay(200);
                                }
                                sound=1;
                        }
                        else if(a%2==1)
                        {
                                sound=0;
                                delay(300);
                                sound=1;
                                delay(300);
                        }
                         sound=1;
                }
         }
}
void lcd_init()                       
        lcden=0;
        lcdrw=0;
        write_com(0x38);
        write_com(0x0c);
        write_com(0x06);
        write_com(0x01);
        delay(2);
        write_com(0x80);
                        for(i=0;i<16;i++)
                        {
                                write_data(table2[i]);
                                delay(1);
                        }
}
void init()                               
        key1=1;key2=1;key3=1;key4=1;sec=0;a=0;sound=1;amin=1;
        //led=1;
        TMOD=0x11;
        TH1=0x3C;
        TL1=0xB0;
        EA=1;
        ET1=1;
        TR1=1;
}
void led1() interrupt 3               
{
        TH1=0x3C;
        TL1=0xB0;
        num1++;
        num2++;
        if(num1==10)       
        {
                num1=0;
                led=~led;
               
        }
        if(amin==min&&ahour==hour&&a%2==0)
                        sound=0;
}
void main()
{
        lcd_init();
        init();
        while(1)
        {
                keyscan();
       
        if(num2==20)               
        {
                num2=0;
                if(hour==23&&min==59&&sec==59)
                {
                        hour=0;min=0;sec=0;               
                }
                else if(sec==59&&min==59)
                {
                        sec=0;min=0;hour++;
                }
                else if(sec==59)
                {
                        sec=0;min++;
                }
                else
                        sec++;
                        minge=min%10;
                        minshi=min/10;
                        write_com(0x80+9);
                        write_data(table1[minge]);
                        delay(5);
                        write_com(0x80+8);
                //        delay(2);
                        write_data(table1[minshi]);
                        hourge=hour%10;
                        hourshi=hour/10;
                        write_com(0x80+6);
                        write_data(table1[hourge]);
                        delay(5);
                        write_com(0x80+5);
                //        delay(2);
                        write_data(table1[hourshi]);
                        write_com(0x80+7);
                        write_data(':');
                               
        }
        }
}


怎么仿真出现错误了

你想要实现的是什么功能呢?

1002925094                                

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top