单片机课程设计液晶显示陈帅Word文档下载推荐.docx

上传人:b****6 文档编号:17251215 上传时间:2022-11-29 格式:DOCX 页数:25 大小:74.85KB
下载 相关 举报
单片机课程设计液晶显示陈帅Word文档下载推荐.docx_第1页
第1页 / 共25页
单片机课程设计液晶显示陈帅Word文档下载推荐.docx_第2页
第2页 / 共25页
单片机课程设计液晶显示陈帅Word文档下载推荐.docx_第3页
第3页 / 共25页
单片机课程设计液晶显示陈帅Word文档下载推荐.docx_第4页
第4页 / 共25页
单片机课程设计液晶显示陈帅Word文档下载推荐.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

单片机课程设计液晶显示陈帅Word文档下载推荐.docx

《单片机课程设计液晶显示陈帅Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课程设计液晶显示陈帅Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。

单片机课程设计液晶显示陈帅Word文档下载推荐.docx

4模数转换模块流程图

主要的源程序及注释

主函数:

#include"

c8051f020.h"

#include<

intrins.h>

voidDelay1us(unsignedcharus)//延时us

{

while(us)

{

_nop_();

--us;

}

}

voidSYSCLK_Init(void)//系统时钟初始化

inti;

//delaycounter

OSCXCN=0x67;

//startexternaloscillatorwith

//18.432MHzcrystal

for(i=0;

i<

256;

i++);

//Waitforosc.tostartup

while(!

(OSCXCN&

0x80));

//Waitforcrystalosc.tosettle

OSCICN=0x88;

//selectexternaloscillatorasSYSCLK

//sourceandenablemissingclock

//detector

//OSCICN=0x07;

//interal16MHZ

#definePRT0CFP0MDOUT

#definePRT1CFP1MDOUT

#definePRT2CFP2MDOUT

voidPORT_Init(void)//串口初始化

XBR0=0x07;

//EnableSMBus,SPI0,andUART0

XBR1=0x00;

XBR2=0x44;

//Enablecrossbarandweakpull-ups

EMI0CF=0x27;

EMI0TC=0x21;

P74OUT=0xFF;

P0MDOUT=0x15;

P1MDOUT|=0x3C;

//P1.2-P1.5推挽输出

P1&

=0xc3;

//P1.2-P1.5=0

voidSPI0_Init(void)//spi0初始化

SPI0CFG=0x07;

//datasampledon1stSCKrisingedge

//8-bitdatawords

SPI0CFG|=0xC0;

//CKPOL=1;

SPI0CN=0x03;

//Mastermode;

SPIenabled;

flags

//cleared

SPI0CKR=SYSCLK/2/8000000-1;

//SPIclock<

=8MHz(limitedby

//EEPROMspec.)

unsignedcharCount1ms;

voidTimer0_Init(void)//计数器0初始化

CKCON|=0x8;

TMOD|=0x1;

//16Bit

Count1ms=10;

TR0=0;

//STOPTimer0

TH0=(-SYSCLK/1000)>

>

8;

//setTimer0tooverflowin1ms

TL0=-SYSCLK/1000;

TR0=1;

//STARTTimer0

IE|=0x2;

voidTimer0_ISR(void)interrupt1//1ms

TH0=(-SYSCLK/1000)>

if(Count1ms)Count1ms--;

voidDelay1ms(unsignedcharT)//延时1ms

Count1ms=T;

while(Count1ms);

voidDelay1s(unsignedcharT)//延时1s

while(T)

Delay1ms(200);

T--;

voidTestLCD(void);

//测试初始画面

charGetKeyValue(void);

//获取键值

voidinit_adc(void);

unsignedintGetADCValue(charNo);

voidDisplay(char*DispBuf,charShowDot,charx,chary);

voidmenulcd();

voidzuoyouyi();

voidcaiji();

voidmain(void)

chari;

unsignedintu;

charNum;

WDTCN=0xde;

WDTCN=0xad;

//关看门狗

SYSCLK_Init();

//初始化时钟

Timer0_Init();

//初始化定时器

PORT_Init();

//初始化IO口

SPI0_Init();

//初始化SPI0

init_adc();

CPT1CN|=0x80;

//使能比较器1

REF0CN=0x07;

//使能片内参考电压

DAC0CN|=0x80;

//使能DAC0

DAC0H=0;

DAC0L=0;

EA=1;

//开中断

Num=0;

menulcd();

u=GetADCValue(Num);

//获取按键值

for(;

;

i=GetKeyValue();

if((i<

1)||(i>

3))

Num=i;

Delay1ms(100);

if(Num==0)

{

menulcd();

//按0显示主菜单

}

elseif(Num==4)

{

TestLCD();

//按4显示开始画面

elseif(Num==5)

zuoyouyi();

//按5汉字,图画左右移动

elseif(Num==6)

caiji();

//按6采集温度,电压,压力

u=GetADCValue(Num);

KS0108模块:

c8051F020.h"

dianzhen.c"

//所有用到的汉字,图画点阵

#defineLCD_DATAP2

#defineLCD_RSP30

#defineLCD_RWP31

#defineLCD_EP32

#defineLCD_CS1P33

#defineLCD_CS2P34

#defineLCD_RSTP35

sbitHD7279_DAT=P1^7;

sbitHD7279_CLK=P1^6;

#defineNOSELECT7279P5|=0x80//SPICS4(P57)=1

#defineSELECT7279P5&

=~(0x80)//SPICS4(P57)=0;

#defineSet7279DATHD7279_DAT=1

#defineClr7279DATHD7279_DAT=0

#defineSet7279CLKHD7279_CLK=1

#defineClr7279CLKHD7279_CLK=0

//7279模块

voidDelay1ms(unsignedcharT);

voidDelay1s(unsignedcharT);

voidDelay1us(unsignedcharT);

voidSend7279Byte(unsignedcharch)//发送

{

SELECT7279;

//置CS低电平

Delay1us(50);

//延时50μ

i<

8;

i++)

{

if(ch&

0x80)//输出7位到HD7279A的DATA端

Set7279DAT;

else

Clr7279DAT;

Set7279CLK;

//置CLK高电平

ch=ch<

<

1;

//待发数据左移

Delay1us(8);

//延时8μ

Clr7279CLK;

//置CLK低电平

//延时50μ

Clr7279DAT;

//发送完毕,DATA端置低,返回

unsignedcharReceive7279Byte(void)//接收

unsignedchari,ch;

ch=0;

Set7279DAT;

//DATA端置为高电平,输入状态

//置CLK高电平

//接收数据左移1位

if(HD7279_DAT)

ch+=1;

//接收1位数据

//置CLK低电平

//接收完毕,DATA端重新置成低电平(输出状态)

returnch;

unsignedcharcodeBdSeg[]={

0x7e,0x30,0x6d,0x79,//0123

0x33,0x5b,0x5f,0x70,//4567

0x7f,0x7b,0x77,0x1f,//89ab

0x4e,0x3d,0x4f,0x47,//cdef

0x00,0x01};

charGetKeyValue(void)//获取键值

charKeyValue;

if(CPT1CN&

0x40)return-1;

//无键按下

Send7279Byte(0x15);

//发读键盘指令

KeyValue=Receive7279Byte();

NOSELECT7279;

//置CS高电平

returnKeyValue;

//KS0108模块

#defineSELECTCS0

voidLCD_WaitReady1(void)//判断LCD控制芯片KS0108是否忙

LCD_DATA=0xff;

LCD_CS2=SELECTCS;

LCD_RW=1;

LCD_RS=0;

LCD_E=1;

while(LCD_DATA&

0x80);

LCD_CS2=!

SELECTCS;

voidLCD_WaitReady2(void)//判断LCD控制芯片KS0108是否忙

LCD_CS1=SELECTCS;

LCD_CS1=!

voidLCD_WriteCommand1(charch)//向LCD控制芯片KS0108发送控制命令

LCD_WaitReady1();

LCD_RW=0;

LCD_DATA=ch;

LCD_E=0;

voidLCD_WriteCommand2(charch)//向LCD控制芯片KS0108发送控制命令

LCD_WaitReady2();

voidLCD_WriteData1(charch)//向LCD控制芯片KS0108发送数据命令

LCD_RS=1;

voidLCD_WriteData2(charch)//向LCD控制芯片KS0108发送数据命令

voidLCD_WriteHZ(charx,chary,char*Dot)//显示16*16点阵汉字

chari;

32;

if((x+i%16)<

64)

LCD_WriteCommand1(0xB8+y+i/16);

LCD_WriteCommand1(0x40+x+i%16);

LCD_WriteData1(Dot[i]);

LCD_WriteCommand2(0xB8+y+i/16);

LCD_WriteCommand2(0x40+x-64+i%16);

LCD_WriteData2(Dot[i]);

voidLCD_WriteHZcircle(charx,chary,char*Dot)//显示循环汉字

elseif((x+i%16)>

63&

&

(x+i%16)<

=127)

LCD_WriteCommand1(0x40+(x+i%16)%128);

voidInitLCD(void)//初始化LCD

chari,j;

LCD_RST=0;

Delay1ms

(1);

LCD_RST=1;

LCD_WriteCommand1(0xc0);

LCD_WriteCommand2(0xc0);

LCD_WriteCommand1(0x3f);

//开显示

LCD_WriteCommand2(0x3f);

for(j=0;

j<

j++)//清屏

LCD_WriteCommand1(0xB8+j);

//清左半屏

LCD_WriteCommand1(0x40);

for(i=0;

64;

LCD_WriteData1(0x00);

LCD_WriteCommand2(0xB8+j);

//清右半屏

LCD_WriteCommand2(0x40);

LCD_WriteData2(0x00);

voidDispBmp(char*buf,intn)//显示一幅位图

inti,j;

for(j=0;

j++)//显示位图

LCD_WriteCommand1(0xB8+j+n);

LCD_WriteData1(buf[(j*2)*64+i]);

LCD_WriteCommand2(0xB8+j+n);

LCD_WriteData2(buf[(j*2+1)*64+i]);

voidDispBmp1(char*buf,intn,intm)//显示一幅位图//128*16,n为页值,m为列值

2;

if(m<

=63)

LCD_WriteCommand1(0xB8+j+n);

for(i=128-m;

=127;

LCD_WriteData1(buf[i+128*j]);

for(i=0;

=63-m;

for(i=64-m;

=127-m;

i++)

LCD_WriteData2(buf[128*j+i]);

else

{

LCD_WriteCommand2(0xB8+j+n);

for(i=192-m;

LCD_WriteData2(buf[128*j+i]);

=191-m;

LCD_WriteData1(buf[i+128*j]);

voidDisplay(char*DispBuf,charShowDot,charx,chary)//液晶屏显示温度、电压,压力值

chari,ch,j=-16;

ShowDot--;

for(i=2;

6;

j+=16;

ch=DispBuf[i];

switch(ch)

{case0:

LCD_WriteHZ(x+j,y,led0);

break;

case1:

LCD_WriteHZ(x+j,y,led1);

case2:

LCD_WriteHZ(x+j,y,led2);

case3:

LCD_WriteHZ(x+j,y,led3);

case4:

LCD_WriteHZ(x+j,y,led4);

case5:

LCD_WriteHZ(x+j,y,led5);

case6:

LCD_WriteHZ(x+j,y,led6);

case7:

LCD_WriteHZ(x+j,y,led7);

case8:

LCD_WriteHZ(x+j,y,led8);

case9:

LCD_WriteHZ(x+j,y,led9);

default:

LCD_WriteHZ(x+j,y,led);

}

if(i==ShowDot)

LCD_WriteHZ(x+j+8,y,Dot);

voidmenulcd()//显示菜单

InitLCD();

DispBmp(menu,0);

voidTestLCD(void)//开头文字的显示

DispBmp(ss,1);

//江苏大学计算机学院

Delay1s(0.5);

LCD_WriteCommand1(0xc0+i%64);

/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1