求大牛,请将C语言程序变为汇编程序,开发箱是周立功的,
//128*64LCD液晶显示万年历时钟,求改为汇编语言程序
#include "reg52.h"
#include "VIIC_C51.H" //包含VI2C软件包
#include "zlg7290.h"
#define PCF8563 0xA2 //定义器件地址
#define WRADDR 0x00 //定义写单元首地址
#define RDADDR 0x02 //定义读单元首地址
sbit KEY_INT=P3^2;
sbit RST=P1^0;
unsigned char disp_buf[8]={0,0,0,0,0,0,0,0}; //显示缓存
unsigned char KEY; //保存键值
bit swich_date=0;
unsigned char display_time(unsigned char *sd)
{
sd[0]=sd[0]&0x7f; //秒屏蔽保留位
sd[1]=sd[1]&0x7f; //分屏蔽保留位
sd[2]=sd[2]&0x3f; //时屏蔽保留位
disp_buf[0]=(sd[0]%16);
disp_buf[1]=(sd[0]/16);
disp_buf[2]=31;
disp_buf[3]=(sd[1]%16);
disp_buf[4]=(sd[1]/16);
disp_buf[5]=31;
disp_buf[6]=(sd[2]%16);
disp_buf[7]=(sd[2]/16);
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
unsigned char display_date(unsigned char *sd)
{
sd[0]=sd[0]&0x3f; //日屏蔽保留位
sd[2]=sd[2]&0x1f; //月屏蔽保留位
disp_buf[0]=(sd[0]%16);
disp_buf[1]=(sd[0]/16);
disp_buf[2]=(sd[2]%16)+0x80; //后面加小数点
disp_buf[3]=(sd[2]/16);
disp_buf[4]=(sd[3]%16)+0x80; //后面加小数点
disp_buf[5]=(sd[3]/16);
disp_buf[6]=0;
disp_buf[7]=2;
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数
for(;no>0;no--)
for(i=0;i<100;i++)
for(j=0;j<100;j++);
return 0;
}
void main()
{
unsigned char code td[9]={0x00,0x12,0x00,0x30,0x12,0x06,0x05,0x02,0x04}; //定义初始化字
unsigned char rd[7];
RST=0;
DelayNS(1);
RST=1; //初始化PCF8563,如果需要的话可以去掉
ISendStr(PCF8563,WRADDR,td,0x5);
DelayNS(1); //初始化PCF8563,如果需要的话可以去掉
ISendStr(PCF8563,WRADDR+5,&td[5],0x4);
while(1)
{
DelayNS(1);
IRcvStr(PCF8563,RDADDR,rd,0x7); //读现在的时、分、秒
DelayNS(1);
if(swich_date)
display_date(rd+3); //调显示日期子程序
else
display_time(rd); //调显示时间子程序
if(KEY_INT==0)
{
KEY=ZLG7290_GetKey();
if(KEY==1)
swich_date=~swich_date;
}
}
}
#include "reg52.h"
#include "VIIC_C51.H" //包含VI2C软件包
#include "zlg7290.h"
#define PCF8563 0xA2 //定义器件地址
#define WRADDR 0x00 //定义写单元首地址
#define RDADDR 0x02 //定义读单元首地址
sbit KEY_INT=P3^2;
sbit RST=P1^0;
unsigned char disp_buf[8]={0,0,0,0,0,0,0,0}; //显示缓存
unsigned char KEY; //保存键值
bit swich_date=0;
unsigned char display_time(unsigned char *sd)
{
sd[0]=sd[0]&0x7f; //秒屏蔽保留位
sd[1]=sd[1]&0x7f; //分屏蔽保留位
sd[2]=sd[2]&0x3f; //时屏蔽保留位
disp_buf[0]=(sd[0]%16);
disp_buf[1]=(sd[0]/16);
disp_buf[2]=31;
disp_buf[3]=(sd[1]%16);
disp_buf[4]=(sd[1]/16);
disp_buf[5]=31;
disp_buf[6]=(sd[2]%16);
disp_buf[7]=(sd[2]/16);
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
unsigned char display_date(unsigned char *sd)
{
sd[0]=sd[0]&0x3f; //日屏蔽保留位
sd[2]=sd[2]&0x1f; //月屏蔽保留位
disp_buf[0]=(sd[0]%16);
disp_buf[1]=(sd[0]/16);
disp_buf[2]=(sd[2]%16)+0x80; //后面加小数点
disp_buf[3]=(sd[2]/16);
disp_buf[4]=(sd[3]%16)+0x80; //后面加小数点
disp_buf[5]=(sd[3]/16);
disp_buf[6]=0;
disp_buf[7]=2;
ZLG7290_SendBuf(disp_buf,8);
return 0;
}
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数
for(;no>0;no--)
for(i=0;i<100;i++)
for(j=0;j<100;j++);
return 0;
}
void main()
{
unsigned char code td[9]={0x00,0x12,0x00,0x30,0x12,0x06,0x05,0x02,0x04}; //定义初始化字
unsigned char rd[7];
RST=0;
DelayNS(1);
RST=1; //初始化PCF8563,如果需要的话可以去掉
ISendStr(PCF8563,WRADDR,td,0x5);
DelayNS(1); //初始化PCF8563,如果需要的话可以去掉
ISendStr(PCF8563,WRADDR+5,&td[5],0x4);
while(1)
{
DelayNS(1);
IRcvStr(PCF8563,RDADDR,rd,0x7); //读现在的时、分、秒
DelayNS(1);
if(swich_date)
display_date(rd+3); //调显示日期子程序
else
display_time(rd); //调显示时间子程序
if(KEY_INT==0)
{
KEY=ZLG7290_GetKey();
if(KEY==1)
swich_date=~swich_date;
}
}
}
...全文
相关推荐
c语言实现矩阵求逆程序
c实现矩阵求逆程序。希望对大家有所帮助。
求两点距离(C语言)
程序实现求两点距离,C语言入门程序,C语言课程数字计算类小练习。
周立功CAN卡 C#二次开发
周立功CAN卡 C#二次开发 注释与源码
c语言求余数的实例讲解
c语言如何求余数? C语言中求余数直接用双目运算符%,如求a除以b的余数可表示为a%b 注意:C语言中的运算符%的两个操作数必须为整形,不能为浮点型或其他结构体类型,否则编译器会提示错误。 示例代码: #include int main() { int a=5, b=3, c; c=a%b; //将a除以b的余数赋值给c printf("%d",c); return 0; } /* 输出:2 */ 知识点补充: C语言求余数问题 C语言里对于有一些符号是不能直接输出的,因为被C语言占用了。所以有一些符号是需要特殊的方式才能输出的。比如你说的%号,%
周立功CAN接口开发资料
周立功CAN接口开发资料 周立功CAN接口开发资料 周立功CAN接口开发资料


非技术区
