《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
ch=ch<<1; //待发数据左移 Delay1us(8); //延时8μ
Clr7279CLK; //置CLK低电平 Delay1us(8); //延时8μ }
Clr7279DAT; //发送完毕,DATA端置低,返回 }
unsigned char Receive7279Byte(void) {
unsigned char i,ch; ch=0;
Set7279DAT; //DATA端置为高电平,输入状态 Delay1us(50); //延时50μ for (i=0;i<8;i++) {
Set7279CLK; //置CLK高电平 Delay1us(8); //延时8μ
ch=ch<<1; //接收数据左移1位 if (HD7279_DAT)
ch+=1; //接收1位数据
Clr7279CLK; //置CLK低电平 Delay1us(8); //延时8μ }
Clr7279DAT; //接收完毕,DATA端重新置成低电平(输出状态) return ch; }
void FlashLED(unsigned char No) {
char i;
Send7279Byte(0x88); //发闪烁指令 i=0x1; while (No) {
i=i<<1; No--; }
Send7279Byte(~i); //1闪烁
NOSELECT7279; //置CS高电平 } /*
void BlankLED(unsigned char ch) {
Send7279Byte(0x98); file://发消隐指令 Send7279Byte(ch); file://1-显示 0-消隐
20
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
NOSELECT7279; file://置CS高电平 } */
void MoveLeft(void) {
Send7279Byte(0xA1); //发左移指令 NOSELECT7279; //置CS高电平 }
void MoveRight(void) {
Send7279Byte(0xA0); //发右移指令 NOSELECT7279; //置CS高电平 }
unsigned char code BdSeg[]={
0x7e,0x30,0x6d,0x79, // 0 1 2 3
0x33,0x5b,0x5f,0x70, // 4 5 6 7 0x7f,0x7b,0x77,0x1f, // 8 9 a b 0x4e,0x3d,0x4f,0x47, // c d e f 0x00,0x01}; /*
; b6 ; ---- ; b1| b0 |b5
; ---- small ; b2| b3 |b4 ; ---- .b7 */
void DispLED(char *DispBuf,char ShowDot)//ShowDot 显示小数点位 {
char i,ch; ShowDot--; for (i=0;i<6;i++) {
ch=DispBuf[i];
if ((ch>='a') && (ch<='f')) {
ch-='a';ch+=0xa; }
if ((ch>='A') && (ch<='F')) {
ch-='A';ch+=0xa; }
Send7279Byte(0x90+5-i); //不译码 if (ch==' ')
21
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
Send7279Byte(0x00); else
if (ch=='-')
Send7279Byte(0x01); else {
if (ShowDot==i)
Send7279Byte(0x80|BdSeg[ch&0x0f]); else
Send7279Byte(BdSeg[ch&0x0f]); } }
NOSELECT7279; //置CS高电平 }
char GetKeyValue(void) {
char KeyValue;
if (CPT1CN&0x40) return -1; //无键按下 Send7279Byte(0x15); //发读键盘指令 KeyValue=Receive7279Byte();
NOSELECT7279; //置CS高电平 return KeyValue; }
void WaitKeyOff(void) {
while (!(CPT1CN&0x40)); }
void Test7279(bit LoopFlag) {
char i,KeyValue;
Delay1ms(25); //等待25ms复位时间 Send7279Byte(0xA4); //发复位指令 NOSELECT7279; //置CS高电平 if (LoopFlag==0) return;
DispLED(\ //显示123456 for (i=0;i<8;i++) {
Delay1s(1); MoveLeft(); }
DispLED(\显示123456 DispLED(\ //显示123456 DispLED(\ //显示123456 for (i=0;i<6;i++)
22
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
{
Delay1s(1); MoveRight(); }
DispLED(\ //显示123456 FlashLED(0); //第一位闪烁 Delay1s(1);
FlashLED(1); //第二位闪烁 Delay1s(1);
FlashLED(8);//关闪烁
//BlankLED(0x23); //注意:执行消隐后,键盘输入中断口不能恢复. for (;;) {
KeyValue=GetKeyValue(); if(KeyValue!=-1) {
Send7279Byte(0xC8); //发送键码值,按方式1译码下载显示 Send7279Byte(KeyValue);
NOSELECT7279; //置CS高电平 WaitKeyOff(); } } }
五.调试过程
将如下源文件c8051F020.h,main.c, ADC.c,KS0108.c,test7279.c加入到开发工具中,调试程序,并下载到单片机中运行,首先有“江苏大学计算机学院”一行字向上滚动,然后显示“2010年单片机课程设计”一行向下滚动,再显示“液晶点阵显示屏程序设计”向右滚动,再显示“姓名:宗慧;班级:通信 0902; 学号:3090601035;”向左滚动。当这些字显示完毕后,最后显示请选择:1.温度;2.电;3.压力;
在程序设计和调试过程中,遇到和解决了以下几个问题:
1)一开始在取模,我在文字输入区输入”江苏大学计算机学院“后,得到的点阵是一个字一个字的,并不像程序中原来的模板那样是一大串的,后来经过讨论和研究,应该将文字以128x64的图片的形式进行点阵输出。但是在使用图片时,我犯了一个错误,就是在截完图之后,我是先将它粘贴在QQ的对话框里,再进行另存,但是后果是出现了乱码,之后我直接在写完之后就保存为图片,再在软件中打开,就不会出现这种情况。之后我自己认为可能是粘贴到QQ中之后意义就不同了,它将是对这一整幅画进行点阵处理而不是那几个字,所以才会出现乱码。
六.运行结果
第一页从下到上滚动显示:江苏大学计算机学院
23
《C8051F单片机原理及应用》课程设计——日历时钟与键盘显示程序设计
第二页从下到上滚动显示:2010年单片机课程设计 第三页向右滚动显示:液晶点阵显示屏程序设计
第四页向左滚动显示:姓名:宗慧;班级:通信 0902; 学号:3090601035; 第五页显示:请选择:1.温度;2.电;3.压力; 按“1”显示温度:****℃ ; 按“2”显示电压:****mV; 按“3”显示压力:****N; 按“4”返回原画面。
七.心得体会
将平时学习到的单片机和C语言知识运用到实验中,使得我们对所掌握的单片机和C语言知识的一次很好的巩固和加深。不但如此,我们还收获了其他的一些平时不知道的内容。比如:对字模提取的软件的使用,一开始不了解如何取模,后来发现了取模软件,通过将一行字编辑为以“bmp\结尾的图片,通过在取模软件中打开图片,然后就生成一幅我们所需要的图片的字模。虽然程序老师已经给出,但是还是需要我们施加一些整改,在不断地报错又不断地修改中,最终还是将程序运行成功。虽然程序中我还有很多不了解和不懂,在老师的最终提问的问题中还有很多不会,但是我个人觉得我的这次课程设计的收获还是不错的,获得了不少知识。
24
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库液晶点阵显示屏课程设计报告 通信09235-宗慧(5)在线全文阅读。
相关推荐: