您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 江苏大学单片机课程设计
单片机原理及应用学院:计算机科学与通信工程学院班级:姓名:学号:指导老师:2014年1月13日点阵式液晶显示屏的显示程序设计一、设计目的1.熟练掌握C51系统仿真开发系统的应用。2.加强单片机的综合运用能力、提高单片机的软件编程和调试能力,为以后的学习和开发工作打下良好基础。3.掌握的液晶的工作原理以及应用设计。4.掌握小系统开发设计的流程以及设计思路。二、设计方案实验要求:1)从下到上滚动显示:“江苏大学计算机学院”然后交替显示:“单片机课程设计”“液晶点阵显示屏程序设计”“作者姓名、班级、学号”2)能进行正常的模拟量采样值显示(温度、压力、电位)。3)改变字库的内容,显示其它汉字。4)改变页地址或列地址,使显示的内容改变位置。5)其它功能(如左、右移,上下卷、显示图片等)。设计思路:由于实验指导书中做过液晶显示和模数转换得实验,根据两个实验的功能实现和流程原理进行设计将程序分成三个模块:主函数模块main.c模数转换模块ADC.c液晶显示模块KS0108.c其中让主函数模块做一些初始化和函数调用工作,模数转换模块主要是将温度,压力,点位的值转化为数字量供液晶显示用,液晶显示模块得到模数转换模块传递过来的数字量显示到液晶面板上。程序流程图:1系统主流程图如下2主函数流程图开始主函数模块显示模块数模转换模块使能比较器1初始化SPIO初始化I/O端初始化定时器初始化系统时钟开始开中断使能DAC使能片内参考电压3显示模块流程图4模数转换模块流程图主要的源程序及注释:主函数:#includec8051f020.h#includeintrins.h//1---片内温度、2-----电位、3-----压力voidDelay1us(unsignedcharus)开始初始化LCD滚屏显示“江苏大学计算机学院”显示课程设计题目、班级、姓名键值为1.2.3?调用数模转换得到值读取数据量并显示开始读取No和模拟量No=1?返回温度No=1?No=1?返回电压返回压力结束{while(us){_nop_();_nop_();_nop_();_nop_();_nop_();--us;}}voidSYSCLK_Init(void){inti;//delaycounterOSCXCN=0x67;//startexternaloscillatorwith//18.432MHzcrystalfor(i=0;i256;i++);//Waitforosc.tostartupwhile(!(OSCXCN&0x80));//Waitforcrystalosc.tosettleOSCICN=0x88;//selectexternaloscillatorasSYSCLK//sourceandenablemissingclock//detector//OSCICN=0x07;//interal16MHZ}#definePRT0CFP0MDOUT#definePRT1CFP1MDOUT#definePRT2CFP2MDOUTvoidPORT_Init(void){XBR0=0x07;//EnableSMBus,SPI0,andUART0XBR1=0x00;XBR2=0x44;//Enablecrossbarandweakpull-upsEMI0CF=0x27;EMI0TC=0x21;P74OUT=0xFF;P0MDOUT=0x15;P1MDOUT|=0x3C;//P1.2-P1.5推挽输出P1&=0xc3;//P1.2-P1.5=0}voidSPI0_Init(void){SPI0CFG=0x07;//datasampledon1stSCKrisingedge//8-bitdatawordsSPI0CFG|=0xC0;//CKPOL=1;SPI0CN=0x03;//Mastermode;SPIenabled;flags//clearedSPI0CKR=SYSCLK/2/8000000-1;//SPIclock=8MHz(limitedby//EEPROMspec.)}externcharflag;externchargame_state;unsignedcharCount1ms;unsignedchart;unsignedcharCount=1000;voidTimer0_Init(void){CKCON|=0x8;TMOD|=0x1;//16BitCount1ms=10;TR0=0;//STOPTimer0TH0=(-SYSCLK/1000)8;//setTimer0tooverflowin1msTL0=-SYSCLK/1000;TR0=1;//STARTTimer0IE|=0x2;}voidTimer0_ISR(void)interrupt1//1ms{TH0=(-SYSCLK/1000)8;TL0=-SYSCLK/1000;if(Count1ms)Count1ms--;t++;if(t==100)t=0;if(flag){if(Count)Count--;else{Count=1000;Move();if(game_state==0){flag=0;}}}}voidTimer1_Init(void){CKCON|=0x8;TMOD|=0x10;//16BitTR1=0;//STOPTimer1TH1=(-SYSCLK/1000)8;//setTimer1tooverflowin1msTL1=-SYSCLK/1000;TR1=1;//STARTTimer1IE|=0x4;}voidTimer1_ISR(void)interrupt3//1ms{TH1=(-SYSCLK/1000)8;TL1=-SYSCLK/1000;}voidDelay1ms(unsignedcharT){Count1ms=T;while(Count1ms);}voidDelay1s(unsignedcharT){while(T){Delay1ms(200);Delay1ms(200);Delay1ms(200);Delay1ms(200);Delay1ms(200);T--;}}charGetKeyValue(void);voidTest7279();voidinit_adc(void);unsignedintGetADCValue(charNo);voidDispLED(char*DispBuf,charShowDot);//ShowDot显示小数点位voidmain(void){charNo,i,buf[6];No=1;WDTCN=0xde;WDTCN=0xad;//关看门狗SYSCLK_Init();//初始化时钟Timer0_Init();//初始化定时器0Timer1_Init();//初始化定时器1PORT_Init();//初始化IO口SPI0_Init();//初始化SPI0init_adc();CPT1CN|=0x80;//使能比较器1REF0CN=0x07;//使能片内参考电压DAC0CN|=0x80;//使能DAC0DAC0H=0;DAC0L=0;EA=1;//开中断TestLCD0();Test7279();}KS0108模块:#includec8051F020.h#includeintrins.h#defineLCD_DATAP2#defineLCD_RSP30#defineLCD_RWP31#defineLCD_EP32#defineLCD_CS1P33#defineLCD_CS2P34#defineLCD_RSTP35unsignedintGetADCValue(charNo);voidDelay1ms(unsignedchar);/*--宽度x高度=128x64江苏大学计算机学院--*/charcodescreen[]={};/*--宽度x高度=128x642013年单片机课程设计--*/charcodescreen1[]={};/*--宽度x高度=128x64液晶点阵显示屏程序设计--*/charcodescreen2[]={};/*--宽度x高度=128x64姓名班级学号--*/charcodescreen3[]={};/*--宽度x高度=128x64图片滚动--*/charcodescreen4[]={};/*--宽度x高度=128x64主菜单--*/charcodemenu[]={};#defineSELECTCS0voidLCD_WaitReady1(void)//判断LCD控制芯片KS0108是否忙{LCD_DATA=0xff;_nop_();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_DATA=0xff;_nop_();LCD_CS1=SELECTCS;LCD_RW=1;LCD_RS=0;LCD_E=1;while(LCD_DATA&0x80);LCD_CS1=!SELECTCS;}voidLCD_WriteCommand1(charch)//向LCD控制芯片KS0108发送控制命令{LCD_WaitReady1();LCD_CS2=SELECTCS;LCD_RW=0;LCD_RS=0;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS2=!SELECTCS;}voidLCD_WriteCommand2(charch)//向LCD控制芯片KS0108发送控制命令{LCD_WaitReady2();LCD_CS1=SELECTCS;LCD_RW=0;LCD_RS=0;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS1=!SELECTCS;}voidLCD_WriteData1(charch)//向LCD控制芯片KS0108发送数据命令{LCD_WaitReady1();LCD_CS2=SELECTCS;LCD_RW=0;LCD_RS=1;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS2=!SELECTCS;}voidLCD_WriteData2(charch)//向LCD控制芯片KS0108发送数据命令{LCD_WaitReady2();LCD_CS1=SELECTCS;LCD_RW=0;LCD_RS=1;LCD_DATA=ch;LCD_E=1;LCD_E=0;LCD_CS1=!SELECTCS;}voidLCD_ReadData1(char*ch){LCD_WaitReady1();LCD_CS2=SELECTCS;LCD_RW=1;LCD_RS=1;LCD_E=1;*ch=LCD_DATA;LCD_E=0;LCD_CS2=!SELECTCS;}/*--文字:姓--*/charcodeXing[]={};/*--文字:名--*/charcodeMing[]={};/*--文字::--*/charcodeMaohao[]={};/*--文字:欧--*/charcodeOu[]={};/*--文字:燕--*/charcodeYan[]={};/*--文字:秋--*/charcodeQiu[]={};/*--文字:班--*/charcodeBan[]={};/*--文字:级--*/charcodeJi[]={};/*--文字:学--*/charcodeXue[]={};/*--文字:号--*/charcodeHao[]={};/*--文字:.--*/charcodedi[]={};/*--文字:0123456789:/--*/charcodeNumber[]={};/*--文字:℃--*/charcodewd[]={};/*--文字:V--*/charcodev[]={};/*--文字:N--*/charcodeniu[]={};charco
本文标题:江苏大学单片机课程设计
链接地址:https://www.777doc.com/doc-2280079 .html