请教一下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点阵屏的程序问题 - 『 单片机论坛 』 - 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论坛|