请教一下16*64点阵屏的程序问题 - 『 单片机论坛 』 - Tony嵌入式论坛 Ton...
来源:百度文库 编辑:神马文学网 时间:2024/04/30 04:23:23
请教一下16*64点阵屏的程序问题
这个16*64的点阵屏程序怎么没有延时程序,怎么还能正常运行?
电路是16*64双色点阵屏行驱动138、列扫描595,08接口//--------------------------------
//名称:C语言实现汉字显示(12c4052)
//作者:wanchun311
//日期:2008年12月15日
//--------------------------------
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void Sendping(); //发送半屏子程序
sbit CP =P0^0 ; //74HC595移时钟
sbit SCK =P0^1 ; // 74HC595锁存信号
sbit Red=P0^2 ; //红色数据输出引脚低电平有效
sbit Greed=P0^3; // 绿色数据输出引脚低电平有效
sbit Gen1=P2^6 ; //全屏控制使能1,高电平有效
sbit D = P0^7 ; //行扫描地址D(地址第四引脚)
sbit colorkey = P2^0;//颜色修改按键
sbit changkey = P2^1; //显示内容修改按键
uchar SendData; //要发送的数据变量
uchar shuzu1; //数组一维变量
uchar shuzu2; //数组二维变量
uchar chang; //改变显示能容(0为欢迎光临;1为停止营业 )
uchar color; //外部参数改变颜色设置(0为红色;1为绿色,2为黄色)
uchar hang; //行扫描变量 (半屏只有16行,所以hang=0到15)
uchar code data1[8][32]=
{
{ 0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,
0x45,0x04,0x46,0x48,0x28,0x40,0x28,0x40,
0x10,0x40,0x28,0x40,0x24,0xA0,0x44,0xA0,
0x81,0x10,0x01,0x08,0x02,0x0E,0x0C,0x04 },//欢
{ 0x00,0x00,0x41,0x84,0x26,0x7E,0x14,0x44,
0x04,0x44,0x04,0x44,0xF4,0x44,0x14,0xC4,
0x15,0x44,0x16,0x54,0x14,0x48,0x10,0x40,
0x10,0x40,0x28,0x46,0x47,0xFC,0x00,0x00 },//迎
{ 0x01,0x00,0x21,0x08,0x11,0x0C,0x09,0x10,
0x09,0x20,0x01,0x04,0xFF,0xFE,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x40,
0x08,0x42,0x10,0x42,0x20,0x3E,0x40,0x00 },// 光
{ 0x10,0x80,0x10,0x80,0x51,0x04,0x51,0xFE,
0x52,0x00,0x54,0x80,0x58,0x60,0x50,0x24,
0x57,0xFE,0x54,0x44,0x54,0x44,0x54,0x44,
0x54,0x44,0x14,0x44,0x17,0xFC,0x14,0x04},// 临
{ 0x10,0x80,0x10,0x48,0x17,0xFC,0x20,0x00,
0x23,0xF8,0x62,0x08,0xA3,0xF8,0x20,0x00,
0x2F,0xFE,0x28,0x02,0x33,0xF4,0x20,0x40,
0x20,0x40,0x20,0x40,0x21,0x40,0x20,0x80},//停
{ 0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x00,
0x11,0x00,0x11,0x10,0x11,0xF8,0x11,0x00,
0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,
0x11,0x00,0x11,0x04,0xFF,0xFE,0x00,0x00},//止
{ 0x04,0x40,0x04,0x48,0x7F,0xFC,0x04,0x40,
0x7F,0xFE,0x40,0x02,0x8F,0xE4,0x08,0x20,
0x08,0x20,0x0F,0xE0,0x00,0x00,0x1F,0xF0,
0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10},// 营
{ 0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,
0x44,0x44,0x24,0x44,0x24,0x48,0x14,0x48,
0x14,0x50,0x14,0x50,0x14,0x60,0x04,0x40,
0x04,0x40,0x04,0x44,0xFF,0xFE,0x00,0x00},// 业
};
void Keyscan(void)
{
if(colorkey ==0) //判断修改颜色建是否被按下
{
Sendping();
if(colorkey ==0)
{
color++;
if(color>2) {color = 0;}
}
}
if(changkey ==0) //判断修改颜色建是否被按下
{
Sendping();
if(changkey ==0)
{
shuzu1++;
if(shuzu1>1) {shuzu1= 0;}
}
}
}
//------------------------------------
//----------字发送子程序-----------
void SendByte(void)
{
uchar m;
for(m=0;m<8;m++)
{
CP = 0;
if(color==0) {Red = !(SendData & 0x80);} //红屏显示
else if (color==1) {Greed = !(SendData & 0x80);} //绿屏显示
else if (color==2) {Red = !(SendData & 0x80);Greed= !(SendData & 0x80); } //黄屏显示
else;
SendData =SendData<<1;
CP = 1; //移位时钟上升沿
}
} //-----------------------------------
//----------行扫描子程序-------------
void RowsCan(void)
{ uchar scan1;
if (hang==0x08)
{
D = ! D;hang =0x00;
}
scan1 =hang;
scan1 =scan1<<5;
P0 = P0 & 0x1f;
P0 = P0 | scan1;
hang++;
}
void SendHang(void)
{
uchar m2,shuzu;
shuzu = shuzu1*4; //一维数组变量参数传给数组变量
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
SCK = 0;
SCK = 1; //上升沿数据锁存
RowsCan(); //行扫描
}
//---------------------------------------
//----------发送一屏数据-----------------
void Sendping(void)
{
SendHang();
shuzu2++ ;
shuzu2++ ;
if(shuzu2 ==32) { shuzu2 =0;}
}
void initial(void)
{
Gen1 = 1;
D = 0;
Red = 1;
Greed =1;
SendData = 0x00;
hang = 0x00;
shuzu1 = 0x00;
shuzu2 = 0x00;
color = 0;
chang = 0;
}
//;---------------------------------
//;---------主程序循环--------------
void main()
{
initial();
while(1)
{ Keyscan();
Sendping();
}
}
转自Tony嵌入式论坛,地址:http://www.cevx.com/bbs/thread-25444-1-1.html
这个16*64的点阵屏程序怎么没有延时程序,怎么还能正常运行?
电路是16*64双色点阵屏行驱动138、列扫描595,08接口//--------------------------------
//名称:C语言实现汉字显示(12c4052)
//作者:wanchun311
//日期:2008年12月15日
//--------------------------------
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
void Keyscan (void); //修改参数按键扫描子程序
void Sendping(); //发送半屏子程序
sbit CP =P0^0 ; //74HC595移时钟
sbit SCK =P0^1 ; // 74HC595锁存信号
sbit Red=P0^2 ; //红色数据输出引脚低电平有效
sbit Greed=P0^3; // 绿色数据输出引脚低电平有效
sbit Gen1=P2^6 ; //全屏控制使能1,高电平有效
sbit D = P0^7 ; //行扫描地址D(地址第四引脚)
sbit colorkey = P2^0;//颜色修改按键
sbit changkey = P2^1; //显示内容修改按键
uchar SendData; //要发送的数据变量
uchar shuzu1; //数组一维变量
uchar shuzu2; //数组二维变量
uchar chang; //改变显示能容(0为欢迎光临;1为停止营业 )
uchar color; //外部参数改变颜色设置(0为红色;1为绿色,2为黄色)
uchar hang; //行扫描变量 (半屏只有16行,所以hang=0到15)
uchar code data1[8][32]=
{
{ 0x00,0x80,0x00,0x80,0xFC,0x80,0x04,0xFC,
0x45,0x04,0x46,0x48,0x28,0x40,0x28,0x40,
0x10,0x40,0x28,0x40,0x24,0xA0,0x44,0xA0,
0x81,0x10,0x01,0x08,0x02,0x0E,0x0C,0x04 },//欢
{ 0x00,0x00,0x41,0x84,0x26,0x7E,0x14,0x44,
0x04,0x44,0x04,0x44,0xF4,0x44,0x14,0xC4,
0x15,0x44,0x16,0x54,0x14,0x48,0x10,0x40,
0x10,0x40,0x28,0x46,0x47,0xFC,0x00,0x00 },//迎
{ 0x01,0x00,0x21,0x08,0x11,0x0C,0x09,0x10,
0x09,0x20,0x01,0x04,0xFF,0xFE,0x04,0x40,
0x04,0x40,0x04,0x40,0x04,0x40,0x08,0x40,
0x08,0x42,0x10,0x42,0x20,0x3E,0x40,0x00 },// 光
{ 0x10,0x80,0x10,0x80,0x51,0x04,0x51,0xFE,
0x52,0x00,0x54,0x80,0x58,0x60,0x50,0x24,
0x57,0xFE,0x54,0x44,0x54,0x44,0x54,0x44,
0x54,0x44,0x14,0x44,0x17,0xFC,0x14,0x04},// 临
{ 0x10,0x80,0x10,0x48,0x17,0xFC,0x20,0x00,
0x23,0xF8,0x62,0x08,0xA3,0xF8,0x20,0x00,
0x2F,0xFE,0x28,0x02,0x33,0xF4,0x20,0x40,
0x20,0x40,0x20,0x40,0x21,0x40,0x20,0x80},//停
{ 0x01,0x00,0x01,0x00,0x01,0x00,0x11,0x00,
0x11,0x00,0x11,0x10,0x11,0xF8,0x11,0x00,
0x11,0x00,0x11,0x00,0x11,0x00,0x11,0x00,
0x11,0x00,0x11,0x04,0xFF,0xFE,0x00,0x00},//止
{ 0x04,0x40,0x04,0x48,0x7F,0xFC,0x04,0x40,
0x7F,0xFE,0x40,0x02,0x8F,0xE4,0x08,0x20,
0x08,0x20,0x0F,0xE0,0x00,0x00,0x1F,0xF0,
0x10,0x10,0x10,0x10,0x1F,0xF0,0x10,0x10},// 营
{ 0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,
0x44,0x44,0x24,0x44,0x24,0x48,0x14,0x48,
0x14,0x50,0x14,0x50,0x14,0x60,0x04,0x40,
0x04,0x40,0x04,0x44,0xFF,0xFE,0x00,0x00},// 业
};
void Keyscan(void)
{
if(colorkey ==0) //判断修改颜色建是否被按下
{
Sendping();
if(colorkey ==0)
{
color++;
if(color>2) {color = 0;}
}
}
if(changkey ==0) //判断修改颜色建是否被按下
{
Sendping();
if(changkey ==0)
{
shuzu1++;
if(shuzu1>1) {shuzu1= 0;}
}
}
}
//------------------------------------
//----------字发送子程序-----------
void SendByte(void)
{
uchar m;
for(m=0;m<8;m++)
{
CP = 0;
if(color==0) {Red = !(SendData & 0x80);} //红屏显示
else if (color==1) {Greed = !(SendData & 0x80);} //绿屏显示
else if (color==2) {Red = !(SendData & 0x80);Greed= !(SendData & 0x80); } //黄屏显示
else;
SendData =SendData<<1;
CP = 1; //移位时钟上升沿
}
} //-----------------------------------
//----------行扫描子程序-------------
void RowsCan(void)
{ uchar scan1;
if (hang==0x08)
{
D = ! D;hang =0x00;
}
scan1 =hang;
scan1 =scan1<<5;
P0 = P0 & 0x1f;
P0 = P0 | scan1;
hang++;
}
void SendHang(void)
{
uchar m2,shuzu;
shuzu = shuzu1*4; //一维数组变量参数传给数组变量
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
shuzu++;
for(m2 =0;m2<2;m2++)
{
SendData = data1[shuzu][shuzu2+m2];
SendByte();
}
SCK = 0;
SCK = 1; //上升沿数据锁存
RowsCan(); //行扫描
}
//---------------------------------------
//----------发送一屏数据-----------------
void Sendping(void)
{
SendHang();
shuzu2++ ;
shuzu2++ ;
if(shuzu2 ==32) { shuzu2 =0;}
}
void initial(void)
{
Gen1 = 1;
D = 0;
Red = 1;
Greed =1;
SendData = 0x00;
hang = 0x00;
shuzu1 = 0x00;
shuzu2 = 0x00;
color = 0;
chang = 0;
}
//;---------------------------------
//;---------主程序循环--------------
void main()
{
initial();
while(1)
{ Keyscan();
Sendping();
}
}
转自Tony嵌入式论坛,地址:http://www.cevx.com/bbs/thread-25444-1-1.html
请教一下16*64点阵屏的程序问题 - 『 单片机论坛 』 - Tony嵌入式论坛 Ton...
使用windml重新实现游戏的活动! - 『 vxworks论坛 』 - Tony嵌入式论...
请教各位达人..16*64点阵滚屏程序怎样写? - 新手园地 - 21IC电子工程师社区
基于单片机的16×64 LED 点阵显示屏的设计_单片机人生-专业的单片机资源站1
请教一下关于中医方面的问题
51单片机串口通信软件程序 - 中国电子前沿-->领先的嵌入式技术网站平台,单片机,DS...
请教直升机斜盘控制的一个问题 | 直升机 - 中国国防科技论坛 - Powered by ...
请教个关于吊销公司处罚的问题 - 〖 登记注册 〗 - 中国红盾论坛 - |工商论坛|红盾...
3年以上工作经验的工程师的中长期规划 - 单位招聘 - 中国电子顶级开发网 国内最顶级的开发者论坛---FPGA论坛|ASIC论坛|DSP论坛|ARM论坛|单片机论坛|MCU论坛|电子电路|嵌入式论坛|开发设计论坛 - Powered by Discuz!
关于嵌入式程序开发的一些基本问题_whyspai.浪钦馨云
单片机和嵌入式系统linux的区别
十说电容-单片机论坛
请教一下,如何让WORD文档自动朗读文本.| 菜鸟学院 - 电脑爱好者俱乐部论坛
16*64点阵程序及滚动效果视频 - 硬件/嵌入开发
大富翁论坛-富翁笔记-请教MemoryStream的使用方法 (DEMO)
【请教关于烟花拍摄的技巧】- 论坛-ZOL中关村在线
单片机与嵌入式系统
今天收到了期待已久的测风仪 - 单片机 - 电子工程世界-论坛 电子工程|单片机|电子电路...
合格的电子工程师需要掌握的知识和技能-单片机论坛 电子技术论坛 元件论坛-bbs.gkon...
51单片机论坛-分享-RS232,RS422,RS485
嵌入式开发精英的必备素质 - 嵌入式综合交流区 - 电子设计应用论坛 - Powered ...
TonyJaa公开澄清传言:没有与拳霸导演决裂,没有放弃《剑》的拍摄计划! - 『Tony新闻』 - TonyJaa中文影迷论坛 tonyjaa|东尼嘉|托尼贾|拳霸|泰拳|功夫|盗佛线|东荫功 -
【请教】乳癌手术的皮瓣剥离技巧 - 丁香园论坛-医学/药学/生命科学论坛
linux批量查找文件内容 - 『程序开发』 - 台州站长论坛 |台州论坛|站长论坛|TVB电视剧|PHP论坛|MYSQL论坛|Ajax论坛|DIV CSS论坛|JS论坛|ASP/ASP.NET论坛|