|
这个摇摇棒可以显示如下图片
32灯摇摇棒的元件清单
32灯摇摇棒的原理图
摇摇棒的单片机程序:
- #include <NEW_8051.H>
- #include <task.h>
- //缓存
- #define uchar unsigned char
- #define uint unsigned int //宏定义
- #define KEY P3^0 //定义画面切换按键
- uchar KY; //KY作用在后面说明
- uchar disp=0; //显示汉字指针,该参数+1的话,显示的字符多4个,同时要给要显示的汉字取模加到汉字数组中。
- uchar pic=0,num=0; //pic为按键次数;num为中断次数
- uchar code xinjiaxin[]={
- 0x00,0x0E,0x11,0x21,0x42,0x84,0x42,0x21,0x11,0x0E,0x00,0x08,0x08,0x3E,0x08,0x08,
- 0x00,0x00,0x0E,0x1E,0x3C,0x78,0x3C,0x1E,0x0E,0x00,0x14,0x14,0x14,0x14,0x00,0x0E,
- 0x1F,0x3F,0x7E,0xFC,0x7E,0x3F,0x1F,0x0E,/*"xinjiaxin*/
- };
- unsigned char code miss[] = {
- 0x00,0x00,0x00,0x81,0xFF,0x81,0x00,0x00,0x00,0x00,0x04,0x7C,0x04,0x7C,0x04,0x7C,
- 0x00,0x7D,0x00,0x5C,0x54,0x54,0x74,0x00,0x5C,0x54,0x54,0x74,0x00,0x00,0x00,0x7F,
- 0x80,0x80,0x80,0x7F,0x00,0x00,0x00,0x00,/*I miss U*/
- };
- /*****函数声明*****/
- void display2(void);
- void display5(void);
- /*****n(单位us微秒)延时子程序*****/
- void DelayUs(uint N)
- {
- uint x;
- for(x=0; x<=N;x++);
- }
- /*****主函数*****/
- void main(void)
- {
- IT0=1;
- EX0=1;
- EA=1; //开中断,下降沿中断
- KY=0;
- while(1) //主程序中只检测按键
- {
- if(KEY==0) //图案切换键按下
- {
- DelayUs(20000); //去除按键抖动
- if(KEY==0);
- {
- pic++;
- disp=0;
- num=0;
- } //endif
- } //endif
-
- } //endwhile
- } //endmain
- /*****中断服务程序*****/
- void intersvr0(void) interrupt 0 using 1
- {
- KY=~KY; //每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)
- if(KY==0)
- {
- if(pic>1)pic=0;//总共有6个图案
- num++; //计算中断次数
- switch(pic) //选择显示图案
- {
-
- case 1:{display2();}break;
-
- case 2:{display5();}break;
- default:{display2();}
- }
- }
- }
- /*****显示子程序3(汉字)*****/
- void display2(void)
- {
- uchar i;
- DelayUs(5000);
- for(i=0;i<40;i++)
- {
- P1=~miss[i*1];
-
- DelayUs(75);
- }
- }
- /*****显示子程序6(汉字)*****/
- void display5(void)
- {
- uchar i;
- DelayUs(5000);
- for(i=0;i<40;i++)
- {
- P1=~xinjiaxin[i*1];
-
- DelayUs(65);
- }
- }
- /*****END*****/
复制代码
改字软件、制作过程等完整资料下载
|
|