历史上的今天
今天是: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(); }
上一篇:单片机P1开关控制低四位流水灯
下一篇:超声波测距单片机C程序
史海拾趣
|
1 引言 种类繁多的通讯电缆、控制电缆在各种仪器和控制设备中大量使用。电缆线是否良好导通、线间[绝缘电阻[是否满足要求,直接影响到电器设备的正常运行。耐压绝缘电阻是衡量电气绝缘材料性能的一个重要指标。传统的摇表测量绝缘电阻的方法主要 ...… 查看全部问答> |
|
第一章: 有一位朋友,失恋了,写了一片博客文章,题目叫“走出”,缅怀曾经十几年的情感,曾经的欢笑和揪心,以及虽然争执、但仍留存内心的那份淡淡的失落。 这份情感和我现在的心境一模一样。 在07年的1月17日,劳动合同到期的前一个整月的日 ...… 查看全部问答> |
|
如题。IICCLK=MCLK/16。现在是250k。我试了一下,把IICCON = 0xE1,测试发现弄的经常无应答。谁能教我改一下~~~… 查看全部问答> |
|
我使初学者 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是一款高效率,1.5MHz固定工作频率,电流模式PWM单片式降压稳压器,可以提供输出电压可调品种和1.2V 1.8V等固定输出电压的品种。稳压器在无负载时的工作电流为300uA;当处于关断时,工作电流降到1uA以下。输入工作电压范围为2.5V至6.5V,非常 ...… 查看全部问答> |
|
并行脚本运行是运行TSP-Link[1]网络中远程脚本的能力。当初推出2600系列数字源表时,脚本只能在TSP-Link网络的一个节点上运行。由GPIB唯一地址定义的这个节点(主节点),能够控制其他节点(远程节点)的源和测量动作,但这种操作只能按顺序进行。 ...… 查看全部问答> |
|
在看ADI的ADuC7060 CPU的编程问题,看到它提供的IAR例程,只有一个main文件,包含的专用文件也只有一个:Analogdevices\\ioaduc7060.h 而在文件夹下还有.S文件等,但加入工程后编译不通过。 在使用STM32时,使用了专用的startup.s等,包含必要的 ...… 查看全部问答> |




