历史上的今天
返回首页

历史上的今天

今天是:2024年11月27日(星期三)

正在发生

2020年11月27日 | stc89c51单片机和lcd12864显示sin函数图像

2020-11-27 来源:51hei

制作出来的实物图如下:

这是图像

这是图像


单片机源程序如下:

#include

#include

#include


#define uint unsigned int

#define uchar unsigned char


#define pi 3.1419526

uchar f=16;

uchar u=8;


sbit RS=P2^6;

sbit RW=P2^5;

sbit PSB=P3^2;     //lcd串行还是并行选择端

sbit RST=P3^4;     //lcd的复位端口

sbit EN=P2^7;



/*延时*/

void delay(uint x)

{

    uint y;

    for(;x>0;x--)

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

}



/*写入指令*/

void write_com(uchar com)

{


  RS=0;

  RW=0;

  EN=0;

  P0=com;

  delay(1);

  EN=1;

  delay(3);

  EN=0;

}


/*写入数据*/

void write_data(uchar num)

{


  RS=1;

  RW=0;

  EN=0;

  P0=num;

  delay(1);

  EN=1;

  delay(3);

  EN=0;

}


/*读取数据*/

uchar Read_data()

{

   uchar read;

   

   RS=1;

   RW=1;

   EN=0;

   delay(1);

      EN=1;

    delay(2);

    read=P0;

    EN=0;

    delay(5);

    return read;

}


/*画图清屏*/

void clear_lcd()

{

  uchar i,j;

write_com(0x34);      //扩充指令集动作

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

{

    write_com(0x80+i);

    write_com(0x80);

    for(j=0;j<32;j++)

    {

        write_data(0x00);

    }

}

     write_com(0x36);    //扩充指令集动作

    write_com(0x30);    //基本指令集动作


}


/***********画点函数**************/

void DrawPoint( unsigned char X, unsigned char Y, unsigned char Color )

{

    unsigned char Row , Tier , Tier_bit    ;

    unsigned char  ReadOldH , ReadOldL  ;

    write_com( 0x34 ) ; //写入扩充指令命令

    write_com( 0x36 ) ;//显示图象

    Tier = X >> 4 ;   

    Tier_bit = X & 0x0f ;

    if( Y < 32 )

    {

        Row = Y ;

    }

    else

    {

        Row = Y - 32 ;

        Tier += 8 ;

    }

    write_com( Row + 0x80 ) ;

   write_com( Tier + 0x80 ) ;

    Read_data() ;

    ReadOldH = Read_data() ;

    ReadOldL = Read_data() ;

    write_com( Row + 0x80 )  ;

    write_com( Tier + 0x80 ) ;

    if( Tier_bit < 8 )

    {

        switch( Color)

        {

            case 0 : ReadOldH &=( ~( 0x01 << ( 7 - Tier_bit ))) ; break ;

            case 1 : ReadOldH |= ( 0x01 << ( 7 - Tier_bit ))  ;  break ;

            case 2 : ReadOldH ^= ( 0x01 << ( 7 - Tier_bit ))    ; break ;

            default : break ;   

        }

       write_data( ReadOldH ) ;

       write_data( ReadOldL ) ;

    }

    else

    {

        switch(Color)

        {

            case 0 : ReadOldL &= (~( 0x01 << ( 15 - Tier_bit ))) ;  break ;

            case 1 : ReadOldL |= ( 0x01 << ( 15 - Tier_bit ))    ;  break ;

            case 2 : ReadOldL ^= ( 0x01 << ( 15 - Tier_bit ))  ;  break ;

            default : break ;

        }

        write_data( ReadOldH ) ;

        write_data( ReadOldL ) ;

    }

   write_com( 0x30 )    ;

}


/*液晶初始化*/

void lcd_init()

{

       PSB=1;

       RST=1;

       write_com(0x30);

       delay(1);

       write_com(0x3e);

       delay(1);

       write_com(0x0c);

       delay(1);

       write_com(0x01);

       delay(1);

}


//画水平直线

void Draw_xlabel_line(uchar x0,uchar x1,uchar y,uchar color)

{

      uchar temp;

      if(x0>x1)

      {

       temp=x1;

       x1=x0;

       x0=temp;

      }

      for(;x0<=x1;x0++)

      DrawPoint(x0,y,color);

}


  //画垂直直线

void Draw_row_line(uchar x,uchar y0,uchar y1,uchar color)

{

      uchar temp;

      if(y0>y1)

      {

       temp=y1;

       y1=y0;

       y0=temp;

      }

      for(;y0<=y1;y0++)

      DrawPoint(x,y0,color);

}


void sin_display()

{

       uchar i,j;

    lcd_init();     

     clear_lcd();

    //画y轴箭头

    DrawPoint(1,1,1);

    DrawPoint(3,1,1);

    DrawPoint(0,2,1);

    DrawPoint(4,2,1);

    Draw_row_line(2,0,60,1);  //画Y轴直线


    DrawPoint(126,60,1);

    DrawPoint(126,62,1);

    DrawPoint(125,59,1);

    DrawPoint(125,63,1);

    Draw_xlabel_line(2,127,61,1);  //画X轴直线


    for(i=3;i<127;i++)//画sin函数,

    {

        j=u*sin(pi*i/f)+30;

       DrawPoint(i,j,1);

    }

}


void main()

{


   sin_display();

   

}


推荐阅读

史海拾趣

Euroquartz公司的发展小趣事

Euroquartz在技术创新方面始终保持领先地位。公司推出的新款超薄MEMS滤波器系列产品,就是其技术实力的最好体现。这些滤波器在制造过程中,对互调失真及相位和振幅匹配等特性进行了优化,提供了从音频到3GHz的宽泛可选频率范围,最大功率可达200W。这些创新产品不仅满足了市场的需求,也进一步巩固了Euroquartz在电子元器件行业的领先地位。

EUPEC [eupec GmbH]公司的发展小趣事

EUPEC,全称欧洲电力半导体与电子公司(European Semiconductors and Electronics Company),成立于1990年。它是由西门子和德国另一家大型电器公司AEG生产电力半导体器件的两个部门合并而成。这次合并标志着EUPEC正式进入电力半导体领域,凭借其强大的技术背景和丰富的行业经验,EUPEC迅速在市场中占据了一席之地。

Hama公司的发展小趣事

为了提升产品的市场竞争力,H&D Wireless积极寻求技术合作。20XX年,公司与全球领先的微控制器解决方案提供商爱特梅尔(Atmel)携手,共同推出了基于AVR®微控制器的IEEE802.11b+g Wi-Fi解决方案。这一合作不仅提升了H&D Wireless产品的功耗效率和连接稳定性,还显著缩短了客户的产品开发周期。通过不断优化产品性能,H&D Wireless的Wi-Fi解决方案在市场上获得了广泛认可。

Advanced Power Solutions公司的发展小趣事

Advanced Power Solutions公司非常重视人才培养和企业文化建设。公司注重员工的职业发展和培训,为员工提供了广阔的职业发展空间和学习机会。同时,公司还倡导开放、创新的企业文化,鼓励员工提出新的想法和建议。这种积极向上的企业文化吸引了大量优秀人才的加入,也为公司的持续发展提供了强大的动力。

以上五个故事框架仅用于说明Advanced Power Solutions公司可能的发展路径和成就,并不代表公司的实际历史。在实际撰写时,需要根据公司的具体情况进行调整和补充。

Anytek Technology Corporation Ltd公司的发展小趣事

Anytek Technology Corporation Ltd自创立之初,便敏锐地捕捉到了车载电子产品的市场潜力。2003年,公司果断进军车载及行车记录仪领域,凭借前瞻性的市场洞察力和技术积累,迅速在行业内崭露头角。当时,随着汽车保有量的不断增加,行车记录仪作为保障行车安全、记录行车过程的重要设备,市场需求日益旺盛。Anytek凭借高品质的产品和专业的服务,赢得了广大消费者的信任和好评。

Everspin公司的发展小趣事

Everspin与众多知名企业和机构建立了合作伙伴关系,如戴尔电脑、Koyo Electronics Industries等。这些合作伙伴的认可和支持不仅为Everspin带来了更多的商业机会,也进一步提升了其在行业中的影响力。同时,Everspin还积极与客户沟通合作,根据客户需求提供定制化的解决方案,赢得了客户的广泛赞誉。

问答坊 | AI 解惑

多芯电缆测试仪的研制

1 引言  种类繁多的通讯电缆、控制电缆在各种仪器和控制设备中大量使用。电缆线是否良好导通、线间[绝缘电阻[是否满足要求,直接影响到电器设备的正常运行。耐压绝缘电阻是衡量电气绝缘材料性能的一个重要指标。传统的摇表测量绝缘电阻的方法主要 ...…

查看全部问答>

一个研发总监的新职业方向

第一章: 有一位朋友,失恋了,写了一片博客文章,题目叫“走出”,缅怀曾经十几年的情感,曾经的欢笑和揪心,以及虽然争执、但仍留存内心的那份淡淡的失落。 这份情感和我现在的心境一模一样。 在07年的1月17日,劳动合同到期的前一个整月的日 ...…

查看全部问答>

急!!怎么把2450 IIC的clock降到100k??

如题。IICCLK=MCLK/16。现在是250k。我试了一下,把IICCON = 0xE1,测试发现弄的经常无应答。谁能教我改一下~~~…

查看全部问答>

fpga&quartus7.2

我使初学者 quartus7.2下编写decoder程序 源代码如下 library ieee; use ieee.std_logic_1164.all; entity decoder is port(sel:std_logic_vector(2 downto 0);         enable:std_logic;         ...…

查看全部问答>

GS5810工作原理

GS5810是一款高效率,1.5MHz固定工作频率,电流模式PWM单片式降压稳压器,可以提供输出电压可调品种和1.2V 1.8V等固定输出电压的品种。稳压器在无负载时的工作电流为300uA;当处于关断时,工作电流降到1uA以下。输入工作电压范围为2.5V至6.5V,非常 ...…

查看全部问答>

2600A系列数字源表异步与同步并行测试

并行脚本运行是运行TSP-Link[1]网络中远程脚本的能力。当初推出2600系列数字源表时,脚本只能在TSP-Link网络的一个节点上运行。由GPIB唯一地址定义的这个节点(主节点),能够控制其他节点(远程节点)的源和测量动作,但这种操作只能按顺序进行。 ...…

查看全部问答>

应届生一般起薪多少

各位 搞电子的应届生一般起薪多少啊,(学校一般,水平凑活,关系没有)…

查看全部问答>

帮忙解决用红外控制单片机

我不知道那个遥控器的码,应该怎么办…

查看全部问答>

ADuC7060例程,只一个MAIN文件即可工作吗?

在看ADI的ADuC7060 CPU的编程问题,看到它提供的IAR例程,只有一个main文件,包含的专用文件也只有一个:Analogdevices\\ioaduc7060.h 而在文件夹下还有.S文件等,但加入工程后编译不通过。 在使用STM32时,使用了专用的startup.s等,包含必要的 ...…

查看全部问答>