基于protuse的单片机模拟的实例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本人对单片机的一些了解,在这里和大家分享。
(1)基于AT89C52的同步串口通信
①单片机1程序
(程序在Kile C51上运行通过。)
/******************************************************************** * 文件名:液晶1602显示.c
* 描述: 该程序实现了对液晶1602的控制。
* 创建人:东流,2009年4月10日
* 版本号:2.0
***********************************************************************/ #include
#define uchar unsigned char
#define uint unsigned int
//这三个引脚参考资料
sbit E=P3^5; //1602使能引脚
sbit RW=P3^6; //1602读写引脚
sbit RS=P3^7; //1602数据/命令选择引脚
sbit aaa=P1^0;
sbit bbb=P1^1;
sbit aa=P3^0;
sbit bb=P3^1;
/******************************************************************** * 名称: delay()
* 功能: 延时,延时时间大概为140US。
* 输入: 无
* 输出: 无
***********************************************************************/
void delay()
{
int i,j;
for(i=0; i<=100; i++)
for(j=0; j<=20; j++)
;
}
/********************************************************************
* 名称: enable(uchar del)
* 功能: 1602命令函数
* 输入: 输入的命令值
* 输出: 无
***********************************************************************/
void enable(uchar del)
{
P2 = del;
RS = 0;
RW = 0;
E = 0;
delay();
E = 1;
delay();
}
/********************************************************************
* 名称: write(uchar del)
* 功能: 1602写数据函数
* 输入: 需要写入1602的数据
* 输出: 无
***********************************************************************/
void write(uchar del)
{
P2 = del;
RS = 1;
RW = 0;
E = 0;
delay();
E = 1;
delay();
/********************************************************************
* 名称: L1602_init()
* 功能: 1602初始化,请参考1602的资料
* 输入: 无
* 输出: 无
***********************************************************************/ void L1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
/********************************************************************
* 名称: L1602_char(uchar hang,uchar lie,char sign)
* 功能: 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
L1602_char(1,5,'b')
* 输入: 行,列,需要输入1602的数据
* 输出: 无
***********************************************************************/ void L1602_char(uchar hang,uchar lie,char sign)
{
uchar a;
if(hang == 1) a = 0x80;
if(hang == 2) a = 0xc0;
a = a + lie - 1;
enable(a);
write(sign);
}
/********************************************************************
* 名称: L1602_string(uchar hang,uchar lie,uchar *p)
* 功能: 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
L1602_string(1,5,"ab cd ef;")
* 输入: 行,列,需要输入1602的数据
* 输出: 无
***********************************************************************/ void L1602_string(uchar hang,uchar lie,uchar *p)