版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、/*液晶显示st7920自建字库*/文件名:lcd_12864.c/日期:2012/11/9/版本:00/作者:jlm/程序参数说明:/晶振:11.0592m/功能:/*/#include <reg52.h>#define uchar unsigned char#define uint unsigned int/*定义变量*/#define lcd_data p0uchar flag_1s;ucharflag_50ms;uchar sec,min,hour,week,day,yue;uchar year_h,year_l; /定义年月日 时分秒uchar time_hour,tim
2、e_min,time_sec;uchar key_counter;/模式按键按下次数uchar key_clock_counter;uchar key_mode_num_flag;/*位定义*/sbit lcd_en=p27; /液晶使能sbit lcd_rd=p26; /rd=0为命令;rd=1为数据sbit lcd_rw=p25; /rw=0为读状态;rw=1为写状态sbit lcd_psb=p32; /选择并行或者是串行sbit lcd_rst=p37; /液晶复位sbitkey_mode=p14;/模式按键sbitkey_add=p15;/加数据按键sbitkey_sub=p16;/减
3、数据按键sbitkey_clock=p17;/向上调试按键/sbitkey_down=p18;/向下调试按键uchar code num=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x00,0x2d;/密码数字uchar code hanzi_3=0xc1,0xfa,0xc4,0xea,0xb4,0xf3,0xbc,0xaa;/龙年大吉uchar code hanzi_4=0xc4,0xea,0xd4,0xc2,0xc8,0xd5,0xca,0xb1,0xb7,0xd6,0xc3,0xeb,0xa1,0xaa;/年月日 时分秒 -/*函
4、数声明*/void delay_us(uint us);void delay_ms(uint ms);void time_page0(void);void scan_key(void);void scan_key_add(void);void scan_key_sub(void);void inint_dat(void);void time_0();void time_page0(void);void time_page1(void);void clock_page2(void);/*判忙程序*/原函数:void read_lcdbus(void)/功能:判断液晶是否在传输数据 /时间:/入口
5、参数:/出口参数:/*/void read_lcdbus(void)lcd_data=0x00;/先清空数据lcd_rd=0;/选择命令lcd_rw=1;lcd_en=0; /写 while(lcd_data&0x80); /判断液晶工作lcd_en=1; /开使能delay_us(10);lcd_en=0; /关使能;/*写指令*/原函数:void write_comd(uchar value)/功能:写指令/时间:/入口参数:/出口参数:/*/void write_comd(uchar value)read_lcdbus();/读忙标志lcd_rd=0;/选择指令lcd_rw=0;
6、/选择写方式delay_us(10); lcd_data=value; /写入value指令值lcd_en=1;/使能位置一delay_us(1); lcd_en=0;/*写数据*/原函数:void write_lcddata(uchar d_value)/功能:写指令/时间:/入口参数:/出口参数:/*/void write_lcddata(uchar d_value)read_lcdbus();/读忙标志lcd_rd=1;/选择数据lcd_rw=0;/选择写方式delay_us(10); lcd_data=d_value; /写入value指令值lcd_en=1;/使能位置一delay_u
7、s(1);lcd_en=0;/*读ram数据*/原函数:uchar read_lcddata(void)/功能:写指令/时间:/入口参数:/出口参数:/*/uchar read_lcddata()/ /*初始化lcd*/原函数:void init_lcd(void)/功能:写指令/时间:/入口参数:/出口参数:/*/void init_lcd(void)delay_ms(10);lcd_psb=1; /选择并行口lcd_rst=0;/复位delay_us(1);lcd_rst=1;/复位开write_comd(0x30);/功能字控制delay_us(10);write_comd(0x30);
8、delay_us(10);write_comd(0x02);/地址归为delay_us(10);write_comd(0x0c);/开显示与游标delay_us(10);write_comd(0x01); /清显示delay_us(100);write_comd(0x80);/设置ddram地址起始地址/*清零lcd*/原函数:void clearlcd(void)/功能:清屏lcd/时间:/入口参数:/出口参数:/*/void clearlcd(void)/*显示无字库汉字*/原函数:void write_lcdhz(void)/功能:写指令/时间:/入口参数:x 数组suxcol; xad
9、dr=显示的地址/出口参数:/*/*显示字库汉字*/原函数:/功能:/时间:/入口参数:定义形参数组uchar s,显示地址xaddr,数组指针n/出口参数:/*/*显示数字或者字符单个字节*/显示单个字符/*void writelcd_displaybits(uchar s,uchar xaddr,uchar n)write_comd(xaddr); /输入显示地址write_lcddata(*(s+n); /*(s+n)=sn;delay_us(10); */显示双个字符void writelcd_display_2bits(uchar s,uchar xaddr,uchar n1,uch
10、ar n2)write_comd(xaddr); /输入显示地址write_lcddata(*(s+n1); /*(s+n)=sn;delay_us(500);write_lcddata(*(s+n2); /*(s+n)=sn;delay_us(500);/*显示汉字2个字节*/显示单个汉字void lcd_display_hz(uchar s,uchar xaddr,uchar n)uchar i; write_comd(xaddr); for(i=0;i<n;i+) s+; s+; write_lcddata(*(s+); /指向数组的s write_lcddata(*s); /指向
11、数组的s+1delay_us(500); /显示单个汉字 /*void lcd_displayhanzi(uchar s,uchar xaddr,uchar n1)uchar i; write_comd(xaddr); for(i=0;i<n1;i+) write_lcddata(*(s+); /指向数组的swrite_lcddata(*(s+); /指向数组s */*按键模式扫描*/原函数:void scan_key_mode(void)/功能:按键模式扫描/时间:/入口参数:key_mode=p11;/出口参数:/*/void scan_key(void)if(key_mode=0)
12、 /模式按键扫描 delay_us(2500);while(!key_mode);delay_us(2500);tr0=0;key_counter+;time_page0();/调用调整时间界while(1)if(key_mode=0)delay_us(2500); while(!key_mode);delay_us(2500);key_counter+;time_page0();/调用调整时间界switch(key_counter)case 1:writelcd_display_2bits(num,0x91,year_h/10,year_h%10);/20write_comd(0x10);
13、/光标返回delay_ms(100);scan_key_add();scan_key_sub();break;case 2:writelcd_display_2bits(num,0x92,year_l/10,year_l%10);/20write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;case 3:writelcd_display_2bits(num,0x94,yue/10,yue%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub
14、();break;/月份case 4:writelcd_display_2bits(num,0x96,day/10,day%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;/日case 5:writelcd_display_2bits(num,0x89,hour/10,hour%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;/时case 6:writelcd_display_2bits(num,
15、0x8b,min/10,min%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;/分case 7:writelcd_display_2bits(num,0x8d,sec/10,sec%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;/秒case 8:key_counter=0;write_comd(0x0c);/关闭游标显示反白write_comd(0x01); /清lcd显示tr0=1;/启动定
16、时器 break; if(key_counter=0)write_comd(0x0c);/关闭游标显示反白write_comd(0x01);/清lcdflag_1s=0;break;flag_1s=0; /*加按键扫描*/原函数:void scan_key_add(void)/功能:加按键扫描/时间:/入口参数:key_add=p1.4/出口参数:/*/void scan_key_add(void) if(key_add=0)delay_us(1500);while(!key_add);delay_us(1500);if(key_counter=1)/判断是不是年修改year_h+;if(ye
17、ar_h=99)year_h=0;if(key_counter=2)/判断是不是年修改year_l+;if(year_l=99)year_l=0;if(key_counter=3)/判断是不是月修改yue+;if(yue=13)yue=0;if(key_counter=4)/判断是不是日修改day+;if(day=32)day=1;if(key_counter=5)/判断是不是时修改hour+;if(hour=25)hour=0;if(key_counter=6)/判断是不是分修改min+;if(min=60)min=0;if(key_counter=7)/判断是不是秒修改sec+;if(se
18、c=60)sec=0; /*减按键扫描*/原函数:void scan_key_sub(void)/功能:减按键扫描/时间:/入口参数:/出口参数:/*/void scan_key_sub(void) if(key_sub=0)delay_us(2500);while(!key_sub);if(key_counter=1)/判断是不是年修改if(year_h>0)year_h-;if(year_h=0)year_h=99;if(key_counter=2)/判断是不是年修改if(year_l>0)year_l-;if(year_l=0)year_l=99;if(key_counter
19、=3)/判断是不是月修改if(yue>0)yue-;if(yue=0)yue=12;if(key_counter=4)/判断是不是日修改if(day>0)day-; if(day=0) day=31;if(key_counter=5)/判断是不是时修改if(hour>0)hour-;if(hour=0)hour=24;if(key_counter=6)/判断是不是分修改if(min>0)min-;if(min=0)min=59;if(key_counter=7)/判断是不是秒修改if(sec>0)sec-;if(sec=0)sec=59; /*初始时钟页面*/原函
20、数:void time_page0(void)/功能:时钟显示页/时间:/入口参数:/出口参数:/*/void time_page()write_comd(0x01); /清lcd显示delay_us(100);lcd_display_hz(hanzi_3,0x82,0);/龙lcd_display_hz(hanzi_3,0x83,1);/年lcd_display_hz(hanzi_3,0x84,2);/大lcd_display_hz(hanzi_3,0x85,3);/吉write_comd(0x01); /清lcd显示write_comd(0x0c); /关闭游标显示反白delay_us(1
21、00);/*可调时钟页面*/原函数:void time_page0(void)/功能:时钟显示页/时间:/入口参数:/出口参数:/*/void time_page0(void)write_comd(0x01); /清lcd显示delay_us(100);writelcd_display_2bits(num,0x91,year_h/10,year_h%10);/20writelcd_display_2bits(num,0x92,year_l/10,year_l%10);/20 writelcd_display_2bits(num,0x93,11,11);/-writelcd_display_2b
22、its(num,0x94,yue/10,yue%10);/12 writelcd_display_2bits(num,0x95,11,11);/-writelcd_display_2bits(num,0x96,day/10,day%10);/12writelcd_display_2bits(num,0x89,hour/10,hour%10);/12lcd_display_hz(hanzi_4,0x8a,3);/时writelcd_display_2bits(num,0x8b,min/10,min%10);/00lcd_display_hz(hanzi_4,0x8c,4);/分writelcd_
23、display_2bits(num,0x8d,sec/10,sec%10);/00lcd_display_hz(hanzi_4,0x8e,5);/秒write_comd(0x0f);/游标显示write_comd(0x80);/ /*时钟显示页面*/原函数:void time_page1(void)/功能:时钟显示页/时间:/入口参数:/出口参数:/*/void time_page1(void)lcd_display_hz(hanzi_3,0x9a,0);/龙lcd_display_hz(hanzi_3,0x9b,1);/年lcd_display_hz(hanzi_3,0x9c,2);/大lc
24、d_display_hz(hanzi_3,0x9d,3);/吉writelcd_display_2bits(num,0x91,year_h/10,year_h%10);/20writelcd_display_2bits(num,0x92,year_l/10,year_l%10);/20 writelcd_display_2bits(num,0x93,11,11);/-writelcd_display_2bits(num,0x94,yue/10,yue%10);/12 writelcd_display_2bits(num,0x95,11,11);/-writelcd_display_2bits(
25、num,0x96,day/10,day%10);/12writelcd_display_2bits(num,0x89,hour/10,hour%10);/12lcd_display_hz(hanzi_4,0x8a,3);/时writelcd_display_2bits(num,0x8b,min/10,min%10);/00lcd_display_hz(hanzi_4,0x8c,4);/分writelcd_display_2bits(num,0x8d,sec/10,sec%10);/00lcd_display_hz(hanzi_4,0x8e,5);/秒write_comd(0x0c);/关闭游标
26、显示反白 delay_us(10); /*闹钟调整页面*/原函数:void clock_page2(void)/功能:时钟显示页/时间:/入口参数:/出口参数:/*/void clock_page2(void)write_comd(0x01); /清lcd显示delay_us(100);writelcd_display_2bits(num,0x89,hour/10,hour%10);/12lcd_display_hz(hanzi_4,0x8a,3);/时writelcd_display_2bits(num,0x8b,min/10,min%10);/00lcd_display_hz(hanzi_
27、4,0x8c,4);/分writelcd_display_2bits(num,0x8d,sec/10,sec%10);/00lcd_display_hz(hanzi_4,0x8e,5);/秒write_comd(0x0f);/游标显示write_comd(0x80);/*时间程序*/原函数:void auto_time(void)/功能:时间自动调整/时间:/入口参数:/出口参数:/*/void auto_time(void)if(flag_1s)flag_1s=0;sec+;if(sec>59)sec=0;min+;if(min>59)min=0;hour+;if(hour>
28、;23)hour=0;week+;if(week=7)week=1;day+;/2013年有7个月为31天=1.3.5.7.8.10.12if(yue=1|yue=3|yue=5|yue=7|yue=8|yue=10|yue=12)&&(day=31)yue+; /月份加一判断是否为大月或者为小月day=1;/如果其中一个月到,并且天数达到31天就返回重新开始计数/4个月是30天=4,6,9,11else if(yue=4|yue=6|yue=9|yue=11)&&(day=30)yue+;day=1;/1个月是28天=2else if(yue=2)&&
29、amp;(day=28)yue+;day=1;/判断年数if(yue=12) /等于12个月了就重新开始从第一个月开始yue=1;year_l+;if(year_l=99)year_l=12;year_h+;if(year_h=99)year_h=20; /*定时闹钟程序*/原函数:void time_clock(void)/功能:闹钟程序/时间:/入口参数:/出口参数:/*/void time_clock(void)if(key_clock=0)delay_us(2500);while(!key_clock);delay_us(2500);key_clock_counter+;clock_p
30、age2();while(1)if(key_clock=0)delay_us(2500);while(!key_clock);delay_us(2500);clock_page2();switch(key_clock_counter)case 1: writelcd_display_2bits(num,0x89,time_hour/10,time_hour%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub(); break;case 2:writelcd_display_2bits(num,0x8b,time_min/10,time_min%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;case 3:writelcd_display_2bits(num,0x8d,time_sec/10,time_sec%10);/12write_comd(0x10);delay_ms(100);scan_key_add();scan_key_sub();break;/秒case 4:key_clock_counter=0;write_comd(0x0c);/关闭
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 济宁基金从业资格证考试及答案解析
- 2025至2030薪酬管理软件行业产业运行态势及投资规划深度研究报告
- 金属矿山安全培训试题及答案解析
- 2025-2030绿色建筑相变储能材料热循环稳定性提升路径分析
- 2025-2030绿色建筑建材产业链协同发展及政策红利分析报告
- 2025-2030绿色建材背景下免漆门产业升级路径分析报告
- 2025-2030绿电制氨工艺路线选择与合成氨产能更新周期研究
- 2025-2030经颅磁刺激技术在儿童智力障碍治疗中的临床应用展望
- 2025-2030纳米载体生物农药控释技术专利布局与竞争分析
- 2025-2030纳米级手术器械材料创新与生物相容性测试报告
- DB11∕T 2306-2024 居家适老化改造服务规范
- CCC审核内审全套资料
- 消化内镜诊疗技术管理规范DOC
- 建设项目工程竣工决算编制规程
- GB/T 26043-2010锌及锌合金取样方法
- 眼内屈光手术角膜屈光手术新
- 巴尔麦氏与现代养猪生产
- 设备设计模板2-用于合并
- 原发性肝癌英文版
- 消防维保记录表格
- 中小学高级职称英语全英答辩题
评论
0/150
提交评论