1.课程设计:单片机的8乘8LED点阵显示屏的设计
#include#include#define uchar unsigned char#define uint unsigned int uchar code Table_of_Digits[]= {0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //00x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //10x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //20x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //30x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //40x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //50x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //60x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //70x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //80x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //90xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff }; uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; uchar i=0,j=0,t=0,Num_Index,key,xi,yi;//主程序 void main() { P1=0x80; Num_Index=0; //从0 开始显示 TMOD=0x01; //T0 方式0 TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; IE=0x82; key=0; xi=0; yi=0; EX0=1; IT0=1; TR0=1; //启动T0 while(1); }//T0 中断函数 void ext_int0() interrupt 0 { key++; key&=0x03; } void LED_Screen_Display() interrupt 1 { TH0=(65536-2000)/256; //2ms 定时 TL0=(65536-2000)%256; switch(key) { case 0: P0=0xff; //输出位码和段码 P0=~Table_of_Digits[Num_Index*8+i]; P1=_crol_(P1,1); if(++i==8) i=0; //每屏一个数字由8 个字节构成 if(++t==250) //每个数字刷新显示一段时间 { t=0; if(++Num_Index==10) Num_Index=0; //显示下一个数字 } break; case 1: P0=~xdat[xi]; P1=0xff; P1=ydat[yi]; if(++t==250) //每个数字刷新显示一段时间 { t=0; yi++; if(yi>7){yi=0;xi++;} if(xi>7)xi=0; } break; case 2: P0=0xff; //输出位码和段码 P0=~Table_of_Digits[80+j]; if(j==0)P1=0x80; P1=_crol_(P1,1); if(++j==8) j=0; //每屏一个数字由8 个字节构成 break; default: key=0; i=0; j=0; t=0; xi=0; yi=0; Num_Index=0; P0=0xff; P1=0x80; break; } }。
2.哪位大虾有关于8*8 led点阵广告牌的毕业设计,要求用单片机设计,
#include<reg52.h>
void delay();
unsigned char code digittab[88]={ //行选通
0x00,0x00,0x00,0x00,//缓冲下,0从右端出来啦!!!
0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,//0
0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00,/*1*/
0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00,/*2*/
0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00,/*3*/
0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,/*4*/
0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00,/*5*/
0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00,/*6*/
0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00,/*7*/
0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00,/*8*/
0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00,/*9*/
0x00,0x00,0x00,0x00//让9继续滚动完
};
unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,
0xf7,0xfb,0xfd,0xfe,}; //列选通
void main()
{
unsigned char i=1,x=0,j=0,tcount=0;
unsigned int ledroll[8];
for(j=0;j<8;j++)
ledroll[j]=digittab[j];
while(1)
{
for(x=0;x<8;x++)//扫描显示出当前字样
{
P2=tab[x];
P0=ledroll[x];
delay();//暂留一下下
}
/*将行选通后移一个*/
if(++tcount>30)//扫描30次
{
tcount=0;
for(j=0;j<8;j++)
ledroll[j]=digittab[j+i];//此处重点
if(++i>=80)//88减8当然等于80啦
i=0;
}
}
}
void delay()//制造视觉暂留效应
{
unsigned int x,y;
for(x=2;x>0;x--)
for(y=123;y>0;y--);
}
3.单片机课程设计8*8点阵显示
//流水灯的方式测试点阵#include
4.8*8点阵显示等腰直角三角形的论文怎么写
效果图如下:
*
*
**** * *
* * * **
* * * ***
* *** *
* * *******
* *
**** *******
* * * *
* * *
* *
* *
*******
* *
源程序如下,楼主自己看着改。
#include <stdio.h>
FILE *hzk = NULL;
void PutString(char *str)
{
char mat[16][2];
int i, j, k;
unsigned long offset;
if(*str & 0x80)
{
i = (unsigned char)*str - 0xa0;
j = (unsigned char)*(str+1) - 0xa0;
offset = 94*(i-1) + (j-1);
}
else offset = 188 + ((unsigned char)*str-33);
fseek(hzk, offset*32, SEEK_SET);
fread(mat, 32, 1, hzk);
for(j=0; j<16; j++)
{
for(i=0; i<2; i++)
{
for(k=0; k<8; k++)
{
if(mat[j][i]&(0x80>>k)) printf("*");
else printf(" ");
}
}
printf("\n");
}
}
int main()
{
if((hzk=fopen("hzk.dat", "rb")) == NULL)
{
printf("Hzk open error!\n");
return -1;
}
PutString("哈");
fclose(hzk);
return 0;
}
1
5.求一个设计:8位8*8点阵LED显示控制怎么做
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY seg70 IS PORT ( clk : IN std_logic; --clk 50MHZ rst : IN std_logic; --REST dataout : OUT std_logic_vector(7 DOWNTO 0); --各段数据输出 en : OUT std_logic_vector(7 DOWNTO 0)); --COM使能输出 END seg70; ARCHITECTURE arch OF seg70 IS signal cnt_scan : std_logic_vector(15 downto 0 ); --计数器分频用 signal data4 : std_logic_vector(2 downto 0); signal dataout_xhdl1 : std_logic_vector(7 downto 0); signal en_xhdl : std_logic_vector(7 downto 0); begin dataout<=dataout_xhdl1; en<=en_xhdl; process(clk,rst) begin if(rst='0')then cnt_scan<="0000000000000000"; elsif(clk'event and clk='1')then cnt_scan<=cnt_scan+1; --计数器累加 end if; end process; process(cnt_scan(15 downto 13)) --计数器分频 begin case cnt_scan(15 downto 13) is --这里有8种状态,一个状态的时间间隔是一样的。
when"000"=> en_xhdl<="11111110"; --每一次轮流选择一排点阵灯 when"001"=> en_xhdl<="11111101"; when"010"=> en_xhdl<="11111011"; when"011"=> en_xhdl<="11110111"; when"100"=> en_xhdl<="11101111"; when"101"=> en_xhdl<="11011111"; when"110"=> en_xhdl<="10111111"; when"111"=> en_xhdl<="01111111"; when others=> en_xhdl<="11111110"; end case; end process; process(en_xhdl) begin case en_xhdl is --每一选择一排灯,同时还要给点阵的数据端口送数据 when "11111110"=> data4<="000"; when "11111101"=> data4<="001"; when "11111011"=> data4<="010"; when "11110111"=> data4<="011"; when "11101111"=> data4<="100"; when "11011111"=> data4<="101"; when "10111111"=> data4<="110"; when "01111111"=> data4<="111"; when others => data4<="111"; end case; end process; process(data4) begin case data4 is --给点阵的数据端口送数据 --点阵数据口对应的管脚为1时,那个点不会亮。 --当点阵数据口对应的管脚为0时,那个点会亮。
--下面是一个汉字“正”的点阵码,就是利用点阵的亮和不亮形成对比显示出来的。 WHEN "000" => dataout_xhdl1 <= "11111111"; --第一行 WHEN "001" => dataout_xhdl1 <= "00000000"; WHEN "010" => dataout_xhdl1 <= "11101011"; WHEN "011" => dataout_xhdl1 <= "10001011"; WHEN "100" => dataout_xhdl1 <= "11101011"; WHEN "101" => dataout_xhdl1 <= "11101111"; WHEN "110" => dataout_xhdl1 <= "10000001"; WHEN "111" => dataout_xhdl1 <= "11111111"; --第八行 WHEN OTHERS => dataout_xhdl1 <= "00000011"; END CASE; END PROCESS; end arch;8*8 LED显示正字 你根据这个来改成0-F显示啊,程序看懂就行。
再加个状态机,就可以顺序循环显示了。
6.基于51单片机的LED点阵显示屏系统的设计与实现的论文
LED显示器是用发光二极管构成的显示器。构成方式有两大类:一是笔段字符式,一般又有三种:7段(/8段)数码管、15段(/17段)数码管和6段符号显示器;二是点阵字符式,一般有5*7、5*8、8*8和16*16等若干种点阵结构。为了适应不同电路的需要,根据构成LED显示器的发光二极管公共极的极性,有共阴极和共阳极两种形式。对共阴极数码管,公共阴极接地,当各段阳极上的电平为高电平时,该段接通亮,电平为0时,该段关断不亮。对共阳极数码管则刚好相反,高电平时不亮,低电平时亮。这种器件根据显示数位分类,可以分为一位、双位和多位LED显示器,一位LED显示器就称作LED数码管,两位以上的一般就称作LED显示器。
要实现LED的汉字显示在进行、列的扫描的同时还要对其进行供电,因为每行16个二极管点亮电流很大,普通芯片的输出电流远不能满足。下面为你提供实例参考
以16*16显示器为例,你可以用并行扩展芯片8255实现点阵的行扫描,8255可以将单片机一个8位并行I/O口扩展成16位(8255的PA口、PB口同时使用);列扫描的16位可以用两个TTL门74LS164(8位移位寄存器),74LS164再接ULN2803以对电流放大后再接16*16点阵。74LS164的移位触发端A、B可以接上一片的相邻输出端,Q1或Q7这样实现能实现多个芯片连续移位,以实现显示屏汉字从右到左或从左到右的移动显示功能。
由于百度知道不能插入图片,所以不提供图片了,将具体引脚接法告诉你:8255的D0--D7数据输入端接单片机P2.0--P2.7(任一并行I/O口),A0接P2.0,A1接P2.1,/WR接单片机的/WR,/RD接高电平,如果单片机资源足够,则片选端/CS接低电平;74LS164芯片的触发端A、B接到一起,与CK脚、CLK脚、随意接到单片机的I/O上。