LED3216点阵屏程序.docx
- 文档编号:7950264
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:29
- 大小:169.44KB
LED3216点阵屏程序.docx
《LED3216点阵屏程序.docx》由会员分享,可在线阅读,更多相关《LED3216点阵屏程序.docx(29页珍藏版)》请在冰豆网上搜索。
LED3216点阵屏程序
帮同学修改的,显示的是Ta的名字。
Main
/********************************************************
程序名称:
LED3216点阵大屏交替显示时间和温度V1.0
简要说明:
P0口接上行线,P2口接下行线,P1口接扫描线
P1.6接左屏译码器使能端(CS1)
P1.7接右屏译码器使能端(CS2)
晶振12M
编写:
twbin
最后更新:
15/01/02晚于实验室
********************************************************/
//#include
#include
#include
#include
#defineucharunsignedchar
#defineuintunsignedint//宏定义
#definehang1P0//上半屏行线
#definehang2P2//下半屏行线
#definelieP1//扫描列线
#defineSETP3_2//定义设置(调整选择)键
#defineADDP3_3//定义增加键
uchardian1,dian2,dian3,dian4;//用于时间闪烁的冒号
ucharmin,hour;//定义时间映射全局变量
ucharset_st=0;//调整选择标志0:
正常走时;1:
调时;2:
调分
ucharset_key_st=0;//设置标志,为1则调用一次SET键处理
ucharadd_key_st=0;//增加标志,为1则调用一次调时函数
uchark=1;//秒闪烁及选中闪烁标志
/*****参数调整项*****/
#definelight180//显示亮度调节,数值不可过大,以不感到屏幕闪烁为准
ucharm,n,p,t;//全局变量
uchardisbuf[64];//显示缓存
ucharx=0,y=0,z=0;//用于系统时基
/*****延时子程序*****/
voiddelay(void)//专门设置的延时程序用来改变扫描速度以方便调节亮度
{
uchari;
for(i=0;i } /*****(n)ms延时子程序*****/ voiddelayms(uintn) { uchari; while(n--) { for(i=0;i<125;i++); } } /*****初始化定时器*****/ voidinitTimer(void) { TMOD=0x1;//定时器0工作方式1 TH0=0x3c; TL0=0xb0;//赋初值,定时50ms } /*****定时器0中断服务程序*****/ voidtimer0(void)interrupt1 { TH0=0x3c; TL0=0xb0;//重新赋初值 x++;y++;z++; if(x>10){k=~k;x=0;}//0.5秒k取反一次,用于秒的冒号闪烁和调时选中闪烁 if(y>=300){y=0;}//系统时基、工作节拍控制 } /*****外部中断0服务程序*****/ voidint0(void)interrupt0 { EX0=0; set_key_st=1;//开启设置键标志 } /*****外部中断1服务程序*****/ voidint1(void)interrupt2 { EX1=0; add_key_st=1;//开启增加键标志 } /*****初始化DS1302(用于系统第一次使用)*****/ voidinit_1302(void)//(2009年1月1日00时00分00秒星期一) { write_clock(0x8e,0x00);//允许写操作 write_clock(0x8c,0x09);//年 write_clock(0x8a,0x01);//星期 write_clock(0x88,0x01);//月 write_clock(0x86,0x01);//日 write_clock(0x84,0x00);//小时 write_clock(0x82,0x00);//分钟 write_clock(0x80,0x00);//秒 write_clock(0x90,0xa5);//充电 write_clock(0x8e,0x80);//禁止写操作 } /*****常用时钟数据读取*****/ voidread_clockS(void) { hour=read_clock(0x85);//读取小时数据 min=read_clock(0x83);//读取分钟数据 } /*****SET键处理程序*****/ voidset_key(void) { if(SET==0){set_st++;z=0;} if(set_st>2)set_st=0;//调整功能标志加一 set_key_st=0;//关闭设置键标志 } /*****设置时间函数*****/ voidSet_time(unsignedcharsel)//引入调整选择标志 { signedcharaddress,item; signedcharmax,mini; if(sel==1){address=0x84;max=23;mini=0;}//小时 if(sel==2){address=0x82;max=59;mini=0;}//分钟 item=((read_clock(address+1))/16)*10+(read_clock(address+1))%16;//读取1302某地址上的数值转换成10进制赋给item if(ADD==0){item++;z=0;} if(item>max)item=mini;//查看数值有效范围 if(item write_clock(0x8e,0x00);//允许写操作 write_clock(address,(item/10)*16+item%10);//转换成16进制写入1302 write_clock(0x8e,0x80);//写保护,禁止写操作 add_key_st=0;//关闭增加键标志 } /*****读取时间*****/ voidcheck_shijian(void) { read_clockS();//读取时间 m=hour/16;//计算得到小时十位数字 n=hour&0x0f;//计算得到小时个位数字 p=min/16;//计算得到分钟十位数字 t=min&0x0f;//计算得到分钟个位数字 } /*****读取温度*****/ voidcheck_wendu(void) { uinti; i=ReadTemperature()-5;//获取温度值并减去DS18B20的温漂误差 m=i/100;//计算得到十位数字 n=i%10/10;//计算得到个位数字 p=i%10;//计算得到小数位数字 } /*****将待显示时间内容存至缓冲区*****/ voidload_shijian(void) { uchara; if(set_st==1&&k==1)//调时,小时位闪烁,x的取反频率为闪烁频率 { for(a=0;a<16;a++){disbuf[a]=0;} for(a=16;a<32;a++){disbuf[a]=0;} } else//正常显示,加载小时信息 { for(a=0;a<16;a++){disbuf[a]=shuzi1[m*16+a];} for(a=16;a<32;a++){disbuf[a]=shuzi2[n*16+a-16];} } if(set_st==2&&k==1)//调分,分钟位闪烁,x的取反频率为闪烁频率 { for(a=32;a<48;a++){disbuf[a]=0;} for(a=48;a<64;a++){disbuf[a]=0;} } else//正常显示,加载分钟信息 { for(a=32;a<48;a++){disbuf[a]=shuzi3[p*16+a-32];} for(a=48;a<64;a++){disbuf[a]=shuzi4[t*16+a-48];} } } /*****将待显示温度内容存至缓冲区*****/ voidload_wendu(void) { uchara; for(a=0;a<16;a++) { if(m==0) disbuf[a]=0x00;//如果十位为0则不显示,目的在于消除前置0 else disbuf[a]=shuzi[m*16+a]; }//加载温度十位信息 for(a=16;a<32;a++){disbuf[a]=shuzi[n*16+a-16];}//加载温度个位信息 for(a=32;a<48;a++){disbuf[a]=shuzi[p*16+a-32];}//加载温度小数位信息 for(a=48;a<64;a++){disbuf[a]=fuhao[a-48];}//加载摄氏度符号 } /*****显示子程序*****/ voiddisplay(void) { uchari; for(i=0;i<8;i++) { lie=i|0xB0;//左屏列扫描信号输出 hang1=disbuf[i]; hang2=disbuf[i+8];//行信号输出 delay();//扫描延时 hang1=0;hang2=0; } for(i=8;i<16;i++) { lie=i|0xB0;//左屏列扫描信号输出 hang1=disbuf[i-8+16]; if(i==15)hang1=dian1;//显示冒号 hang2=disbuf[i+16];//行信号输出 if(i==15)hang2=dian2;//显示冒号 delay();//扫描延时 hang1=0;hang2=0; } for(i=0;i<8;i++) { lie=i|0x70;//右屏列扫描信号输出 hang1=disbuf[i+32]; if(i==0)hang1=dian3;//显示冒号 hang2=disbuf[i+8+32];//行信号输出 if(i==0)hang2=dian4;//显示冒号 delay();//扫描延时 hang1=0;hang2=0; } for(i=8;i<16;i++) { lie=i|0x70;//右屏列扫描信号输出 hang1=disbuf[i-8+48]; hang2=disbuf[i+48];//行信号输出 delay();//扫描延时 hang1=0;hang2=0; } } /*****显示图片子程序*****/ voiddisplay_pic(uchar*pic) { uchari; for(i=0;i<16;i++) { hang1=hang2=0; lie=i|0xb0;//左屏列扫描信号输出 hang1=pic[i];//上半屏行信号输出 hang2=pic[i+32];//下半屏行信号输出 delay();hang1=hang2=0; } for(i=16;i<32;i++) { hang1=hang2=0; lie=i|0x70;//右屏列扫描信号输出 hang1=pic[i];//上半屏行信号输出 hang2=pic[i+32];//下半屏行信号输出 delay();hang1=hang2=0; } } /*****主程序*****/ voidmain(void) { P1=0xff; delayms(500);//等待芯片复位,目的是稳定检测是否需要初始化 while(SET==0)//通电前按下SET键不放,接通电源时便初始化时间信息 { init_1302(); display_pic(init_pic);//显示初始化提示画面 } initTimer();//初始化定时器 TR0=1;//开启定时器0 ET0=1; EA=1;//开中断总开关 y=0;//系统时基清零 while(y<20) { display_pic(LED3216);//开机标识 } while(y<40) { display_pic(kecheng); } while(y<60) { display_pic(sheji); } while(y<80) { display_pic(tanyue); } while(y<100) { display_pic(xia); } IT0=1;//开启外部中断0 EX0=1; IT1=1;//开启外部中断1 EX1=1; check_wendu();//开机时读取一次温度信息,使DS18B20稳定 y=0;//系统时基清零 while (1) { while(set_key_st)//设置键按下 { delayms (1);set_key();EX0=1; } if(set_st==1||set_st==2)//进入调时选中状态后如果长时间无调整则自动退出 { if(z>=200){set_st=0;z=0;} } if(set_st==1||set_st==2)y=0;//系统时基清零 if(y<150||set_st==1||set_st==2) { check_shijian();//读取时间信息 while(add_key_st&&set_st>0)//增加键按下 { Set_time(set_st);EX1=1; } if(k==1)//控制秒冒号闪烁 {dian1=dian3=0x30;dian2=dian4=0x18;}//秒闪烁,x取反频率即为闪烁频率 else{dian1=dian3=0x00;dian2=dian4=0x00;} load_shijian();//加载时间 display();//显示 } elseif(y<152&&set_st==0) { check_wendu();//读取温度信息 } elseif(y<210&&set_st==0) { dian1=dian3=dian4=0x00;dian2=0x40; load_wendu();//加载温度 display();//显示 } elseif(y<300&&set_st==0) { display_pic(xiaxia);//显示霞霞 } } } Ziku /*****温度显示字形编码*****/ unsignedcharcodeshuzi[]= { /*--文字: 0--*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00, /*--文字: 1--*/ 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00, /*--文字: 2--*/ 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00, /*--文字: 3--*/ 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00, /*--文字: 4--*/ 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00, /*--文字: 5--*/ 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00, /*--文字: 6--*/ 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00, /*--文字: 7--*/ 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00, /*--文字: 8--*/ 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00, /*--文字: 9--*/ 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00 }; /*****小时十位字形编码*****/ unsignedcharcodeshuzi1[]= { 0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,//"未命名文件",0 0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,//"未命名文件",1 0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,//"未命名文件",2 0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",3 0x00,0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,//"未命名文件",4 0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",5 0x00,0xF8,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",6 0x00,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,//"未命名文件",7 0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x3F,0x00,//"未命名文件",8 0x00,0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00//"未命名文件",9 }; /*****小时个位字形编码*****/ unsignedcharcodeshuzi2[]= { 0xF8,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x3F,0x00,0x00,//"未命名文件",0 0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,//"未命名文件",1 0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x3F,0x21,0x21,0x21,0x21,0x21,0x00,0x00,//"未命名文件",2 0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x21,0x21,0x21,0x21,0x21,0x3F,0x00,0x00,//"未命名文件",3 0xF8,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x3F,0x00,0x00,//"未命名文件",4 0xF8,0x08,0x08,0x08,0x08
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LED3216 点阵 程序