在keil环境下,设有8bits符号数X存于外部RAM单元,按以下方式计算后的结果Y也存于外部 RAM单元,请按要求编写程序。 当x≥40时,Y=X的平方;当20<X<40时,Y=X/2;当X小于等于20时,Y=X的绝对值
时间: 2024-05-10 14:21:08 浏览: 104
KEIL中如何程序在 RAM 中运行的示例程序
4星 · 用户满意度95%
```
#include <reg51.h>
sbit rs=P2^0; //定义LCD的数据端口
sbit rw=P2^1;
sbit en=P2^2;
sbit busy=P0^7; //定义LCD的忙碌标志位
#define ADDR_X 0x8000 //定义X在外部RAM中的地址
#define ADDR_Y 0x8001 //定义Y在外部RAM中的地址
void initLCD(); //LCD初始化函数
void writeCommand(unsigned char cmd); //LCD写命令函数
void writeData(unsigned char dat); //LCD写数据函数
void display(unsigned char *str); //LCD显示字符串函数
void main()
{
unsigned char x,y;
x=*(__xdata unsigned char*)ADDR_X; //从外部RAM中读取X的值
if(x>=40)
y=x*x;
else if(x>20 && x<40)
y=x/2;
else
y=(x<0)?(-x):x;
*(__xdata unsigned char*)ADDR_Y=y; //将Y的值写入外部RAM中
initLCD(); //LCD初始化
display("X=");
writeData(x+'0'); //显示X的值
display(" Y=");
writeData(y+'0'); //显示Y的值
while(1); //程序循环
}
void initLCD()
{
writeCommand(0x38); //初始化
writeCommand(0x0c); //开显示
writeCommand(0x06); //光标移动设置
writeCommand(0x01); //清屏
}
void writeCommand(unsigned char cmd)
{
while(busy); //判断忙碌标志位
rs=0; //写命令
rw=0;
en=1;
P0=cmd;
en=0;
}
void writeData(unsigned char dat)
{
while(busy); //判断忙碌标志位
rs=1; //写数据
rw=0;
en=1;
P0=dat;
en=0;
}
void display(unsigned char *str)
{
while(*str)
{
writeData(*str);
str++;
}
}
```
阅读全文