谁可以发个用HT66F50控制16x16LED点阵的C语言程序,扩展芯片是4块74HC595芯片。

谁可以发个用HT66F50控制16x16LED点阵的C语言程序,扩展芯片是4块74HC595芯片。,第1张

#define RS _23_3//_pd3

#define RW _23_2//_pd2 #define RW _23_2//_pd2

#define E _23_1//_pd1

#define pb1 _1d_1//_pb1

#define pb3 _1d_3//_pb3

#define pd0 _23_0

#define LCD _pc

/

延时n毫秒程序

/

void mydelay(ulong n)

{

uchar x;

while(n--)

{

x=15;

while(x--);

}

}

/

Function name: write_cmd

Descriptions: 向lcd输入指令

/

void write_cmd(unsigned char cmd)

{

RS=0; //写指令模式

RW=0;

E=1;

_pc = cmd;

mydelay(2);

E=0;

mydelay(2);

}

/

Function name: write_data

Descriptions: 写入数据

/

void write_data(unsigned char data)

{

RS = 1;

RW = 0;

E = 1;

_pc = data;

mydelay(2);

E = 0;

mydelay(2);

}

/

Function name: write_string

Descriptions: 写入字符串

/

void write_string(unsigned char s)

{

while(s != '\0') //'\0'为字符串结束标志

{

write_data(s);

s++;

}

}

/

Function name: set_display_place

Descriptions: 设置字符的显示位置

/

void set_display_place(unsigned char line,unsigned char column)

{

unsigned char address;

if(line == 1)

{

address = 0x80 + column;

}

else if(line == 2)

{

address = 0x90 + column;

}

else if(line == 3)

{

address = 0x88 + column;

}

else if(line == 4)

{

address = 0x98 + column;

}

write_cmd(address);

}

/

液晶模块初始化

/

void lcd_init(void)

{

mydelay(15);

write_cmd(0x38);//功能设置,一次送8位数据,基本指令集

mydelay(5);

write_cmd(0x38);//功能设置,一次送8位数据,基本指令集

mydelay(5);

write_cmd(0x38);//功能设置,一次送8位数据,基本指令集

write_cmd(0x38);//功能设置,一次送8位数据,基本指令集

write_cmd(0x01);//0000,0001 清DDRAM

write_cmd(0x06);//02

write_cmd(0x0C);//0000,1100 整体显示,游标off,游标位置off

}

/

Function name: 将字符写到指定的位置

Descriptions: 将字符显示在lcd的特定位置

/

void write_data_lcd(uchar line,uchar column,uchar data)

{

set_display_place(line,column);

write_data(data);

mydelay(10);

}

/

Function name: 将字符串写到指定的位置

Descriptions: 将字符串显示在lcd的特定位置

/

void write_string_lcd(unsigned char line,unsigned char column,unsigned char string)

{

set_display_place(line,column);

write_string(string);

mydelay(10);

}

/

显示长整型数据

/

void crti(uchar line,uchar column,ulong data)

{

uchar dhi;

uchar dli;

uchar ddi;

uchar dei;

ulong datah;

ulong datal;

dli=column%2;

column/=2;

set_display_place(line,column);

if (dli==1)

{

datal=0x20;

write_data(datal);

}

datah=data;

dhi=0;

if (datah>=10)

{

do

{

datah/=10;

dhi++;

}while(datah>=10);

datah=data;

ddi=dhi;

for (dli=0;dli<dhi;dli++)

{

datal=1;

for (dei=0;dei<ddi;dei++)

{

datal=10;

}

datah=data/datal;

data=data%datal;

datah+=0x30;

write_data(datah);

ddi--;

}

data+=0x30;

write_data(data);

}

else

{

data=data+0x30;

write_data(data);

}

}

/

显示浮点数

/

void crt_float(uchar line,uchar column,ulong data)

{

uchar line1;

uchar column1;

uchar dhi;

ulong data1;

dhi=0;

data1=data;

if (data1>=10)

{

do

{

data1/=10;

dhi++;

}while(data1>=10);

column1=column-dhi;

line1=line;

data1=data;

crti(line1,column1,data1);

}

else

{

line1=line;

column1=column;

data1=data;

crti(line1,column1,data1);

}

}

这是12864的,看看有没有参考价值,其实只需改

void set_display_place(unsigned char line,unsigned char column)即可

#include <reg51h>

#define uint unsigned int

#define uchar unsigned char

#define BLKN 2 //列锁存器数

sbit G = P1^7; //P17为显示允许控制信号端口

sbit RCLK = P2^0; //P20为输出锁存器时钟信号端

sbit SCLR = P2^1; //P21为移位寄存器清○端

void delay(uint); //延时函数

uchar data display[32]; //显示缓存

uchar code BMP[][32]={{16,0,16,0,37,248,36,64,120,64,8,64,16,64,32,64,124,64,0,64,0,64,12,64,112,64,3,252,0,0,0,0},

{16,0,19,240,32,16,41,240,120,16,19,252,32,64,122,72,1,80,0,224,25,80,102,76,0,64,1,192,0,0,0,0},

{4,64,4,64,63,248,4,64,127,252,1,0,31,240,17,16,31,240,17,16,31,240,8,32,16,16,32,8,0,0,0,0}}; //字模表'红‘’绿‘‘黄’

void main()

{

register uchar i,j;

SCON=0x00; //串口工作模式0:移位寄存器方式

TMOD=0x01; //定时器T0工作方式1:16位方式

P1=0x3f; //P1端口初值:允许接收、锁存、显示

TR0=1; //启动定时器T0

ET0=1; //允许定时器T0中断

EA=1; //开启总中断;

while(1)

{

delay(2000);

for(j=0;j<3;j++)

{

for(i=0;i<32;i++)

{

display[i]=~BMP[j][i];

if (i%2) delay(100);

}

delay(10000);

}

}

}

void delay(uint x)

{

register uchar i,j;

for (i=x;i>0;i--)

for (j=120;j>0;j--);

}

void leddisplay(void) interrupt 1 using 1

{

register uchar i, j=BLKN;

TH0 =(65536-100)/256; //设定显示屏刷新率每秒60帧

TL0 =(65536-100)%256;

i = P1; //读取当前显示的行号

i = ++i & 0x0f; //行号加1,屏蔽高4位

while(j)

{

j--;

SBUF = display[iBLKN + j]; //送显示数据

while (!TI);

TI = 0;

} //完成一行数据的发送

G = 1; //消隐(关闭显示)

P1 &= 0xf0; //行号端口清○

RCLK = 1; //显示数据打入输出锁存器

P1 |= i; //写入行号

RCLK = 0; //锁存显示数据

G = 0; //打开显示

}

xx equ 30h

YY EQU 40H

org 0000h

start:MOV YY,#00

mov a,#00h

mov xx,#128

mov p0,a

anl p2,#00h

mov dptr,#0100h

mov 20h,#00h

l1:mov r1,#3h

l2:mov r6,#16

mov r4,#00h

mov r0,20h

l3:mov a,r4

mov p1,a

inc r4

mov a,r0

movc a,@a+dptr

mov r7,a

mov p0,a

inc r0

mov a,r0

movc a,@a+dptr

mov r7,a

mov p2,a

inc r0

mov r3,#02

d2:mov r5,#0f8h

djnz r5,$

djnz r3,d2

mov a,#00h

mov p0,a

anl p2,#00h

djnz r6,l3

djnz r1,l2

inc dpl

INC DPL

mov a,r7

cjne a,#1bh,bb

jmp start

bb:djnz xx,l1

INC YY

MOV A,YY

N1:CJNE A,#1,N2

LJMP DD

N2:cjne a,#2,N3

LJMP EE

N3:CJNE A,#3,START

LJMP FF

DD:

mov dpl,#0

mov dptr,#0F00H

mov xx,#128

mov a,r7

mov 20h,#00h

cjne a,#1bh,l1

EE:

MOV DPL,#0

MOV DPTR,#1D00H

MOV XX,#128

MOV A,R7

MOV 20H,#00H

CJNE A,#1BH,L1

ff:MOV DPL,#0

MOV DPTR,#2B00H

MOV XX,#128

MOV A,R7

MOV 20H,#00H

CJNE A,#1BH,L1

jmp start

org 0100h

DB 000H,001H,01fH,010H,010H,010H,03fH,010H,008H,002H,018H,030H,024H,042H,001H,000H;

DB 030H,0f8H,000H,080H,080H,080H,0fcH,080H,080H,090H,088H,08cH,086H,084H,000H,000H;;江",0

DB 040H,000H,04FH,0FEH,048H,014H,048H,024H,048H,044H,07FH,084H,048H,004H,048H,004H;

DB 048H,004H,07FH,084H,048H,044H,048H,044H,048H,044H,04FH,0FEH,040H,000H,000H,000H;;西",1

DB 000H,080H,008H,080H,009H,000H,011H,000H,061H,0FFH,003H,052H,003H,052H,0FDH,052H;

DB 005H,052H,009H,052H,009H,052H,051H,052H,021H,0FFH,018H,000H,000H,000H,000H,000H;;省",2

DB 000H,000H,000H,000H,07FH,0FFH,049H,002H,049H,004H,049H,008H,049H,000H,04FH,000H;

DB 049H,0C0H,049H,030H,049H,008H,079H,004H,001H,002H,001H,00FH,000H,000H,000H,000H;;民",3

DB 020H,004H,027H,0FCH,020H,008H,020H,008H,03FH,0F2H,022H,012H,022H,0A2H,023H,004H;

DB 00DH,004H,0F8H,0C8H,048H,030H,008H,0C8H,00FH,004H,008H,006H,008H,004H,000H,000H;;政",4

DB 002H,000H,00CH,040H,008H,040H,048H,040H,03AH,040H,02AH,040H,00AH,042H,08AH,041H;

DB 07AH,0FEH,02BH,040H,00AH,040H,018H,040H,0EAH,040H,04CH,040H,008H,040H,000H,000H;;学",5

DB 010H,040H,011H,080H,016H,000H,0FFH,0FFH,014H,000H,012H,002H,000H,042H,011H,084H;

DB 016H,064H,090H,018H,070H,018H,010H,064H,015H,086H,012H,003H,011H,002H,000H,000H;;校",6

DB 000H,000H,000H,000H,01FH,0F0H,012H,020H,012H,020H,012H,020H,012H,020H,0FFH,0FCH;

DB 012H,022H,012H,022H,012H,022H,012H,022H,01FH,0F2H,000H,002H,000H,00EH,000H,000H;;电",7

DB 000H,080H,000H,080H,040H,080H,040H,080H,040H,080H,040H,082H,040H,081H,047H,0FEH;

DB 048H,080H,050H,080H,060H,080H,040H,080H,000H,080H,001H,080H,000H,080H,000H,000H;;子",8

ORG 0F00H

DB 000H,080H,000H,080H,040H,080H,040H,080H,040H,080H,040H,082H,040H,081H,047H,0FEH;

DB 048H,080H,050H,080H,060H,080H,040H,080H,000H,080H,001H,080H,000H,080H,000H,000H;;子",8

DB 001H,000H,002H,000H,00CH,000H,03FH,0FEH,0E0H,000H,050H,000H,015H,07EH,015H,044H;

DB 095H,044H,075H,044H,055H,044H,015H,044H,015H,07EH,010H,000H,010H,000H,000H,000H;;信",9

DB 000H,000H,000H,004H,000H,01CH,03FH,080H,02AH,0BCH,02AH,082H,06AH,082H,0AAH,0A2H;

DB 02AH,09AH,02AH,082H,02AH,082H,03FH,08EH,000H,000H,000H,010H,000H,00CH,000H,000H;;息",10

DB 010H,080H,010H,082H,011H,001H,0FFH,0FEH,012H,000H,014H,002H,000H,002H,013H,004H;

DB 012H,0C8H,012H,030H,0FEH,030H,012H,048H,013H,084H,012H,006H,010H,004H,000H,000H;;技",11

DB 008H,008H,008H,008H,008H,010H,008H,020H,008H,040H,009H,080H,00AH,000H,0FFH,0FEH;

DB 00AH,000H,009H,000H,048H,080H,028H,060H,008H,030H,008H,018H,008H,010H,000H,000H;;术",12

DB 004H,000H,004H,000H,024H,000H,024H,000H,025H,080H,026H,080H,03CH,090H,0E4H,088H;

DB 024H,094H,024H,0A2H,025H,0C0H,024H,080H,024H,000H,004H,000H,004H,000H,000H,000H;;专",13

DB 000H,004H,008H,004H,006H,004H,001H,0C4H,000H,084H,0FFH,0FCH,000H,004H,000H,004H;

DB 000H,004H,0FFH,0FCH,000H,044H,001H,084H,006H,004H,01CH,00CH,008H,004H,000H,000H;;业",14

DB 000H,010H,000H,010H,01FH,0D0H,014H,090H,094H,090H,074H,090H,054H,090H,01FH,0FFH

DB 014H,090H,034H,090H,0D4H,090H,054H,090H,01FH,0D0H,000H,010H,000H,010H,000H,000H;单",0

DB 000H,001H,000H,002H,000H,00CH,07FH,0F0H,008H,080H,008H,080H,008H,080H,008H,080H

DB 008H,080H,0F8H,080H,008H,080H,008H,0FFH,008H,000H,018H,000H,008H,000H,000H,000H;片",1

ORG 1D00H

DB 000H,001H,000H,002H,000H,00CH,07FH,0F0H,008H,080H,008H,080H,008H,080H,008H,080H

DB 008H,080H,0F8H,080H,008H,080H,008H,0FFH,008H,000H,018H,000H,008H,000H,000H,000H;片",1

DB 010H,020H,010H,0C0H,013H,000H,0FFH,0FFH,012H,000H,011H,082H,010H,00CH,000H,030H

DB 07FH,0C0H,040H,000H,040H,000H,040H,000H,07FH,0FCH,000H,002H,000H,01EH,000H,000H;机",2

DB 000H,004H,040H,004H,041H,004H,041H,004H,041H,004H,041H,004H,041H,004H,07FH,0FCH

DB 041H,004H,041H,004H,041H,004H,041H,004H,0C3H,004H,041H,00CH,000H,004H,000H,000H;王",0

DB 008H,080H,011H,000H,023H,0FEH,0E6H,000H,05CH,004H,008H,004H,043H,0FCH,040H,004H

DB 040H,004H,040H,004H,07FH,0FCH,041H,004H,041H,004H,041H,004H,041H,004H,000H,000H;征",1

DB 002H,010H,022H,010H,022H,020H,022H,020H,022H,040H,022H,07CH,0FEH,092H,023H,012H

DB 023H,022H,022H,022H,026H,042H,02AH,042H,072H,002H,022H,00EH,002H,000H,000H,000H;老",2

DB 000H,002H,03FH,0E4H,000H,008H,000H,070H,0FFH,080H,000H,000H,04FH,0F0H,048H,000H

DB 048H,000H,048H,000H,07FH,0FFH,048H,000H,048H,020H,048H,010H,04FH,0E0H,000H,00H;师",3

DB 001H,000H,002H,000H,00CH,000H,03FH,0FEH,0E1H,000H,041H,004H,021H,004H,021H,004H

DB 021H,004H,03FH,0FCH,041H,004H,041H,004H,041H,004H,041H,004H,001H,004H,000H,000H;任",0

DB 008H,090H,028H,090H,029H,012H,02BH,011H,0FDH,07EH,029H,0A0H,039H,022H,028H,022H

DB 00AH,004H,01FH,004H,0F0H,0C8H,010H,030H,011H,0CCH,01EH,003H,010H,002H,000H,000H;教",1

DB 008H,000H,008H,002H,008H,004H,008H,008H,008H,030H,089H,0C0H,048H,080H,078H,000H

DB 029H,000H,008H,080H,008H,040H,008H,030H,008H,01EH,008H,00CH,008H,000H,000H,000H;六",

ORG 2B00H

DB 008H,000H,008H,002H,008H,004H,008H,008H,008H,030H,089H,0C0H,048H,080H,078H,000H

DB 029H,000H,008H,080H,008H,040H,008H,030H,008H,01EH,008H,00CH,008H,000H,000H,000H;六",2

DB 002H,020H,004H,020H,008H,020H,030H,020H,0C7H,0E0H,044H,020H,044H,020H,044H,020H

DB 07FH,0FFH,044H,020H,044H,020H,044H,020H,044H,020H,040H,020H,000H,020H,000H,01BH;年",3

end

 在许多c程序设计中,要用到汉字进行提示或人机交互,而现行的turbo c集成开发环境不是汉化的,如何编制能显示汉字的c程序呢?

下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。

由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。

内码转换成区位码方法如下:

qh=c1-0xa0 wh=c2-0xa0

其区位码就是:

qw=qh*0xff+wh

该汉字在字库中离起点的位置是:

offset=(94*(qh-1)+(wh-1))*32l

程序例:

#include 〈graphicsh〉

#include 〈stdioh〉

#include 〈fcntlh〉

#include 〈ioh〉

#include 〈stdlibh〉

#include 〈conioh〉

#define row 1 //纵坐标放大倍数

#define col 2 //横坐标放大倍数

void main()

{

int x,y;

char *s=″汉字显示程序″;

file *fp;

char buffer[32]; //buffer用来存储一个汉字

register m,n,i,j,k;

unsigned char qh,wh;

unsigned long offset;

int gd=detect,gm; //图形屏幕初始化

initgraph(&gd,&gm,″ ″);

if ((fp=fopen(″hzk16″,″rb″))==null)

//打开汉字库,该字库可以在ucdos中找到

{ printf(″can't open haz16,please add it″);

getch(); closegraph(); exit(0);

}

x=20; y=100; //显示位置设置

while(*s)

{ qh=*(s)-0xa0; //汉字区位码

wh=*(s+1)-0xa0;

offset=(94*(qh-1)+(wh-1))*32l; //计算该汉字在字库中偏移量

fseek(fp,offset,seek_set);

fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)

for (i=0;i〈16;i++) //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字

for(n=0;n〈row;n++)

for(j=0;j〈2;j++)

for(k=0;k〈8;k++)

for(m=0;m〈col;m++)

if (((buffer[i*2+j]〉〉(7-k))&0x1)!=null)

putpixel(x+8*j*col+k*col+m,y+i*row+n,green);

s+=2; //因为一个汉字内码占用两个字节,所以s必须加2

x+=30;

}

getch();

closegraph();

}

上述程序在turbo c 20编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。

参考gugu99的博客

给你个方向

先搞清楚数码管是如何显示指定数据的,再看看矩阵键盘的电路和处理方式,结合两者的理解就可以处理你的LED矩阵显示啦。至于程序怎么写,如果搞清楚我说的数码管和矩阵键盘的知识和范例都不会,那给你程序也没什么意义啦。

这个就看你怎么应用了。假设你想用它来显示一个汉字。你想一下,88的点阵只可以显示简单的汉字,复杂的汉字就只能用更大的点阵了。更大的点阵表现力就更加丰富了。功能不多加叙述。

至于程序,其实还要结合电路。即点阵中有许多发光二极管,行列谁对应高,低电平,要清楚。单片机肯定带不动这个电路,故还有驱动电路。结合以上信息才能定义管脚。

以上就是关于谁可以发个用HT66F50控制16x16LED点阵的C语言程序,扩展芯片是4块74HC595芯片。全部的内容,包括:谁可以发个用HT66F50控制16x16LED点阵的C语言程序,扩展芯片是4块74HC595芯片。、单片机C语言红绿灯程序,要求:数码管显示时间倒计时、16*16LED点阵显示模块显示红绿黄灯、、如何设计16X16点阵汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9324311.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存