J I A N G S U U N I V E R S I T Y 单片机原理及应用
课程设计
学院名称: 计算机学院 专业班级: 通信0902 学生姓名: 宗慧 学生学号: 3090601035 指导教师姓名: 熊 书 明
2012 年 01 月
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
点阵式液晶显示屏的显示程序设计
宗慧
通信0902班 3090601035
一.设计目的
1.熟练掌握C51系统仿真开发系统的应用。
2.加强单片机的综合运用能力、提高单片机的软件编程和调试能力,为以后的学习和开发工作打下良好基础。
3.掌握的液晶的工作原理以及应用设计。 4.掌握小系统开发设计的流程以及设计思路。
二.设计要求
1)从下到上滚动显示:“江苏大学计算机学院”然后交替显示:“单片机
课程设计”“液晶点阵显示屏程序设计”“作者姓名、班级、学号”
2)能进行正常的模拟量采样值显示(温度、压力、电位) 。 3) 改变字库的内容,显示其它汉字。
4) 改变页地址或列地址,使显示的内容改变位置。
5)其它功能(如左、右移,上下卷、显示图片等)。
三.系统整体结构
由于实验指导书中做过液晶显示和模数转换得实验,根据两个实验的功能实现和流程原理进行设计
将程序分成三个模块:
主函数模块main.c 模数转换模块ADC.c 液晶显示模块KS0108.c
其中让主函数模块做一些初始化和函数调用工作,模数转换模块主要是将温度,压力,点位的值转化为数字量供液晶显示用,液晶显示模块得到模数转换模块传递过来的数字量显示到液晶面板上。 程序流程图: 1系统主流程图如下
1
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
开始 主函数模块 显示模块 模数转换模块
2主函数流程图
开始 开中断 初始化系统时钟使能DAC 初始化定时器初始化IO端使能片内参考电压 初始化SPI0 使能比较器1
3 显示模块流程图
2
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
开始 初始化LCD 滚屏显示江苏大学计算机学院 显示课程设计题目、班级、姓名 健值是否1.2.3 调用模数转换得到值 读取数字量并显示
4 模数转换模块流程图
开始 读取No和模拟量 No=1? No=2? No=3? 返回温度 返回点位 返回压力 结束
四.设计和实现
㈠主函数模块main.c
#include \ #include
3
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
void Delay1us(unsigned char us) {
while (us) {
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); --us; } }
//初始化系统时钟,使用22.1184MHZ晶体作为时钟源 void SYSCLK_Init (void) {
int i; // delay counter
OSCXCN = 0x67; // start external oscillator with // 18.432MHz crystal for (i=0; i<256; i++) ; // Wait for osc. to start up
while (!(OSCXCN&0x80)) ; // Wait for crystal osc. to settle
OSCICN = 0x88; // select external oscillator as SYSCLK // source and enable missing clock // detector // OSCICN = 0x07; //interal 16MHZ }
#define PRT0CF P0MDOUT #define PRT1CF P1MDOUT #define PRT2CF P2MDOUT void PORT_Init (void) {
XBR0=0x07; // Enable SMBus, SPI0, and UART0 XBR1=0x00;
XBR2=0x44; // Enable crossbar and weak pull-ups EMI0CF=0x27; EMI0TC=0x21; P74OUT=0xFF; P0MDOUT=0x15;
P1MDOUT|=0x3C; //P1.2-P1.5推挽输出 P&=0xc3; //P1.2-P1.5=0 }
void SPI0_Init(void) {
SPI0CFG=0x07; // data sampled on 1st SCK rising edge // 8-bit data words SPI0CFG|=0xC0; //CKPOL =1;
SPI0CN=0x03; // Master mode; SPI enabled; flags // cleared
SPI0CKR=SYSCLK/2/8000000-1; // SPI clock <= 8MHz (limited by
4