#include<../SysVar.h>
//
//
//MC8051使用第1要点:
//MC8051没有IO口,对P0,P1,P2,P3的读写没有任何的意义
//MC8051只有一个定时器,TimerSetTime定时基准是50MS为单位,ET0=1并且EA=1时候,中断timer0(void)发送。MC8051没有计数器,操作SMOD等寄存器没有任何意义
//MC8051有两个串口,Uart1Send和Uart2Send用于发送数据。当接收到数据并且EA=1;;ES=1;时候,中断uart(void) 会执行 ;操作SCON等寄存器没有任何意义
//总之,
//使用MC8051与常见51单片机,就是没有IO,并且定时器和串口的使用方法和普通的51单片机不同外,其他不变,可以用汇编也可以用KEILC编译;
//关键是你要生成一个MC8051.HEX文件放在你先建的工程MC8051文件夹里面
//
//
//MC8051使用第2要点:
//MC8051内核内置了一些函数,比如设置定时器TimerSetTime,串口发送数据Uart1Send,
//我们约定,通过修改某些特殊功能寄存器CmdAdr的值来调用这些函数,CmdAdr的定义见include<../SysVar.h>头文件,用户不得修改
//
//
//MC8051使用第3要点:
//C51单片机的存储方式是大端结构;而HMI产品是小端结构,所以在C51单片机用short类型赋值的时候注意调整
//大小端这点不懂的话请百度搜索一下
//
//
//MC8051使用第4要点:
//MC8051内核的外部存储器空间被隐射到控件的HMI变量上,改变MC8051的外部存储器就是改变控件的显示
//大家都知道用C语言如何访问51单片机的外部RAM吧,那就是XBYTE[???]=????;
//
//屏幕刷新控制:mEn=0,暂停刷新;mEn=1,立即刷新
//该函数可以控制屏幕是否变化;用户应该在给“控件HMI变量”赋值的时候先禁止屏幕刷新;赋值完毕再开启屏幕刷新功能
//////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////第一部分,MC8051内部函数/////////////////////////
//////////////////////////////////////////////////////////////////////////////////
void RefreshLCD(unsigned char mEn)
{
CmdAdr1=mEn; //命令参数
CmdAdr=1; //命令代码
}
//系统中有一个定时器,用户可以调整它的定时时间间隔。时间间隔以50豪秒为基准单位,比如mMS=50,100,150,200,250,.......1000,....;
void TimerSetTime(unsigned short mMS)
{
CmdAdr2=mMS; //命令参数
CmdAdr3=mMS>>8; //命令参数
CmdAdr=3;
}
//用户可以调用Uart1Send函数来向串口一发送一个dat数据
void Uart1Send(char dat)
{
CmdAdr1=dat; //命令参数
CmdAdr=5; //命令代码
}
//用户可以调用Uart2Send数来向串口二发送一个dat数据
void Uart2Send(char dat)
{
CmdAdr1=dat; //命令参数
CmdAdr=6; //命令代码
}
//PlayAudio播放音频文件
unsigned char PlayAudio(char * mFileName)
{
unsigned char m_GlobalCnt8U;
for(m_GlobalCnt8U=0;m_GlobalCnt8U<128;m_GlobalCnt8U++)
{
if(*mFileName==0) break;
XBYTE[m_UserAdr+m_GlobalCnt8U]=*mFileName;
mFileName++;
}
XBYTE[m_UserAdr+m_GlobalCnt8U]=0;
CmdAdr2=m_UserAdr;
CmdAdr3=m_UserAdr>>8;
CmdAdr1=1;
CmdAdr=0x41;
return CmdAdr1;
}
//停止当前的音频播放,用户可以调用PlayStop立即停止当前播放
void PlayStop(void)
{
CmdAdr1=2;
CmdAdr=0x41;
}
//获取当前播放的进度(百分比),返回值0~100;当返回值为100表示已经播放完毕 ,用户可以据此判断是否播放完毕
unsigned char PlayProgress(void)
{
CmdAdr1=3;
CmdAdr=0x41;
return CmdAdr1;
}
//设置控件的HMI变量,调用SetIntVar()设置的HMI变量是必须4个字节的
//HMI变量占据MC8051单片机外部RAM的低地址空间
void SetIntVar(unsigned short mAdr,int mValue)
{
XBYTE[mAdr]=mValue;
XBYTE[mAdr+1]=mValue>>8;
XBYTE[mAdr+2]=mValue>>16;
XBYTE[mAdr+3]=mValue>>24;
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////第2部分:用户函数///////////////////////////
//////////////////////////////////////////////////////////////////////////////////
//显示字符串,mCellAdr参数是字符串控件的首地址,pStr是需要显示的字符串的指针
void DispStr(unsigned int mCellAdr,char * pStr)
{
while(*pStr)
{
XBYTE[mCellAdr]=*pStr; //修改控件变量
pStr++;
mCellAdr++;
}
XBYTE[mCellAdr]=0;//最后一个要填0,表示字符串结束
}
//
//本演示程序的“实时曲线”只有20个点,
//程序首先把第一个点暂存到temp上,然后取后面一个点给前面一个点,最后把先前暂存的第一个点赋给最后一个点
//这样曲线就出现一个移动效果,
void MoveCurve(void)
{
unsigned int i;
unsigned char temp;
temp=XBYTE[m_CurveStartPoint]; //首先把第一个点暂存到temp上
for(i=0;i<19;i++)
{
XBYTE[m_CurveStartPoint+i]=XBYTE[m_CurveStartPoint+1+i]; //然后取后面一个点给前面一个点,
}
XBYTE[m_CurveStartPoint+19]=temp;// 最后把先前暂存的第一个点赋给最后一个点
}
unsigned char delay=0;
unsigned int k=0;
void main(void)
{
TimerSetTime(50); //设置MC8051的定时器每隔50毫秒发生一次中断
RefreshLCD(0);//因为下面要修改“字符控件”所以先先禁止刷新屏幕
//PlayAudio("u:\\output.wav"); //调用系统函数播放音频
DispStr(m_String,"Welcome");//显示字符串
RefreshLCD(1);//允许刷新屏幕
EA=1; //打开中断总开关,
ET0=1;//打开定时器中断
ES=1;//打开串口中断
while(1)
{
if(delay>10)//每隔10*50MS执行一次下面的
{
delay=0;
k++;//每隔500豪秒加1
RefreshLCD(0);//因为下面要修改“实时数值控件”和“曲线控件”所以先先禁止刷新屏幕
SetIntVar(m_DataDisplay,k);//设置控件的HMI 变量的大小 ;HMI 变量地址见SysVar.h头文件
MoveCurve(); //移动曲线
RefreshLCD(1);//允许刷新屏幕
}
}
}
//**定时器0中断程序
void timer0(void) interrupt 1
{
delay++;
}
//串口接收中断函数
unsigned char bufcom1;
unsigned char bufcom2;
void uart(void) interrupt 4
{
if(COMNUM==1)//如果是串口一收到数据
{
bufcom1=SBUF;//把接收到的数据放到串口一的缓存上
}
else if(COMNUM==2)//如果是串口二收到数据
{
bufcom2=SBUF; //把接收到的数据放到串口二的缓存上
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
HMImaker信捷PLC示例 (315个子文件)
STARTUP.A51 6KB
STARTUP.A51 6KB
xinjie.avi 291.34MB
MC8051_Opt.Bak 1016B
MC8051_Opt.Bak 1016B
MC8051_Uv2.Bak 0B
MC8051_Uv2.Bak 0B
键空格弹起.bmp 17KB
键空格按下.bmp 17KB
键空格弹起.bmp 17KB
键空格按下.bmp 17KB
switchOFF.bmp 12KB
switchON.bmp 12KB
switchOFF.bmp 12KB
switchON.bmp 12KB
IndicatorON.bmp 5KB
IndicatorON.bmp 5KB
键Shift按下.bmp 5KB
键Shift弹起.bmp 5KB
键Shift按下.bmp 5KB
键Shift弹起.bmp 5KB
IndicatorOFF.bmp 5KB
IndicatorOFF.bmp 5KB
键Enter按下.bmp 4KB
键Enter弹起.bmp 4KB
键Caps弹起.bmp 4KB
键Caps按下.bmp 4KB
键Enter按下.bmp 4KB
键Enter弹起.bmp 4KB
键Caps弹起.bmp 4KB
键Caps按下.bmp 4KB
键CLR弹起.bmp 4KB
键CLR按下.bmp 4KB
键CLR按下.bmp 4KB
键CLR弹起.bmp 4KB
6.bmp 3KB
2.bmp 3KB
7.bmp 3KB
5.bmp 3KB
1.bmp 3KB
8.bmp 3KB
Zheng.bmp 3KB
3.bmp 3KB
0.bmp 3KB
KongGe.bmp 3KB
4.bmp 3KB
9.bmp 3KB
Fu.bmp 3KB
0.bmp 3KB
1.bmp 3KB
8.bmp 3KB
4.bmp 3KB
2.bmp 3KB
Fu.bmp 3KB
9.bmp 3KB
6.bmp 3KB
7.bmp 3KB
Zheng.bmp 3KB
5.bmp 3KB
3.bmp 3KB
KongGe.bmp 3KB
键Ins按下.bmp 3KB
键Del按下.bmp 3KB
键TAB按下.bmp 3KB
键后退弹起.bmp 3KB
键Esc弹起.bmp 3KB
键TAB弹起.bmp 3KB
键Ins弹起.bmp 3KB
键后退按下.bmp 3KB
键Del弹起.bmp 3KB
键Esc按下.bmp 3KB
键Del按下.bmp 3KB
键Ins按下.bmp 3KB
键后退弹起.bmp 3KB
键Esc按下.bmp 3KB
键Esc弹起.bmp 3KB
键Ins弹起.bmp 3KB
键TAB按下.bmp 3KB
键后退按下.bmp 3KB
键Del弹起.bmp 3KB
键TAB弹起.bmp 3KB
键B按下.bmp 2KB
键=弹起.bmp 2KB
键E弹起.bmp 2KB
键T按下.bmp 2KB
键]按下.bmp 2KB
键‘弹起.bmp 2KB
键X按下.bmp 2KB
键W按下.bmp 2KB
键2弹起.bmp 2KB
键A弹起.bmp 2KB
键9弹起.bmp 2KB
键T弹起.bmp 2KB
键~按下.bmp 2KB
键F弹起.bmp 2KB
键M按下.bmp 2KB
键J按下.bmp 2KB
键Q按下.bmp 2KB
键句号弹起.bmp 2KB
键V按下.bmp 2KB
共 315 条
- 1
- 2
- 3
- 4
资源评论
gmgod
- 粉丝: 2
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功