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

📄 xqdz.c

📁 点阵实物程序仿真(左移显示毕业设计)
💻 C
字号:


/*头文件*/
#include <reg52.h>      
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define NOP() _nop_()

/*端口定义*/

sbit EN_port = P1^3;
sbit DA_in_port = P1^2;
sbit CLK_port = P1^1;
sbit Latch_port = P1^0;

#define ABCD_port P1  //HC138 ABCD端口定义
//sbit D_port = P1^7;
//sbit C_port = P1^6;
//sbit B_port = P1^5;
//sbit A_port = P1^4;

uchar code ziku_table[]={

0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*显示8行空白*/
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

0xF3,0xFC,0xF3,0xCC,0x83,0xC4,0x83,0xF0,0xF3,0xFC,0x93,0x9C,0x83,0x80,0xE3,0xC1,
0x7F,0xFE,0x7F,0xFE,0x00,0x80,0x00,0x80,0x7F,0xFE,0x7F,0xFE,0x7F,0xFE,0xFF,0xFF,/*"毕",0*/

0x9F,0xFC,0x9F,0xFC,0x9F,0xFC,0x9F,0xFC,0x99,0xCC,0x99,0xCC,0x99,0xCC,0x93,0xE4,
0x93,0xE4,0x93,0xE4,0x9F,0xFC,0x9F,0xFC,0x9F,0xFC,0x00,0x80,0x00,0x80,0xFF,0xFF,/*"业",0*/


0x3B,0xF0,0x33,0xF0,0x27,0xF3,0x37,0xF3,0x1F,0x83,0x90,0x87,0x10,0xE0,0x13,0xE0,
0x33,0xE7,0x33,0xF3,0x73,0xF2,0xC3,0xF8,0x63,0xF0,0x13,0x86,0x9F,0xCF,0xFF,0xFF,/*"设",0*/

0xFF,0xFF,0xFB,0xF9,0xF3,0xF9,0xE7,0xF9,0xFF,0xF9,0x10,0x80,0x10,0x80,0xF3,0xF9,
0xF3,0xF9,0xF3,0xF9,0xF3,0xF9,0xD3,0xF9,0xC3,0xF9,0xE3,0xF9,0xF3,0xF9,0xFF,0xFF,/*"计",0*/



0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,/*显示8行空白*/
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,

};


uchar data disp_buff[32]; //32 个显示数据缓存
//数据格式为 第1级第1行高八位,低八位,第1级第2行高八位。。。。。。
uchar data disp_han;   //目前显示到第几行


void T0_Set() /*定义中断方式,中断时间*/
{
    TMOD = 0x01;  //定时0,工作在方式1
    TH0  = (65536-1000)/256;
    TL0  = (65536-1000)/256;
    TR0  = 1;     //启动计数
    EA   = 1;     //开总中断
    ET0  = 1;     //开定时器0中断
	return;
}

void delay_1ms(uchar x)
{
    uchar j;
    while(x--){
        for(j=0;j<125;j++)
            {;}
        }   
}


void main()
{
	uchar i;
	uint data_temp[2];
	uint temp,temp1;
	uchar hanzi;
	uchar han;
	uchar shift=1;
	for(i=0;i<32;i++) disp_buff[i]=0xff;
	T0_Set();
	while(1){
		for(hanzi=0;hanzi<4;hanzi++){	//最多显示多少个字
			for(shift=0;shift<16;shift++){	//一个字移位16位
				for(han=0;han<16;han++){   //一个字有16行数据
					//取字库里面数据			
					data_temp[0]=ziku_table[(hanzi*32)+(han*2)+1]*0x100 + ziku_table[(hanzi*32)+(han*2)];
					data_temp[1]=ziku_table[((hanzi+1)*32)+(han*2)+1]*0x100 + ziku_table[((hanzi+1)*32)+(han*2)];

					//右往左移动
					temp = data_temp[0];
					temp1 = data_temp[1];
					for(i=shift;i>0;i--){
						temp = (temp>>1) ;
						if((temp1&0x0001)!=0) temp = temp + 0x8000;  //将TMEP1的最低位移位到TMEP的最高位
						temp1 = (temp1>>1);
						} 
					disp_buff[han*2+1]=temp/0x100;
					disp_buff[han*2+0]=temp%0x100;
					//------------------------------
					}
				delay_1ms(100); //移位速度
				}
			}
		}
}




void SLED_Disp() interrupt 1 using 3
{
	uchar i;
	uchar data_buff;
	uchar temp;
	uchar han;	
    TH0  = (65536-1000)/256;
    TL0  = (65536-1000)/256;
	Latch_port = 0;  //HC595锁定输出,避免数据传输过程中,屏数据变化从而显示闪烁
	CLK_port = 0;
	han=disp_han;
	//74HC595输出数据
	temp = disp_han*2+1; 
	data_buff = disp_buff[temp];
	for(i=0;i<8;i++){
		if((data_buff&0x80)!=0) DA_in_port = 1;
		else DA_in_port = 0;
		CLK_port = 1;
		CLK_port = 0;
		data_buff <<= 1;
		}
	temp = disp_han*2;
	data_buff = disp_buff[temp];
	for(i=0;i<8;i++){
		if((data_buff&0x80)!=0) DA_in_port = 1;
		else DA_in_port = 0;
		CLK_port = 1;
		CLK_port = 0;
		data_buff <<= 1;
		}
	//74HC138输出控制	 
	EN_port = 1;    //关屏显示,原理为使HC138输出全为1,从而三极管截止,点阵不显示
	ABCD_port = (ABCD_port & 0x0f)|(han<<4);  //HC138译码输出
	Latch_port = 1; //允许HC595数据输出到Q1-Q8端口
	EN_port = 0;    //HC138输出有效,打开显示
	Latch_port = 0;	//锁定HC595数据输出

	disp_han++;	//显示下一行数据
	if(disp_han>=16) disp_han=0;
}

⌨️ 快捷键说明

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