51单片机汉字式LCD滚动字幕(5)

2019-04-05 12:57

致谢

此次设计是在朱俊老师的悉心指导下完成的。导师为论文课题的研究提出了许多指导性的意见,为论文的撰写、修改提供了许多具体的指导和帮助。通过此次设计,一方面让我认识到自己的不足,发现了学习中的错误之处;另一方面又积累丰富的知识,吸取别人好的方法和经验,增强对复杂问题的解决能力,摸索出一套解决综合问题的方法,为自己以后的工作和学习打下坚实的基础。再一方面也加强了我和老师的交流,认识到知识的渊博度。经过这次的努力,使我顺利的完成了毕业设计。这份毕业设计既是对过去三年所学知识的总结,又是自己知识的积累,也大大加深了对单片机技术的了解。鉴于本人所学知识有限,经验不足,又是初次研究这种复杂的设计,在此过程中难免存在一些错误和不足之处,恳请各位老师给予批评和指正。

21

参考文献

[1] 张永格 何乃味 单片机C语言应用技术与实践 北京交通大学出版社 2009 [2] 谭浩强 C语言程序设计 清华大学出版社2008

[3] 张玉莲 传感器与自动检测技术(第2版) 机械工业出版社2012 [4] 胡宴如 耿苏燕 模拟电子技术基础 (第2版) 高等教育出版社2004 [5] 刘卫国 程序设计与应用(第二版) 高等教育出版社2006

[6] 叶建波 电路设计与制版技术 清华大学出版社 北京大学出版社2011 [7] 钱静 单海宁 电路基础(第五版) 南开大学出版社2010

[8] 廖超平 黄守宁 EDA技术与VHDL实用教程 高等技术教育出版社2007

附录一 程序源代码

#include //51寄存器文件 #include

typedef unsigned char BYTE; //用BYTE代替unsigned char typedef unsigned int WORD;//WORD代替unsigned int typedef bit BOOL ;//用BOOL代替bit

sbit rs = P3^2; //复位端 sbit rw = P3^1; //写数据端 sbit ep = P3^0; //使能端

sbit LED1=P2^0;

BYTE code dis1[] = {\BYTE code dis2[] = {\

/*******************延时函数********************/ delay(BYTE ms) { BYTE i; while(ms--) { for(i = 0; i< 250; i++)

22

{ _nop_(); _nop_(); //空执行消耗CPU时间达到等待的效果 _nop_(); _nop_(); } } }

/*******************LCD侧忙函数********************/ BOOL lcd_bz() { BOOL result; rs = 0; rw = 1; ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); result = (BOOL)(P0 & 0x80); //检测P0最高位是否为1 ep = 0; return result;//返回侧忙结果 }

lcd_wcmd(BYTE cmd) { // 写入指令数据到LCD while(lcd_bz()); rs = 0; rw = 0; ep = 0; _nop_(); _nop_(); P0 = cmd; //将8位指令通过P0口传给1602 _nop_(); _nop_();//用于产生一个脉冲宽度 _nop_(); _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0;

23

}

lcd_pos(BYTE pos) { //设定显示位置 lcd_wcmd(pos | 0x80); }

lcd_wdat(BYTE dat) { //写入字符显示数据到LCD while(lcd_bz()); rs = 1; rw = 0; ep = 0; P0 = dat;//将8位数据通过P0口传给1602 _nop_(); _nop_(); _nop_(); //用于产生一个脉冲宽度 _nop_(); ep = 1; _nop_(); _nop_(); _nop_(); _nop_(); ep = 0; }

lcd_init() { //LCD初始化设定 lcd_wcmd(0x38); ////16*2显示,5*7点阵,8位数据 delay(1); lcd_wcmd(0x0c); //显示开,关光标 delay(1); lcd_wcmd(0x06); //移动光标 delay(1); lcd_wcmd(0x01); //清除LCD的显示内容 delay(1); }

#define true 1 #define false 0

bit b_tick_flag,b_second_event,b_minute_event,b_tick_flash; unsigned char tick_counter,second_counter;

24

///////////////////定时器初始化及中断、延时函数////////////////////////////////////////////// void Time_Init(void) //定时器初始化及中断、延时函数 {

//Timer_init

//========定时器0作为20MS一次的主循环定时============// //晶振:11.0592 10ms 0xdc 0x00 20ms 0xb8 0x00 //晶振:22.1184 10ms 0xb8 0x00 20ms 0x70 0x00 //========定时器0作为20MS一次的主循环定时============// b_tick_flag = 0; b_second_event = 0; b_minute_event = 0; b_tick_flash = 0; TMOD = 0x21; //time0 is 16bit counter,timer1 is 8 bit,auto reload; TH0 = 0xB8 ; TL0 = 0x00 ; ET0 =1; TR0 = 1; }

void TimerService(void) //timer service function { if(b_tick_flag == true) { b_tick_flag = false; tick_counter++; if(tick_counter==0)b_tick_flash=true;//闪烁的频率控制,大约为100ms if(tick_counter == 50) { tick_counter = 0; b_second_event = true; second_counter++; if(second_counter ==60) { second_counter = 0; b_minute_event = true; } } } }

void Timer0_interrupt() interrupt 1 using 0 {

TF0 = 0; //清除中断标志 TR0 = 0; //暂停计时 TH0 = 0xb8;

25

TL0 = 0x00; b_tick_flag = true; // ET0=1; TR0 = 1; return; }

main() { BYTE i; lcd_init(); //初始化LCD delay(10); Time_Init(); while(1) { TimerService(); lcd_pos(4); //设置显示位置为第一行的第5个字符 i = 0; while(dis1[i] != '\\0') { //显示字符\ lcd_wdat(dis1[i]); i++; } lcd_pos(0x41); //设置显示位置为第二行第二个字符 i = 0; while(dis2[i] != '\\0') { lcd_wdat(dis2[i]); //显示字符\ www.PRECHIN.com \ i++; } // if(b_tick_flash == true) // {

// b_tick_flash = false; LED1=~LED1; // } } }

26


51单片机汉字式LCD滚动字幕(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:电控系统输入与输出信号种类

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: