导航:首页 > 操作系统 > 单片机屏程序

单片机屏程序

发布时间:2022-06-22 10:26:11

1. 怎么编写单片机——TFT彩屏汉字程序

你现在看到的这两个函数LCD_ShowString()ChineseChar()是你在上层调用的,具体的函数定义你要去看底层是怎么实现的。我先简单介绍下着两个函数
LCD_ShowString(12,60,colors[0],colors[7],"-");应该是讲屏幕上x=12,y=60的地方显示一个“-”字符,字符颜色应该是你定义的colors[0],TFT屏的背景颜色是colors[7],这两个是你函数库自己定义的,可以改。
ChineseChar(20,60,1,colors[0],colors[7],1); //带 这个函数和上面那个函数大致相同,至于为什么会显示“带”,是因为最后那个1,这个程序你应该定义一个数组,在这个数组里面对你所要显示的字全部编码并存在这个数组中,最后你只需用想调用数组下标那样调用这个汉子。
至于你想显示班级、姓名 只需用把班级姓名进行编码就可以调用这个ChineseChar()函数进行显示
其实很简单的,只需用该几步就可以达到你想要的,不难~~

2. 单片机如何写TFT彩屏的程序

武汉 谷鑫科技专业从事单片机驱动TFT彩屏的研发和生产。
下面是TFT6448BS-5.7模块的驱动程序:
sfr AUXR = 0x8e;//////////////////////////////////注意增加该语句。
#include <reg51.h>
#include <absacc.h>
#define X_ADDR XBYTE[0x0000]
#define Y_ADDR XBYTE[0x0100]
#define CMD XBYTE[0x0200]
#define DAT XBYTE[0x0300]
unsigned char code zk[32] = {//请
0x00, 0x47, 0x20, 0x23, 0x00, 0xEF, 0x20, 0x23, //left
0x22, 0x23, 0x22, 0x23, 0x2A, 0x32, 0x22, 0x02,
0x48, 0xFC, 0x40, 0xF8, 0x40, 0xFE, 0x08, 0xFC, //right
0x08, 0xF8, 0x08, 0xF8, 0x08, 0x08, 0x28, 0x10};
unsigned char code picture[];
main()
{
unsigned int x,y,x2,y2;
unsigned int i;
unsigned char key,x1,y1,j,k,z,m,n,bright;
AUXR = 0x02;//////////////////////////////////注意增加该语句。
bright = 8;

key = 0;//////////////////////////////////////选择液晶屏型号
//0:TFT2432;
//1:TFT3224;
//2:TFT480234
//3:TFT480272
//4:TFT6448
//5:TFT8048
//6:TFT8060
//7:TFT8060

if(P13==4)
{
if(key==0){x2=240;y2=320;x1=6; y1=16; goto loop1;}//x1/32,y1/20
if(key==1){x2=320;y2=240;x1=8; y1=12; goto loop1;}
if(key==2){x2=480;y2=240;x1=12;y1=12; goto loop1;}
if(key==3){x2=480;y2=272;x1=12;y1=14; goto loop1;}
if(key==4){x2=640;y2=480;x1=16;y1=24; goto loop1;}
if(key==5){x2=800;y2=480;x1=20;y1=24; goto loop1;}
if(key==6){x2=800;y2=600;x1=20;y1=30; goto loop1;}
if(key==7){x2=800;y2=600;x1=20;y1=30; goto loop1;}//亮度测试
}

loop1:
bright--;if(bright==255)bright=7;
CMD = 0x06;
DAT = bright;

///////////////////////以下是清屏功能///////////////////////////////////////
//用红色清屏
CMD = 0x04;DAT = 0xe0;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////

while(key==7)
{
for(bright=7;bright!=255;bright--)
{
CMD = 0x06;
DAT = bright;
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
}
CMD = 0x20;//关断显示,poweroff
for(y=0;y<15;y++){x=1;while(x!=0)x++;}
key = P1&0x07;
}

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//用红色清屏
CMD = 0x04;DAT = 0x1c;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//用红色清屏
CMD = 0x04;DAT = 0x03;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//用红色清屏
CMD = 0x04;DAT = 0x00;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//用红色清屏
CMD = 0x04;DAT = 0xff;//背景色
CMD = 0x08;//启动填充操作
for(y=0;y<260*12;y++);//延时16.6毫秒
CMD = 0x00;//退出填充操作
///////////////////////以上是清屏功能///////////////////////////////////////

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

///////////////////////以下是测试8点写功能///////////////////////////////////////
//8点写模式下清屏DAT=0;
CMD = 0x02;DAT=0xff;//前景色
CMD = 0x04;DAT=0x00;//背景色
CMD = 0x01;
for( y=0;y<y2;y++ )//用前景色清屏
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y; ;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for( x=0;x<(x2/8);x++ )DAT=0x55;
}

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

for( y=0;y<y2;y++ )//用背景色清屏
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for( x=0;x<(x2/8);x++ )DAT=0x0f;
}

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//8点写模式下写单色图片
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for (y=0; y<80; y++)
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for ( n=0; n<10; n++) DAT = picture[y*10+n];
}

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//8点写模式下写汉字
CMD = 0x02;DAT=0x00;//前景色
CMD = 0x04;DAT=0xff;//背景色
CMD = 0x01;
for ( n=0; n<=15; n++ )
{
X_ADDR = 0;
X_ADDR = 0;
Y_ADDR = n;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
DAT = zk[n];
DAT = zk[n+16];
}

for(y=0;y<1;y++){x=1;while(x!=0)x++;}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

//以下是测试单点写
CMD = 0x00;
i=0;
for(j=0;j<x1;j++)//20,x/40
{for (z=0;z<y1;z++)//24,y/20
{for (k=0;k<20;k++)
{x=j*40;
y=z*20+k;
X_ADDR = x;
if(key!=0)X_ADDR = x/256;
Y_ADDR = y;
if( ((key==1)|(key==2))==0 )Y_ADDR = y/256;
for (m=0;m<40;m++)DAT = i;
}
i++;
}
}
for(y=0;y<1;y++){x=1;while(x!=0)x++;}

http://tieba..com/club/10621043/p/14619152

3. 单片机与触摸屏相互控制的程序怎么写

虚空古示人(){

TMOD = 0x59;
TCON = 0×00;
TH1 = 0x3C符号;
TL1 = 0XAF;
TH0 = 0;
TL0 = 0;
TR0 = 1;
TR1 = 1;
ET1 = 1;
ET0 = 0;
EA = 1;
}
无效时间0/1/2()中断3
{
一个++;
//这个调用根据您的电路图显示程序的书面程序
}
无效时间1()中断1
{
B ++;如果
(二== 20){

/调用用于显示时间的子程序的数目的变量增加提高
B = 0;
}
TH1 = 0x3C符号;
TL0 = 0XAF;
}

此时上面的计算是错误的,因为中断优先级
不够精确,那么调整TH1 TL1的值

4. 单片机显示屏程序放中断

C51单片机用的最多的中断就是外部信号中断和定时器中断,你可以根据你的控制需要来设置中断方式。

5. 单片机屏幕循环显示数字程序设计

#include<reg51.h>
#define INT8U unsigned char
#define INT16U unsigned int
//共阴极数码管段码
INT8U SEG_CODE[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F, //0~9
};
void delay_ms(INT16U x)
{
INT8U t;while(x--) for(t=0;t<120;t++);
}
void main()
{ INT8U i;
while(1)
{
for(i=0;i<9;i++)
{
P0=SEG_CODE[i];
delay_ms(550);
}
}
}
这是0~9的程序,给个采纳咯,注意是共阴极的数码管

6. 单片机控制串口屏的程序,很急!!!!!

S2BUF = UART_Num[0];你只发送一次,但你的数组却有BYTE idata UART_Num[8]={
0x00,0x55,0x03,0xe8,0x00,0x02,0xea,0xaa};这么多,也就是说你只发送开头的0x00

7. 51单片机 12232液晶屏的操作程序

i_data&=0xf0; // i_data=i_data&0xf0; 高位字节与上1则不变,低四位则被清零 ,因为该12864为串行方式写入,一次需写入8个bit,故采用循环结构比较好操作,建议多看DATASHEET以及C语言相关

8. 关于单片机液晶屏LCD12864的程序

/*****************************************************************

*程序名称:带汉字库的12864液晶显示模块驱动

*程序功能:显示字符 、汉字和图片

*开发工具:Kile

* MCU型号:AT89S52-24PU

*时钟频率:11.0592MHZ

*程序作者:yuan

*版权说明:yuan

*****************************************************************/
#include<reg52.h>
#include "lcd.h"
#include "util.h"

sbit E=P1^5;//脉冲使能
sbit RW=P1^6;//读写选择
sbit RS=P1^7;//数据命令选择
sbit rst=P3^6;//12864复位

// 延时ms函数:

// 12864检查状态函数:
void Check12864State(void)
{

P0=0xff;
E=0;//读状态前三控制线的状态
RS=0;
RW=1;
E=1;//拉高,读状态
while((P0&0x80)==0x80);//等待空闲
E=0;//写命令后三控制线的状态
RS=1;
RW=0;

}

// 12864写命令函数:
void Write12864Command( unsigned char com)
{

Check12864State();//检查状态
P0=com;//赋值
E=0;//写命令前三控制线的状态
RS=0;
RW=0;
E=1;//拉高,写命令
E=0;//写命令后三控制线的状态
RS=1;
RW=1;

}

//12864写数据函数:
void Write12864Data( unsigned char dat)
{

Check12864State();//检查状态
P0=dat;//赋值
E=0;//写数据前三控制线的状态
RS=1;
RW=0;
E=1;//拉高,写数据
E=0;//写数据后三控制线的状态
RS=0;
RW=1;

}

//在指定的位置显示字符串(汉字和ASCII码字符)函数:
void LCD12864DisplayString( unsigned char y,unsigned char x, unsigned char *pstr)
//y-行数值0-3,x-列数值0-7,pstr-字符串指针
//12864可以显示32个汉字(四行每行8个),一个地址对应一个汉字
//可以显示64个ASCII码字符(四行每行16个),一个地址对应两个字符
//为了实现自动换行功能,这个函数比较繁琐
{

unsigned char row,n=0;
Write12864Command(0x30);//基本指令
Write12864Command(0x06);//地址计数器自动加以,光标右移
switch(y)//根据行号选择行地址
{

case 0:row=0x80;break;//第一行首地址
case 1:row=0x90;break;//第二行首地址
case 2:row=0x88;break;//第三行首地址
case 3:row=0x98;break;//第四行首地址
default:;

}

Write12864Command(row+x);//写地址
while(*pstr!='\0')
{

Write12864Data(*pstr);//写字符
pstr++;
n++;//计数
if((n+x*2)==16)//如果一行写完 ,继续写第二行
{
if(y==0) Write12864Command(0x90);//写下一行地址
else if(y==1) Write12864Command(0x88);//写下一行地址
else if(y==2) Write12864Command(0x98);//写下一行地址
else ;

}
else if((n+x*2)==32)//如果第二行写完 ,继续写第三行
{

if(y==0) Write12864Command(0x88);//写下一行地址
else if(y==1) Write12864Command(0x98);//写下一行地址
else ;
}

else if((n+x*2)==48)//如果第三行写完 ,继续写第四行
{
if(y==0) Write12864Command(0x98);//写下一行地址
else ;
}
else ;
}

}

//图片模式清屏函数:
void Clear12864Screen()
{

unsigned char i,j;
Write12864Command(0x34);//功能设定:8位控制方式,使用扩充指令
Write12864Command(0x36);//使用扩充指令,绘图显示控制
for(i=0;i<32;i++)

//ST7920可控制256*32点阵(32行256列),而12864液晶实际的行地址只有0-31行,

//12864液晶的32-63行的行是0-31行地址从第128列划分一半出来的,所以分为上下两半屏,

//也就是说第0行和第32行同属一行,行地址相同;第1行和第33行同属一行,以此类推

{

Write12864Command(0x80|i);//写行地址(垂直地址)
Write12864Command(0x80);//写列地址(水平地址)
for(j=0;j<32;j++)
Write12864Data(0x00);//清屏

}

}

//在任意位置显示任意大小的图片函数:

void LCD12864DisplayPictrue(unsigned char y,unsigned char x,

unsigned char px,unsigned char py, unsigned char *pp)

//y-起始行(数值0-63),x-起始列(16位宽,数值0-7),

//px-图片宽度,py-图片高度,pp-指针指向图片数组

//因为上下屏的地址不连续,要在任意位置显示完整的图像,处理起来比较繁琐

{

unsigned char i,j,k;
Clear12864Screen();//清屏
if(y<32)//如果起始行在上半屏
{

k=32-y;//算出上半屏的行数
for(i=0;i<k;i++,y++)//上半屏行数
{
Write12864Command(0x80|y);//写行地址(垂直地址)
Write12864Command(0x80|x);//写列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//写图片数据

}

y=0;//下半屏起始行,接上半屏继续写数据
for(;i<py;i++,y++)//下半屏剩下的行数
{

Write12864Command(0x80|y);//写行地址(垂直地址)
Write12864Command(0x80|(8+x));//写列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//写图片数据

}

}

else //如果起始行在下半屏

{

for(i=0;i<py;i++,y++)//行数
{
Write12864Command(0x80|(y-32));//写行地址(垂直地址)
Write12864Command(0x80|(8+x));//写列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//写图片数据

}

}

}

void Clear12864Text()
{
Write12864Command(0x34);//清屏
DelayMs(5);
Write12864Command(0x30);//清屏
DelayMs(5);
Write12864Command(0x01);//清屏
DelayMs(5);
}

//12864初始化函数:
void Initialize12864()
{

rst=0;//复位12864
DelayMs(30);
rst=1;
DelayMs(20);
Write12864Command(0x30);//功能设定:8位控制方式,使用基本指令
Write12864Command(0x08);//显示关
Write12864Command(0x01);//清屏
Write12864Command(0x06);//地址计数器加一、光标右移
Write12864Command(0x0c);//显示开

}

带字库的驱动

9. 这两个单片机用液晶屏程序(函数)如何理解

大致看了看,应该挺简单的。但是符号"<<="忘记什么意思了。我再看看,呵呵.......
//////////////////////////////////////////////////////////////////
void LCD_WrDat(U8 data) //该函数功能应该是写一字节数据到存储器或者说是到液晶屏吧
{
U8 i=8;
LCD_Data_Out &= ~LCD_CS; //LCD_CS=0
LCD_Data_Out |= LCD_CD; //LCD_CD=1
LCD_Data_Out&=~LCD_SCL; //LCD_SCL=0
//以上是各控制信号满足写数据的条件
//asm("nop");
while(i--) //(i=8)以下循环8次
{
if(data&0x80) //如果所传送的数据第八位为1
{LCD_Data_Out|=LCD_SDA;} //则LCD_SDA=0
else{LCD_Data_Out&=~LCD_SDA;} //否则LCD_SDA=1
//以上是判断第八位是否为1后SDA信号的输出情况
LCD_Data_Out|=LCD_SCL; //LCD_SCL=1
asm("nop"); //nop
//asm("nop");
LCD_Data_Out&=~LCD_SCL; //LCD_SCL=0
data<<=1; //执行数据传输操作(个人认为数据传输完毕后有一位左移功能,函数循环了八次刚好是传输了一字节,传输方式是先从最高位传起)
}
LCD_Data_Out |= LCD_CS; //数据传输完毕后 LCD_CS=1
}

void LCD_WrCmd(U8 cmd) //该函数功能应该是写一字节数据到CMD
{
U8 i=8; //以下的说明和上一函数没有太大区别,主要是一些控制信号的取值不一样

LCD_Data_Out &= ~LCD_CS;
LCD_Data_Out &= ~LCD_CD;
LCD_Data_Out&=~LCD_SCL;
//asm("nop");
while(i--)
{
if(cmd&0x80){LCD_Data_Out|=LCD_SDA;}
else{LCD_Data_Out&=~LCD_SDA;}
LCD_Data_Out|=LCD_SCL;
asm("nop");
//asm("nop");
LCD_Data_Out&=~LCD_SCL;
cmd<<=1;
}
LCD_Data_Out |= LCD_CS;
}
总的来讲以上函数不是很难,主要是一些控制信号SDA CS SCL等等的取值问题,这在LCD说明书上应该有说明。在满足各个数据传输信号要求的情况下进行数据传输,每一个函数都是进行一个字节的传输操作。水平有限,难免错误。

10. led滚动显示屏单片机程序怎么编啊

啊我之前做了个数码管的时钟所以差不错,主程序一直循环读键盘,然后定时器中断写数字,按钮里面改参数,让定时器引用就行了

阅读全文

与单片机屏程序相关的资料

热点内容
慎小嶷十天突破雅思口语pdf 浏览:603
解压数据丢失 浏览:47
查一下电脑上文件夹锁 浏览:294
加密聊天消息密钥输入什么 浏览:541
32位windows编译器 浏览:962
ipad邮件无法连接发件服务器地址 浏览:61
php接收websocket 浏览:564
碧蓝航线如何查账号服务器 浏览:835
msx命令 浏览:750
怎么购买app内购 浏览:490
vivo手机怎么把安卓系统提示关闭 浏览:964
汽油分配控制单片机 浏览:579
python字典最大值最小值求和 浏览:281
php7pdo扩展 浏览:941
粉笔app如何看行测 浏览:817
如何举报不正当app 浏览:255
智能家居算法组 浏览:56
解压动画寿司 浏览:520
python3怎么连接mysql 浏览:425
程序员晒出一段代码 浏览:275