| 
 
| 本帖最后由 libertyzx 于 2011-12-17 15:46 编辑 
 为什么显示的代码和原来的不一样了,怪···
 代码我传附件了
 就是字符串最后一个不显示,软件调试过似乎循环少了一次,
 怎么少的实在想不通了···
 
 
 /****************LCD12864-ST7920控制器-并口程序**********************************
 //--引脚====名称=============说明====================串口===========I/O===    |**
 //-- 01         -- GND      -- GND                       -- 。。        -- GND       |**
 //-- 02         -- Vcc      -- +5V                       -- 。。        -- Vcc       |**
 //-- 03         -- Vo       -- NC                        -- NC          -- NC        |**
 //-- 04         -- RS(CS)   -- 数据/命令(H/L)选择端      -- 片选,L有效 -- P2^0      |**
 //-- 05         -- R/W(SID) -- 读/写(H/L)选择端          -- 串数据线    -- P2^1      |**
 //-- 06         -- E(SCLK)  -- 使能信号                  -- 串时钟输入  -- P2^2      |**
 //--07-10 - DB0~3    -- 低四位数据口              -- NC          -- NC        |**
 //--11-14 - DB4~7    -- 高四位数据口(4并口则空接) -- NC          -- NC        |**
 //-- 15         -- PSB      -- 并/串(H/L)选择            -- L串口       -- GND       |**
 //-- 16         -- NC       -- NC                        -- NC          -- NC        |**
 //-- 17         -- /RST     -- 复位信号,L有效           -- 。。        -- Vcc       |**
 //-- 18         -- Vout     -- NC                        -- NC          -- NC        |**
 //-- 19         -- BLA      -- 背光正                    -- 。。        -- GND              |**
 //-- 20         -- BLK      -- 背光地                    -- 。。        -- Vcc       |**
 //===功能=====================================================================|**
 //-实现数据串行发送显示                                                       |**
 /*******************************************************************************/
 #include<reg52.h>
 
 //--宏定义-----------------------------------------------------
 #define uchar unsigned char
 #define uint unsigned int
 
 //--单片机I/0口声明--------------------------------------------
 sbit CS=P2^0;      //片选,每次数据操作时必须拉高
 sbit SID=P2^1;     //串数据线
 sbit SCLK=P2^2;     //串时钟输入
 
 //--函数声明---------------------------------------------------
 void LCD_init(void);    //LCD_初始化
 void T0_init(void);    //定时器_初始化
 void I_com(uchar com);    //写指令
 void I_data(uchar Data);    //写数据
 void O_bit_8(uchar Data);    //输出8bit
 void delay(uint i);    //延时
 
 //--全局变量---------------------------------------------------
 uchar x=1;      //时钟输出端 H/L 赋值选择
 
 
 /*--主函数-----------------------------------------------------
 **-函数名:
 **-功能:                                                   |**
 **-输入:无                                                 |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void main(void)
 {
 uchar code a[]="01234";    //输出数据   ---------------最后的4就是不输出·····
 uchar i=0;    //循环数据输出用
 
 CS=1;    //片选置1允许操作
 
 T0_init();    //定时器初始化
 LCD_init();    //LCD初始化
 
 I_com(0x80);    //定位x=1,y=1
 
 for(i=0;a!='\0';i++)
 {
 I_data(a);    //数据输出
 }
 
 while(1);
 }
 
 /*--LCD_初始化-------------------------------------------------ok
 **-函数名:LCD_init                                         |**
 **-功能:LCD12864初始化                                     |**
 **-输入:无                                                 |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void LCD_init(void)
 {
 delay(40);      //等待40ms
 I_com(0x30);    //8位数据传输
 delay(2);
 I_com(0x0F);    //显示开,游标开
 delay(2);
 I_com(0x01);    //清屏
 delay(2);
 I_com(0x02);    //地址归位
 delay(2);
 I_com(0x06);    //进入点设定 AC+1
 }
 
 /*--定时器_初始化----------------------------------------------ok
 **-函数名:T0_init                                          |**
 **-功能:初始化T0(一直打开)                                 |**
 **-输入:无                                                 |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void T0_init(void)
 {
 TMOD=0x02;  //-0000 0010-T0 方式2-8位初值自装
 TH0=0xA0;   //|-T0-初值244 即定时12us(12MHz)
 TL0=0xA0;   //|
 EA=1;       //开总中断
 ET0=1;      //允许打开T0中断
 TR0=1;       //启动T0
 }
 
 /*--写指令-----------------------------------------------------ok
 **-函数名:I_com                                            |**
 **-功能:主机向LCD12864写指令(com)                          |**
 **-输入:com                                                |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void I_com(uchar com)
 {
 uchar temp=0;    //暂时存放数据
 
 //CS=1;    //片选置1允许操作
 O_bit_8(0xF8);    //串行写指令 指令
 temp=com&0xF0;    //舍弃低4位
 O_bit_8(temp);    //指令高4位传输
 temp=com&0x0F;    //舍弃高4位
 temp<<=4;    //左移4位
 O_bit_8(temp);    //指令低4位传输
 //CS=0;    //片选置0禁止操作
 }
 
 /*--写数据-----------------------------------------------------ok
 **-函数名:I_data                                           |**
 **-功能:主机向LCD12864写数据(Data)                         |**
 **-输入:Data                                               |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void I_data(uchar Data)
 {
 uchar temp=0;    //暂时存放数据
 
 //CS=1;    //片选置1允许操作
 O_bit_8(0xFA);    //串行写数据 指令
 temp=Data&0xF0;    //舍弃低4位
 O_bit_8(temp);    //数据高4位传输
 temp=Data&0x0F;    //舍弃高4位
 temp<<=4;    //左移4位
 O_bit_8(temp);    //数据低4位传输
 //CS=0;    //片选置0禁止操作
 }
 
 /*--读忙-------------------------------------------------------
 **-函数名:bf                                               |**
 **-功能:判断LCD12864是否忙                                 |**
 **-输入:无                                                 |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------
 void bf(void)      //(D7=1)忙状态不能写
 {
 
 }     */
 
 
 /*--输出8bit---------------------------------------------------ok
 **-函数名:O_bit_8                                          |**
 **-功能:主机向LCD12864输入8位数据(Data)                    |**
 **-输入:Data                                               |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void O_bit_8(uchar Data)
 {
 uchar i=0;    //循环用
 
 while(i!=8)
 {
 if(TF0==1)    //T0溢出标志,溢出硬置1,需软置0
 {
 TF0=0;    //软置0
 if((SCLK=x=!x)==0)
 {
 SID=(bit)((((Data<<i)&0x80)==0)?0:1);
 i++;
 }
 }
 }
 }
 
 
 /*--读入8bit---------------------------------------------------
 **-函数名:I_bit_8                                          |**
 **-功能:从LCD12864读数据到主机                             |**
 **-输入:无                                                 |**
 **-返回值:读出的数据                                       |**
 **-----------------------------------------------------------
 uchar I_bit_8(void)
 {
 
 }  */
 
 
 /*--延时-------------------------------------------------------ok
 **-函数名:delay                                            |**
 **-功能:延时 i*1ms 时间                                    |**
 **-输入:i                                                  |**
 **-返回值:无                                               |**
 **-----------------------------------------------------------*/
 void delay(uint i)           //- 11.0592情况下 延时995.01us 约1ms
 {
 uint j=0;
 for(i;i>0;i--)
 for(j=113;j>0;j--);
 }
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |