电子线路实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CS = 1;
CheckBusy();
SendByte(0xfa);
//11111,RW(0),RS(1),0
SendByte(0xf0&Dbyte);
//高四位
SendByte(0xf0&Dbyte<<4);//低四位(先执行<<)
CS = 0;
}
//-----------------------------------------------------------
void LcmClear( void )
{
uchar i;
WriteCommand(0x30);
//8BitMCU
WriteCommand(0x80);
//AC 归起始位
for(i=0;i<4;i++){
Clear(i);
}
}
//--------------------------------------------------
OSCICN = 0x88;
// 切换到外部晶振
} //端口初始化
void PORT_Init (void)
{ XBR0 XBR1 XBR2
= 0X04; = 0X1E; = 0X44;
//设置 XBR0 //设置 XBR1 //打开交叉开关
P0MDOUT|= 0x03; P1MDOUT=0xFF; P2MDOUT=0xFF; P3MDOUT=0xFF;
case 20:P7=0x19;break; case 21:P7=0x12;break; case 22:P7=0x02;break; case 23:P7=0x78;break; case 24:P7=0x00;break; case 25:P7=0x10;break; case 27:P7=0xA1;break;//显示 d case 28:P7=0xAF;break;//显示 r
sbit SID=P1^4;
sbit CS=P1^5; // 函数定义
void SYSCLK_Init (void);
void PORT_Init (void);
void LCMInit(void);
void Delay_ms(uchar t);
void Delay(uint k);
void WriteData(unsigned char WDLCM);
电子线路设计 专题实验报告
班级: 姓名: 学号:
一、实验目的
(1)熟悉单片机原理; (2)掌握开发板上常见芯片的功能与用法; (3)掌握单片机的开发软件:keil (4)应用单片机,做一些简单的小实验
二、实验内容
1. 创建一个工程文件,编程实现将 0 1 2------ E F、姓名等显示在 LCD 屏上,编 程实现将 3 到 4 位数据小数点后保留一位(如 10.2、100.6)分别显示在三组 LED 屏上。 程序如下:
void CheckBusy( void )
{
do SendByte(0xfc);
//11111,RW(1),RS(0),0
while(0x80&ReceiveByte());
//BF(.7)=1 Busy
}
//-------------------------------------------------
void WriteCommand (uchar Cbyte);
void LcmClear( void );
void Clear(int l);
//unsigned char ReadData(void); void CheckBusy(void); void SendByte(uchar Dbyte); uchar ReceiveByte(void); void PutChar(uchar row,uchar col,uchar ch); void PutStr(uchar row,uchar col,uchar *puts); void display(int a);//数码管显示 void dis_out(int a);//显示设置值 void dis_sv(int a);//显示反馈值或输出值 //void dis3(void);//显示"Addr" //void dis4(int a);//显示地址 void dis_mv(int a); void Delay_us(unsigned int times);//延时 us //void Delay_ms(unsigned int times);//延时 ms
{
CS = 1;
CheckBusy();
SendByte(0xf8);
//11111,RW(0),RS(0),0
SendByte(0xf0&Cbyte);
//高四位
SendByte(0xf0&Cbyte<<4);//低四位
CS = 0;
}
//-------------------------------------------------
switch(a) {
case 0:P7=0xC0;break; case 1:P7=0xF9;break; case 2:P7=0xA4;break; case 3:P7=0xB0;break; case 4:P7=0x99;break; case 5:P7=0x92;break; case 6:P7=0x82;break; case 7:P7=0xF8;break; case 8:P7=0x80;break; case 9:P7=0x90;break; case 10:P7=0x88;break; case 11:P7=0x83;break; case 12:P7=0xC6;break; case 13:P7=0xA1;break; case 14:P7=0x86;break; case 15:P7=0x8e;break; case 16:P7=0x40;break; case 17:P7=0x79;break; case 18:P7=0x24;break; case 19:P7=0x30;break;
void PutStr(uchar row,uchar col,uchar *puts)
{
WriteCommand(0x30);
//8BitMCU
WriteCommand(AC_TABLE[8*row+col]);
//起始位置
while(*puts !='\0')
//判断字符串是否显示完毕
{
if(col==8)
//判断换行
{
//若不判断,则自动从第一行到第三行
col=0;
row++;
} if(row==4) row=0;
//一屏显示完,回到屏左上角
WriteCommand(AC_TABLE[8*row+col]);
WriteData(*puts);
//一个汉Hale Waihona Puke Baidu要写两次
puts++;
WriteData(*puts);
//第一行汉字位置 //第二行汉字位置 //第三行汉字位置 //第四行汉字位置
};
//-------------------------------------------------uchar code str0[]="班级"; uchar code str1[]="姓名:"; uchar code str2[]="学号:";
puts++;
col++;
}
}
//-------------------------------------------------------------
/*void PutChar(uchar row,uchar col,uchar ch)
{
WriteCommand(0x30);
//8BitMCU
//uchar code str3[]="0123456789ABCDEFG"; //系统时钟初始化
void SYSCLK_Init (void)
{ int i;
// 延时计数器
OSCXCN = 0x67;
// 使用外部晶振
for (i=0; i<256; i++);
// 等待 1ms
while (!(OSCXCN & 0x80)); // 等待外部晶振稳定
{
temp2=temp2<<1;
SCLK = 0;
SCLK = 1;
SCLK = 0;
if(SID) temp2++;
}
return ((0xf0&temp1)+(0x0f&temp2));
}
//--------------------------------------------------------------
// 延时
void Delay(unsigned int k)
{
do
{
}while( --k );
} //液晶初始化
void LcmInit( void )
{
WriteCommand(0x30); WriteCommand(0x03); WriteCommand(0x0C); WriteCommand(0x01); WriteCommand(0x06);
WriteCommand(AC_TABLE[8*row+col]);
//起始位置
WriteData(ch);
}*/
//-------------------------------------------------------------
void WriteData(uchar Dbyte )
{
uchar code AC_TABLE[]={ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, 0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, 0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
uchar ReceiveByte(void)
{
uchar i,temp1,temp2;
temp1 = 0;
temp2 = 0;
for(i=0;i<8;i++)
{
temp1=temp1<<1;
SCLK = 0;
SCLK = 1;
SCLK = 0;
if(SID) temp1++;
}
for(i=0;i<8;i++)
//8BitMCU //AC?0,不改变 DDRAM 值 //显示 ON,游标 OFF,游标位反白 OFF //清屏,AC 归 0 //写入时,游标右移动
}
//-------------------------------------------------
void WriteCommand(unsigned char Cbyte )
void SendByte(uchar Dbyte)
{
uchar i;
for(i=0;i<8;i++)
{
SCLK = 0; Dbyte=Dbyte<<1; SID = CY;
//左移一位 //移出的位给 SID
SCLK = 1;
SCLK = 0;
}
}
//-------------------------------------------------
//端口 1 设置为推挽输出 //端口 2 设置为推挽输出 //端口 3 设置为推挽输出
}
//延时 ms
void Delay_ms(unsigned int times)
{
unsigned int i,j;
for (i=0; i<times; i++)
for (j=0; j<1300; j++);
}
#include"c8051f020.h"
#include <intrins.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define SYSCLK // 液晶接口定义
11059200
sbit SCLK=P1^3;
void Clear(int l)
{
uchar i;
WriteCommand(0x30);
//8BitMCU
WriteCommand(AC_TABLE[8*l]);
//起始位置
for(i=0;i<16;i++){
WriteData(0x20);//空格 } } //----------------------------------//数码管显示 //-------------------------------------------void display(int a) {
case 100:P7=0xFF;break; } } //显示 sv void dis_sv(int a) {
相关文档
最新文档