/********************************************************************
* 文件名 : 串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
* 创建人 : 东流,2009年4月10日
* 版本号 : 2.0
***********************************************************************/
/*
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
*/
#include"51_compat.h"
/*
sbit CS_lcd=P2^5; //片选信号
sbit SID_lcd=P2^6; //数据信号
sbit SCLK_lcd=P2^7; //时钟信号
//sbit RST=P2^2; //复位信号
//sbit CH = P2^4; //并行、串行选择信号
*/
/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay_lcd(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}
/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte_lcd(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID_lcd = 1;
}
else
{
SID_lcd = 0;
}
SCLK_lcd = 0;
SCLK_lcd = 1;
}
}
/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com_lcd(unsigned char cmdcode)
{
CS_lcd = 1;
sendbyte_lcd(0xf8);
sendbyte_lcd(cmdcode & 0xf0);
sendbyte_lcd((cmdcode << 4) & 0xf0);
delay_lcd(2);
}
/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data_lcd(unsigned char Dispdata)
{
CS_lcd = 1;
sendbyte_lcd(0xfa);
sendbyte_lcd(Dispdata & 0xf0);
sendbyte_lcd((Dispdata << 4) & 0xf0);
delay_lcd(2);
}
/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit_s()
{
//RST = 0;
delay_lcd(100);
// RST = 1;
delay_lcd(20000);
write_com_lcd(0x30);
delay_lcd(50);
write_com_lcd(0x0c);
delay_lcd(50);
}
/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis_lcd(unsigned char code *s)
{
while(*s > 0)
{
write_data_lcd(*s);
s++;
delay_lcd(50);
}
}
/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test_slcd()
{
write_com_lcd(0x03);
delay_lcd(50);
write_com_lcd(0x81);
hzkdis_lcd(" HOT-51");
write_com_lcd(0x91);
hzkdis_lcd("单片机开发板");
write_com_lcd(0x89);
hzkdis_lcd(" ");
write_com_lcd(0x98);
hzkdis_lcd(" 东流电子");
}
/************************************************************************************************
lcd_clear函数:
清除整个液晶屏
*************************************************************************************************/
void slcd_clear() //LCD清屏
{
write_com_lcd(0x30);
write_com_lcd(0x01);
delay15ms();
}
//行 1--4 ;列 0--7
void slcd_write_onechar(unchar idata row,unchar idata col,unchar idata display_data)
{
switch(row)
{
case 1:
write_com_lcd(0x80+col); //第一行
break;
case 2:
write_com_lcd(0x90+col); //第二行
break;
case 3:
write_com_lcd(0x88+col); //第三行
break;
case 4:
write_com_lcd(0x98+col); //第四行
break;
default:
write_com_lcd(0x80); //缺省为第一行
break;
}
write_data_lcd(display_data); //写入字符串
delay125us();
}
//行 1--4 ;列 0--7
void slcd_write_onedata(unchar idata row,unchar idata col,unsigned long idata DData)
{
unsigned char idata i = 0 ;
uchar idata tmp[10] ;
tmp[3] = tmp[2]= tmp[1] = tmp[0] = 0 ;
tmp[7] = tmp[6]= tmp[5] = tmp[4] = 0 ;
tmp[8] = tmp[9]= 0 ;
do
{
tmp[i] = 0x30 + DData% 10 ;
i++;
DData /=10 ;
}
while( DData );
i--;
if(i==0)
{
slcd_write_onechar(row,col,tmp[i]);
}
else
while( i != 0xff )
{
slcd_write_onechar(row,col,tmp[i]);
i--;
write_data_lcd(tmp[i]); //写入字符串
col++;
i--;
}
}
void slcd_write_onedata_hexdata( unchar idata row,unchar idata col,unsigned long idata DData )
// 16进制->ascii显示
{
unsigned char i = 0 ;
uchar tmp[8] ;
uchar buf = 0 ;
tmp[3] = tmp[2]= tmp[1] = tmp[0] = 0 ;
tmp[7] = tmp[6]= tmp[5] = tmp[4] = 0 ;
do
{
buf = DData&0x0f ;
if(buf>9)
{
tmp[i] = 0x57 + buf ;
}
else
{
tmp[i] = 0x30 + buf ;
}
i++;
DData >>= 4 ;
}
while( DData );
i--;
while( i != 0xff )
{
slcd_write_onechar(row,col,tmp[i]);
col++;
i--;
}
}
/************************************************************************************************
lcd_write_sentence函数:
指定起始行,起始列,连续写入字符串;注意:字符串长度必须小于8;行:1-4;列:0-7
*************************************************************************************************/
void slcd_write_sentence_ram(unchar idata row,unchar idata col,unchar idata *string)
{
unchar idata i=0,len;
switch(row)
{
case 1:
write_com_lcd(0x80+col); //第一行
break;
case 2:
write_com_lcd(0x90+col); //第二行
break;
case 3:
write_com_lcd(0x88+col); //第三行
break;
case 4:
write_com_lcd(0x98+col); //第四行
break;
default:
write_com_lcd(0x80); //缺省为第一行
break;
}
len=strlen(string);
for(i=0;i<len;i++)
{
write_data_lcd(string[i]); //写入字符串
delay125us();
}
}
/************************************************************************************************
lcd_write_passage函数:
从液晶屏幕的起始位置(左上角)开始连续写入一段字符,字符的长度不得超过64;
*************************************************************************************************/
void slcd_write_passage(unchar code *string)
{
unchar idata i=0;
slcd_clear();
write_com_lcd(0x80);
while(string[i])
{
switch(i)
{
case 16:
write_com_lcd(0x90);
break;
case 32:
write_com_lcd(0x88);
break;
case 48:
write_com_lcd(0x98);
break;
default:
break;
}
write_data_lcd(string[i]);
delay125us();
i++;
}
}
/************************************************************************************************
lcd_write_sentence函数:
指定起始行,起始列,连续写入字符串;注意:字符串长度必须小于8;行:1-4;列:0-7
row 行
col 列
*************************************************************************************************/
void slcd_write_sentence_flash(unchar idata row,unchar idata col,unchar code *string)
{
unchar idata i=0;
switch(row)
{
case 1:
write_com_lcd(0x80+col); //第一行
break;
case 2:
write_com_lcd(0x90+col); //第二行
break;
case 3:
write_com_lcd(0x88+col); //第三行
break;
case 4
没有合适的资源?快使用搜索试试~ 我知道了~
STC12C5A60S2开发板测试代码
共70个文件
lst:16个
obj:15个
c:12个
5星 · 超过95%的资源 需积分: 9 27 下载量 48 浏览量
2013-06-30
10:20:23
上传
评论 1
收藏 184KB RAR 举报
温馨提示
学校电赛集训用开发板测试代码, 包含ADS7841,DAC7554,DS18B20,IIC,lcd12864,zlg7289等 都是基础的单片机应用
资源推荐
资源详情
资源评论
收起资源包目录
stc12c5a60s2_all_test.rar (70个子文件)
stc12c5a60s2_all_test
IIC.LST 11KB
main.OBJ 21KB
AD.c 1KB
slcd.OBJ 25KB
51_compat.OBJ 25KB
IIC.c 4KB
AD.LST 3KB
52_test.opt.bak 5KB
52_test.M51 82KB
ds18b20_write.OBJ 460B
ADS7841.LST 4KB
ds18b20_init.asm 556B
lcd.c 5KB
ADS7841.c 2KB
main.c 4KB
ds18b20.c 2KB
lcd.h 1KB
52_test_Opt.Bak 5KB
52_test_uvopt.bak 67KB
Ds1307.LST 12KB
IIC.h 672B
ds18b20_read.asm 559B
52_test.uvopt 68KB
ADS7841.OBJ 15KB
ds18b20_init.LST 3KB
main.LST 8KB
52_test.uvproj 17KB
52_test 157KB
STC12C5A.H 28KB
DS1307.h 770B
zlg7289.OBJ 19KB
IIC.OBJ 21KB
zlg7289.h 2KB
zlg7289.LST 9KB
dac7554.OBJ 14KB
ds18b20_write.LST 2KB
Ds1307.OBJ 20KB
AD.h 274B
51_compat.c 7KB
dac7554.h 416B
serial.LST 3KB
ds18b20.LST 4KB
ds18b20_init.OBJ 599B
slcd.c 8KB
STARTUP.lst 11KB
ds18b20.OBJ 14KB
STARTUP.A51 5KB
ds18b20_read.OBJ 644B
lcd.OBJ 20KB
Ds1307.c 5KB
AD.OBJ 10KB
51_compat.LST 13KB
51_compat.h 3KB
serial.OBJ 13KB
52_test.hex 17KB
slcd.LST 15KB
dac7554.c 1KB
52_test.Uv2.bak 3KB
ds18b20.h 323B
serial.h 1KB
lcd.LST 10KB
ADS7841.h 555B
dac7554.LST 3KB
serial.c 1KB
ds18b20_read.LST 3KB
slcd.h 4KB
ds18b20_write.asm 276B
52_test.plg 220B
zlg7289.c 4KB
52_test_Uv2.Bak 3KB
共 70 条
- 1
资源评论
- yjk8382486112013-12-04资源不错。。
- M_KoalaX2014-01-28资源不错,挺好用的
- Truly2013-07-12不错的资料,谢谢分享
- hyz1232342015-05-30资源很好 虽然对我没多大作用 但也谢谢了
- 桑竹2013-07-19先看看来,在STC12C5A32S2上应该可用吧
hehe02
- 粉丝: 2
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功