📄 z.txt
字号:
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
for (i = 8; i>0; i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
{
RTInputByte(*pWClock); /* 写1Byte数据*/
pWClock++;
}
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 数 名:BurstR1302T()
功 能:读取DS1302时钟数据
说 明:先写地址/命令,后读数据(时钟多字节方式)
调 用:RTInputByte() , RTOutputByte()
入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void BurstR1302T(uchar *pRClock)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */
for (i=8; i>0; i--)
{
*pRClock = RTOutputByte(); /* 读1Byte数据 */
pRClock++;
}
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 数 名:BurstW1302R()
功 能:往DS1302寄存器数写入数据(多字节方式)
说 明:先写地址,后写数据(寄存器多字节方式)
调 用:RTInputByte()
入口参数:pWReg: 寄存器数据地址
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void BurstW1302R(uchar *pWReg)
{
uchar i;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */
for (i=31; i>0; i--) /* 31Byte 寄存器数据 */
{
RTInputByte(*pWReg); /* 写1Byte数据*/
pWReg++;
}
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 数 名:BurstR1302R()
功 能:读取DS1302寄存器数据
说 明:先写地址,后读命令/数据(寄存器多字节方式)
调 用:RTInputByte() , RTOutputByte()
入口参数:pRReg: 寄存器数据地址
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void BurstR1302R(uchar *pRReg)
{
uchar i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(0xff); /* 0xff:时钟多字节读命令 */
for (i=31; i>0; i--) /*31Byte 寄存器数据 */
{
*pRReg = RTOutputByte(); /* 读1Byte数据 */
pRReg++;
}
T_CLK = 1;
T_RST = 0;
}
/********************************************************************
函 数 名:Set1302()
功 能:设置初始时间
说 明:先写地址,后读命令/数据(寄存器多字节方式)
调 用:W1302()
入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void Set1302(uchar *pClock)
{
uchar i;
uchar ucAddr = 0x80;
W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7; i>0; i--)
{
W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
pClock++;
ucAddr +=2;
}
W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
/********************************************************************
函 数 名:Get1302()
功 能:读取DS1302当前时间
说 明:
调 用:R1302()
入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
返 回 值:无
设 计:zhaojunjie 日 期:2002-03-19
修 改: 日 期:
***********************************************************************/
void Get1302(uchar ucCurtime[])
{
uchar i;
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
/*//////////////////////////////////////////////////////////////////////*/
DvNews
来源:
阅读:436 次
日期:2003-10-12
【 评论 】 【 推荐 】 【 打印 】 【 字体:大 中 小 】
上一篇:
下一篇:S51,S52下载线和免费软件,作者:digiboy
>> 相关新闻
>> 点击查看全部留言...
发表意见和建议
点评: 字数0
姓名:
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
关于C51BBS | 在C51BBS刊登广告 | 联系方式 | 网友投稿 版面设计:DJ
版权所有 ?1999-2003 单片机C语言网站 版主:龙啸九天 E-mail: c51bbs@vip.163.com
Powerby DvNews 2.6
AVR精确定时的编程实验
#include <io8515.h>
/*======================================
微秒级精确延时函数,晶振8M:
Delay = 0.125 *((tt*4-1)+9)微秒
其中9包括了调用方的 r16 赋值 1t
rcall 3t nop 1t ret 4t
brne指令在当判断条件不成立时是单周期
最后一次判断只有1个周期,补一个nop
简化计算 = 0.5tt + 1 (us)
======================================*/
void shortdelay(unsigned char tt)
{
asm("_L2: subi R16,1");
asm(" nop")
asm(" brne _L2");
asm(" nop");
asm(" ret");
}
void main()
{
shortdelay( 18 );
while(1) {
shortdelay( 48 );
}
}
// 1t
// 1t
// 2t/1t
// 1t
// 4t
//延时10us
// 25us
Copyright? 1999-2004, 晓奇工作室 E-Mail:info*xiao-qi.com
主页 | 单片机应用设计·逻辑器件·PCB制板·DSP专栏·家电维修 | 本站商务 | 下载特区 | 世纪论坛 | 项目开发 | 收藏本站 | 设为主页
专业单片机开发!开发生产一条龙!
专业网页设计!平面设计!
| 电子类 | | 网页类 | | 软件类 | | 电脑类 |
| 电子类>>单片机编程>>点阵图形液晶驱动程序192x64,(C编程) 打印
点阵图形液晶驱动程序192x64,(C编程)
www.21hf.com 2003-10-13 世纪开发网
/*写汉字液晶子程 液晶屏分为4行*12列汉字,全部使用模拟接口方式。
/* TGLCMLIMIT64A接口程序(模拟方式)
;***************************************************************************
;连线图:
;*LCM---89C52* *LCM---89C52* *LCM-------89C52* *LCM----------89C52* *
;*DB0---P0.0* *DB4---P0.4* *D/I-------P2.6* *CS1----------P2.4* *
;*DB1---P0.1* *DB5---P0.5* *R/W-------P2.7* *CS2----------P2.5* *
;*DB2---P0.2* *DB6---P0.6* *RST--------VCC* *CS3----------P3.2* *
;*DB3---P0.3* *DB7---P0.7* *E---------P2.3* *
;注:89C52的晶振频率为12MHz *
;***************************************************************************/
//画线部分请参照avr的c程序。
/*#pragma src /*生成ASM文件开关,必要时打开 */
#include
#include
#include
#define Uchar unsigned char
/***********液晶显示器接口引脚定义***************/
sbit Elcm= P2^3; //
sbit CS1LCM= P2^4; //
sbit CS2LCM= P2^5; //
sbit CS3LCM= P3^2; /*这个连接只是做实验的临时接法。*/
sbit Dilcm= P2^6; //
sbit Rwlcm= P2^7; //
sfr Datalcm= 0x80; //数据口
unsigned char testi[]={"浸渠叁绳漱塔烃威牺晓玄瑶"};
/***********常用操作命令和参数定义***************/
#define DISPON 0x3f /*显示on */
#define DISPOFF 0x3e /*显示off */
#define DISPFIRST 0xc0 /*显示起始行定义 */
#define SETX 0x40 /*X定位设定指令(页) */
#define SETY 0xb8 /*Y定位设定指令(列) */
#define Lcdbusy 0x80 /*LCM忙判断位 */
/**************显示分区边界位置*****************/
#define MODL 0x00 /*左区 */
#define MODM 0x40 /*左区和中区分界 */
#define MODR 0x80 /*中区和右区分界 */
#define LCMLIMIT 0xC0 /*显示区的右边界 */
/****************全局变量定义*******************/
Uchar col,row,cbyte; /*列x,行(页)y,输出数据 */
bit xy; /*画线方向标志:1水平 */
/*****************函数列表**********************/
void Lcminit(void); /*液晶模块初始化 */
void Delay(Uchar); /*延时,入口数为Ms */
void lcdbusyL(void); /*busy判断、等待(左区) */
void lcdbusyM(void); /*busy判断、等待(中区) */
void lcdbusyR(void); /*busy判断、等待(右区) */
void Putedot(Uchar); /*半角字符输出 */
void Putcdot(Uchar); /*全角(汉字)输出 */
void Wrdata(Uchar); /*数据输出给LCM */
void Lcmcls( void ); /*LCM全屏幕清零(填充0) */
void wtcom(void); /*公用busy等待 */
void Locatexy(void); /*光标定位 */
void WrcmdL(Uchar); /*左区命令输出 */
void WrcmdM(Uchar); /*中区命令输出 */
void WrcmdR(Uchar); /*右区命令输出 */
void Putstr(Uchar *puts,Uchar i); /*中英文字符串输出 */
void Rollscreen(Uchar x); /*屏幕向上滚动演示 */
void Rddata(void); /* 从液晶片上读数据 */
void Linehv(Uchar length); /*横(竖)方向画线 */
void point(void); /*打点 */
void Linexy(Uchar endx,Uchar endy);
/******************数组列表*********************/
Uchar code Ezk[]; /*ASCII常规字符点阵码表 */
Uchar code Hzk[]; /*自用汉字点阵码表 */
Uchar code STR1[]; /*自定义字符串 */
Uchar code STR2[]; //
Uchar code STR3[]; //
Uchar code STR4[]; //
/********************************/
/* 演示主程序 */
/********************************/
void main(void)
{
Uchar x,y;
col=0;
row=0;
Delay(40); /*延时大约40Ms,等待外设准备好 */
Lcminit(); /*液晶模块初始化,包括全屏幕清屏*/
Putstr(STR2,24); /*第一行字符输出,24字节 */
col=0;
row=2;
Putstr(STR1,12); /*第二行字符输出,12字节 */
col=0;
row=4;
Putstr(STR3,24); /*第三行字符输出,24字节 */
col=0;
row=6;
Putstr(STR4,24); /*第四行字符输出,12字节 */
x=0;
col=0;
row=0;
xy = 1; /*方向标志。定为水平方向 */
Linehv(192); /*画一条横线(0,0)-(191,0) */
col=0;
row=15;
xy = 1;
Linehv(192); /*画一条横线(0,15)-(191,15) */
col=0;
row=32;
xy = 1;
Linehv(192); /*画一条横线(0,32)-(191,32) */
col=0;
row=1;
xy = 0; /*方向标志。定为垂直方向 */
Linehv(31); /*画一条竖线(0,1)-(0,31) */
col=191;
row=1;
xy = 0;
Linehv(31); /*画一条竖线(191,1)-(191,31) */
col=0; /*设定斜线的起点坐标 */
row=63;
Linexy(44,31); /*画一段斜线(0,63)-(44,31) */
col=44;
row=31;
Linexy(190,62); /*继续画斜线(44,31)-(191,63) */
while(1){
Rollscreen(y); /*定位新的显示起*/
y++;
y %=8;
x=testi[y];
Delay(100); /*延时,控制滚动速度 */
};
}
/************************************************/
/*画线。任意方向的斜线,不支持垂直的或水平线 */
/************************************************/
void Linexy(Uchar endx,Uchar endy)
{
register Uchar t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -