⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 STM8S105S4程序
💻 C
字号:
/******************** 2011电子科技协会 ********************
;名称 :点阵    
;作者 : 郑品洪
;日期 : 07/25/2011
;描述 :  循环显示I LOVE(心形) U
;说明 :由于这里将心形采用动态形式显示, 使得显示数组较多, 前三个一样的数组是为了延长“I” 的显示时间,这样显示时间才协调
        后三个数组同理,中间的九个数组是使得心形有动态效果的,这里看起来很复杂,实则读者在这里只要掌握
                595的使用就可以很容易理解了,595的使用涉及到操作时序,需要看懂时序图,这是很重要的
;***********************************************************/
#include <stm8s105s4.h>
#define uchar unsigned char
#define uint  unsigned int
_Bool E @PG_ODR:0;             //注意这里开始引入位定义, 相当于51里的sbit E=PG0;这是stm8的位定义形式
_Bool RCLK @PD_ODR:4;
_Bool SRCLK @PD_ODR:5;
_Bool SER @PD_ODR:6;
uchar a,b;
uchar table[14][8]={{0xff,0x83,0xef,0xef,0xef,0xef,0x83,0xff},
                   {0xff,0x83,0xef,0xef,0xef,0xef,0x83,0xff},
                   {0xff,0x83,0xef,0xef,0xef,0xef,0x83,0xff},

                   {0xff,0xff,0xef,0xff,0xff,0xff,0xff,0xff},
                   {0xff,0x93,0xef,0xff,0xff,0xff,0xff,0xff},
                   {0xff,0x93,0x6d,0xff,0xff,0xff,0xff,0xff},
                   {0xff,0x93,0x6d,0x7d,0xff,0xff,0xff,0xff},
                   {0xff,0x93,0x6d,0x7d,0xbb,0xff,0xff,0xff},
                   {0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xff,0xff},
                   {0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xef,0xff},
                   {0xff,0x93,0x6d,0x7d,0xbb,0xd7,0xef,0xff},
						 																	 
                   {0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff},
                   {0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff},
                   {0xff,0xbb,0xbb,0xbb,0xbb,0xbb,0xc7,0xff}};
                            			//存放了显示的代码
void delay(uint s)
{
    uchar i;
    for(s;s>0;s--)
      for(i=0;i<200;i++);
}

void init(void)    //初始化函数,PC是用来控制138以驱动点阵的行
{
        PG_DDR=0x01;
        PG_CR1=0x01;
        PG_CR2=0x00;
    	
        PD_DDR=0x70;
        PD_CR1=0x70;
        PD_CR2=0x00;
    	
        PC_DDR=0x0f;
        PC_CR1=0x0f;   
        PC_CR2=0x00;	 
}
void display(void)      //显示子函数
{
    uchar m,n,p,q;
	 E=1;							 //先关闭595(赋值时会影响显示效果)
    m=table[a][b];      //将要显示的table[a][b]赋值给m
    for(q=0;q<8;q++)
    {
        p=0;
        if((m&0x80)==0x80)
        p=1;                   //这三句的意思是如果m的最高位是1,则p=1,否则为0,就是把m最高位赋值给p
				SER=p;               //把p输入595输入口
        SRCLK=0;
            	RCLK=1;
        if(1);
        SRCLK=1;
				RCLK=0;              //以上语句涉及 595的操作时序, 请参考595芯片资料
        m=(m<<1);       
    }
	 E=0;							  //赋值完后打开595		
}

void main()
{   
  uint i,j;
    init();
    while(1)
    {
        for(a=0;a<14;a++)        //有14个数组要传送
        {
					for(i=0;i<10;i++)       //每个数组扫描10次,这样才 能看清楚
        	{
							for(b=0;b<8;b++)     //每个数组有8个数
            	{
									display();
									PC_ODR=b*2;    //让138和595同步
									delay(2);        //延时一会,以使显示清楚, 延时不能太长,太长会看到闪烁,也不能太短,太短显示不清楚
            	}
        	}
        }
            delay(1000);              //为了使得看起来是I LOVE U是一个周期,这里循环一次后,延时1秒
    }
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -