#define uchar unsigned char
#define uint unsigned int
#define iDat 1 //数据标志
#define iCmd 0 //指令标志
#define LCDb_RS 0x20 //定义四个控制引脚
#define LCDb_RW 0x40
#define LCDb_E 0x80
#define LCDb_RST 0x04
#define LCDb_L1 0x80 //第一行的地址
#define LCDb_L2 0x90 //第二行的地址
#define LCDb_L3 0x88 //第三行的地址
#define LCDb_L4 0x98 //第四行的地址
#define LCDb_SET_RS P1OUT|=LCDb_RS //四个控制管脚的控制 *** 作
#define LCDb_SET_RW P1OUT|=LCDb_RW
#define LCDb_SET_E P1OUT|=LCDb_E
#define LCDb_SET_RST P8OUT|=LCDb_RST
#define LCDb_CLR_RS P1OUT&=~LCDb_RS
#define LCDb_CLR_RW P1OUT&=~LCDb_RW
#define LCDb_CLR_E P1OUT&=~LCDb_E
#define LCDb_CLR_RST P8OUT&=~LCDb_RST
#define LCDb_DO P4OUT //输出数据总线端口定义
#define LCDb_FUNCTION 0x38 // 液晶模式为8位,2行,58字符
#define LCDb_BASCMD 0x30 // 基本指令集
#define LCDb_CLS 0x01 // 清屏
#define LCDb_HOME 0x02 // 地址返回原点,不改变DDRAM内容
#define LCDb_ENTRY 0x06 // 设定输入模式,光标加,屏幕不移动
#define LCDb_C2L 0x10 // 光标左移
#define LCDb_C2R 0x14 // 光标右移
#define LCDb_D2L 0x18 // 屏幕左移
#define LCDb_D2R 0x1C // 屏幕又移
#define LCDb_ON 0x0C // 打开显示
#define LCDb_OFF 0x08 // 关闭显示
unsigned char RXData;
unsigned char Result[5]; //整数转化成字符串,给LCD显示
/
函数名称: Delayms
功 能: 延时指定毫秒(8M晶振)
参 数: MS--延时的毫秒数
返回值 : 无
/
void Delayms(uint MS)
{
uint i,j;
for( i=0;i<MS;i++)
for(j=0;j<1141;j++);
}
/
函数名称: Delayus
功 能: 延时指定微秒(8M晶振)
参 数: US--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值 : 无
/
void Delayus(uint US)
{
uint i;
US=US5/4;
for( i=0;i<US;i++);
}
void LCD12864_portini()
{
P1DIR=0xFF;
P4DIR=0xFF;
P8DIR=0xFF; //Trig =P8^3输出;
P8OUT |=LCDb_RST;
// P1OUT=0xFF;
}
/
函数名称: LCD12864_sendbyte
功 能: 向12864液晶写入一个字节数据或者指令
参 数: DatCmd--为iDat时是数据,为iCmd时是指令
dByte--为写入12864的数据或者指令
返回值 : 无
/
void LCD12864_sendbyte(uchar DatCmd, uchar dByte)
{
if (DatCmd == iCmd) //指令 *** 作
LCDb_CLR_RS;
else
LCDb_SET_RS;
LCDb_CLR_RW; //写 *** 作
LCDb_SET_E;
LCDb_DO = dByte; //写入数据
//Delayus(500);
Delayms(1);
LCDb_CLR_E;
}
/
函数名称: LCD12864_sendstr
功 能: 向12864液晶写入一个字符串
参 数: ptString--字符串指针
返回值 : 无
/
void LCD12864_sendstr(uchar ptString)
{
while((ptString)!='\0') //字符串未结束一直写
{
LCD12864_sendbyte(iDat, ptString++);
}
}
/
函数名称: LCD12864_clear
功 能: 12864液晶清屏
参 数: 无
返回值 : 无
/
void LCD12864_clear(void)
{
LCD12864_sendbyte(iCmd,LCDb_CLS);
Delayms(2);// 清屏指令写入后,2ms 的延时是很必要的!!!
}
/
函数名称: LCD12864_gotoXY
功 能: 移动到指定位置
参 数: Row--指定的行
Col--指定的列
返回值 : 无
/
void LCD12864_gotoXY(uchar Row, uchar Col)
{
switch (Row) //选择行
{
case 2:
LCD12864_sendbyte(iCmd, LCDb_L2 + Col); break; //写入第2行的指定列
case 3:
LCD12864_sendbyte(iCmd, LCDb_L3 + Col); break; //写入第3行的指定列
case 4:
LCD12864_sendbyte(iCmd, LCDb_L4 + Col); break; //写入第4行的指定列
default:
LCD12864_sendbyte(iCmd, LCDb_L1 + Col); break; //写入第1行的指定列
}
}
/
函数名称: LCD12864_initial
功 能: 12864液晶初始化
参 数: 无
返回值 : 无
/
void LCD12864_initial(void)
{
Delayms(100); // 等待内部复位
LCD12864_portini(); //端口初始化
LCD12864_sendbyte(iCmd, LCDb_FUNCTION); //功能、模式设定
LCD12864_sendbyte(iCmd, LCDb_ON); //打开显示
LCD12864_clear(); //清屏
LCD12864_sendbyte(iCmd, LCDb_ENTRY); // 输入模式设定
}
void Int_char(int data)
{
if(data/1000)
{
Result[0]=data/1000+'0';
Result[1]=data/100%10+'0';
Result[2]=data/10%10+'0';
Result[3]=data%10+'0';
Result[4]=0;
}
else if(data/100)
{
Result[0]=data/100+'0';
Result[1]=data/10%10+'0';
Result[2]=data%10+'0';
Result[3]=0;
Result[4]=0;
}
else if(data/10)
{
Result[0]=data/10%10+'0';
Result[1]=data%10+'0';
Result[2]=0;
Result[3]=0;
Result[4]=0;
}
else
{
Result[0]=data%10+'0';
Result[1]=0;
Result[2]=0;
Result[3]=0;
Result[4]=0;
}
}
这使msp430单片机的程序,只要在主函数中调用函数,就是调用这个函数Int_char(tmp);每一次循环调用一次,这样可以实时显示这个变化温度数值
LCD12864_gotoXY(2,4);
LCD12864_sendstr(" ");
LCD12864_gotoXY(1,0); //第1行,第1列显示
LCD12864_sendstr("正在检测");
LCD12864_gotoXY(2,0); //第2行,第1列显示
LCD12864_sendstr("距离是:");
Int_char(tmp);
你好!
Keil5本身并不提供直接生成流程图的功能,但可以使用一些工具来生成流程图。
下面介绍一些生成Keil5程序流程图和子程序流程图的方法:
使用Doxygen工具
Doxygen是一种自动化文档生成工具,它可以自动分析源代码并生成各种文档,包括流程图。在Keil5中,可以将程序文件导出为一个文件夹,然后使用Doxygen对该文件夹进行分析,生成程序流程图和子程序流程图。具体使用方法可以参考Doxygen的官方文档。
使用GraphViz工具
GraphViz是一种开源的图形可视化工具,它可以生成各种流程图、状态图等。在Keil5中,可以将程序文件导出为一个dot文件,然后使用GraphViz将该文件转换成流程图。具体使用方法可以参考GraphViz的官方文档。
使用Cscope工具
Cscope是一种代码浏览器,它可以方便地查找函数、变量、宏等。在Keil5中,可以使用Cscope查找程序中的函数和调用关系,然后手动绘制流程图和子程序流程图。
数控子程序怎么使用,请看下面具体介绍:
1在主程序中,调用子程序的指令是一个程序段,其格式随具体的数控系统而定,FANUC系统子程序调用格式为
M98
P--L--
式中
M98--子程序调用字;p--子程序列号;
L--子程序调用次数。可以看出,子程序由程序调用字、子程序号和调用次数组成
2.子程序的返回:子程序返回主程序用指令M99,它表示子程序运行结束,请返回到主程序。
3子程序的嵌套:子程序调用下一级子程序称为嵌套。上一级子程序与下一级于程序的关系,与主程序与第一层子程序的关系相同。子程序可以嵌套多少层由具体的数控系统决定。
希望可以帮到你!
一个程序打开另外一个程序=可以
主程序显示子程序=可以(XXXshow)
主程序生成子程序=
难道你要做一个VB开发工具
否则生成(编译)这种功能很难实现!
如果你能弄到"VB60程序"的源代码希望分享下
-
-|||
PS如果你只是想让主程序"释放"另一个程序的话可以使用:外接程序-外接程序管理器中的"VB6
资源管理器",吧一个exe文件添加进资源管理器中,然后用Binary
As
#1输出
是不是按键部份有问题?
WAIF_KEY:
JB KEY1,WM1
LCALL DISP
JNB KEY1,BP1
BP1:
MOV A,MIN 中,JNB那里,本来是判断按键是否松开,若松开,则运行BP1。若未松则等待。你这程序是不管KEY1有没松开,程序都运行到BP1
应改为:
LCALL DISP
JNB KEY1,$-3;即未松开,转上一条指令。就是等待松开,同时显示。这里LCALL 是三字节指令,占3 个单元,所以要$-3 。
同样后面的KEY2、KEY3也同样处理。
程序是按行来处理的,每行是16个点阵,需要2个字节来存储,根据程序表达的意思,点阵表也是按行来建立的,而每次取数只能一个字节,所以i这个行号需要乘以2,ia是每行的字节位置,取值范围为1,2
以上就是关于如何在12864(带子库)编写显示变化数字的子程序中文显示程序已会。全部的内容,包括:如何在12864(带子库)编写显示变化数字的子程序中文显示程序已会。、keil5程序如何生成主程序流程图以及各子程序流程图、数控子程序怎么使用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)