[Atmel] 用SAM-BA或JLINK跑ATSAM4E16的程序(8)显示字符串

[复制链接]
 楼主| ddllxxrr 发表于 2015-11-5 20:50 | 显示全部楼层 |阅读模式
其实,显示字符串例程都有,我只不过多看了一下这个屏的函数。

其中定义了如下函数:


uint32_t ili93xx_init(struct ili93xx_opt_t *p_opt);
void ili93xx_display_on(void);
void ili93xx_display_off(void);
void ili93xx_set_foreground_color(ili93xx_color_t ul_color);
void ili93xx_fill(ili93xx_color_t ul_color);
void ili93xx_set_window(uint32_t ul_x, uint32_t ul_y,
        uint32_t ul_width, uint32_t ul_height);
void ili93xx_set_cursor_position(uint16_t us_x, uint16_t us_y);
void ili93xx_scroll(int32_t ul_lines);
void ili93xx_enable_scroll(void);
void ili93xx_disable_scroll(void);
void ili93xx_set_display_direction(enum ili93xx_display_direction e_dd,
        enum ili93xx_shift_direction e_shd,
        enum ili93xx_scan_direction e_scd);
uint32_t ili93xx_draw_pixel(uint32_t ul_x, uint32_t ul_y);
ili93xx_color_t ili93xx_get_pixel(uint32_t ul_x, uint32_t ul_y);
void ili93xx_draw_line(uint32_t ul_x1, uint32_t ul_y1,
        uint32_t ul_x2, uint32_t ul_y2);
void ili93xx_draw_rectangle(uint32_t ul_x1, uint32_t ul_y1,
        uint32_t ul_x2, uint32_t ul_y2);
void ili93xx_draw_filled_rectangle(uint32_t ul_x1, uint32_t ul_y1,
        uint32_t ul_x2, uint32_t ul_y2);
uint32_t ili93xx_draw_circle(uint32_t ul_x, uint32_t ul_y, uint32_t ul_r);
uint32_t ili93xx_draw_filled_circle(uint32_t ul_x, uint32_t ul_y,
        uint32_t ul_r);
void ili93xx_draw_string(uint32_t ul_x, uint32_t ul_y, const uint8_t *p_str);
void ili93xx_draw_pixmap(uint32_t ul_x, uint32_t ul_y, uint32_t ul_width,
        uint32_t ul_height, const ili93xx_color_t *p_ul_pixmap);
void ili93xx_set_top_left_limit(ili93xx_coord_t x, ili93xx_coord_t y);
void ili93xx_set_bottom_right_limit(ili93xx_coord_t x, ili93xx_coord_t y);
void ili93xx_set_limits(ili93xx_coord_t start_x, ili93xx_coord_t start_y,
        ili93xx_coord_t end_x, ili93xx_coord_t end_y);
ili93xx_color_t ili93xx_read_gram(void);
void ili93xx_write_gram(ili93xx_color_t color);
void ili93xx_copy_pixels_to_screen(const ili93xx_color_t *pixels,
        uint32_t count);
void ili93xx_copy_raw_pixel_24bits_to_screen(const uint8_t *raw_pixels,
        uint32_t count);
void ili93xx_duplicate_pixel(const ili93xx_color_t color, uint32_t count);
void ili93xx_copy_pixels_from_screen(ili93xx_color_t *pixels, uint32_t count);
uint8_t ili93xx_device_type(void);
void ili93xx_vscroll_area_define(uint16_t us_tfa, uint16_t us_vsa,
        uint16_t us_bfa);
uint8_t ili93xx_device_type_identify(void);


我试了下画图填充的画圆函数。需要注意的是每次画圆,都要选确定一下前台的着色:

以下是程序:


  1. #include "asf.h"
  2. #include "stdio_serial.h"
  3. #include "conf_board.h"
  4. #include "conf_clock.h"
  5. #include "smc.h"
  6. #include "ili93xx.h"

  7. /** Chip select number to be set */
  8. #define ILI93XX_LCD_CS      1

  9. struct ili93xx_opt_t g_ili93xx_display_opt;

  10. /**
  11. *  Configure UART console.
  12. */
  13. static void configure_console(void)
  14. {
  15.         const usart_serial_options_t uart_serial_options = {
  16.                 .baudrate = CONF_UART_BAUDRATE,
  17.                 .paritytype = CONF_UART_PARITY
  18.         };

  19.         /** Configure console UART. */
  20.         sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
  21.         stdio_serial_init(CONF_UART, &uart_serial_options);
  22. }

  23. /**
  24. * \brief Application entry point for smc_lcd example.
  25. *
  26. * \return Unused (ANSI-C compatibility).
  27. */
  28. int main(void)
  29. {
  30.         sysclk_init();
  31.         board_init();

  32.         /** Initialize debug console */
  33.         configure_console();

  34.         /** Enable peripheral clock */
  35.         pmc_enable_periph_clk(ID_SMC);

  36.         /** Configure SMC interface for Lcd */
  37.         smc_set_setup_timing(SMC, ILI93XX_LCD_CS, SMC_SETUP_NWE_SETUP(2)
  38.                         | SMC_SETUP_NCS_WR_SETUP(2)
  39.                         | SMC_SETUP_NRD_SETUP(2)
  40.                         | SMC_SETUP_NCS_RD_SETUP(2));
  41.         smc_set_pulse_timing(SMC, ILI93XX_LCD_CS, SMC_PULSE_NWE_PULSE(4)
  42.                         | SMC_PULSE_NCS_WR_PULSE(4)
  43.                         | SMC_PULSE_NRD_PULSE(10)
  44.                         | SMC_PULSE_NCS_RD_PULSE(10));
  45.         smc_set_cycle_timing(SMC, ILI93XX_LCD_CS, SMC_CYCLE_NWE_CYCLE(10)
  46.                         | SMC_CYCLE_NRD_CYCLE(22));
  47. #if ((!defined(SAM4S)) && (!defined(SAM4E)))
  48.         smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE
  49.                         | SMC_MODE_WRITE_MODE
  50.                         | SMC_MODE_DBW_8_BIT);
  51. #else
  52.         smc_set_mode(SMC, ILI93XX_LCD_CS, SMC_MODE_READ_MODE
  53.                         | SMC_MODE_WRITE_MODE);
  54. #endif
  55.         /** Initialize display parameter */
  56.         g_ili93xx_display_opt.ul_width = ILI93XX_LCD_WIDTH;
  57.         g_ili93xx_display_opt.ul_height = ILI93XX_LCD_HEIGHT;
  58.         g_ili93xx_display_opt.foreground_color = COLOR_BLACK;
  59.         g_ili93xx_display_opt.background_color = COLOR_WHITE;

  60.         /** Switch off backlight */
  61.         aat31xx_disable_backlight();

  62.         /** Initialize LCD */
  63.         ili93xx_init(&g_ili93xx_display_opt);

  64.         /** Set backlight level */
  65.         aat31xx_set_backlight(AAT31XX_AVG_BACKLIGHT_LEVEL);

  66.         ili93xx_set_foreground_color(COLOR_DARKBLUE);
  67.         ili93xx_draw_filled_rectangle(0, 0, ILI93XX_LCD_WIDTH,
  68.                         ILI93XX_LCD_HEIGHT);
  69.         /** Turn on LCD */
  70.         ili93xx_display_on();
  71.         ili93xx_set_cursor_position(0, 0);

  72.         /** Draw text, image and basic shapes on the LCD */
  73.         ili93xx_set_foreground_color(COLOR_WHITE);
  74.         ili93xx_draw_string(10, 20, (uint8_t *)"ili93xx_lcd example");
  75.        
  76.         ili93xx_draw_string(10, 40, (uint8_t *)"This's 21ic's Atmel");

  77.         ili93xx_set_foreground_color(COLOR_RED);
  78.         ili93xx_draw_filled_circle(60, 160, 40);
  79.         ili93xx_set_foreground_color(COLOR_GREEN);
  80.         ili93xx_draw_filled_circle(120, 160, 40);
  81.         ili93xx_set_foreground_color(COLOR_BLUE);
  82.         ili93xx_draw_filled_circle(180, 160, 40);

  83.         //ili93xx_set_foreground_color(COLOR_VIOLET);
  84.         //ili93xx_draw_line(0, 0, 240, 320);
  85.        
  86.    
  87.        
  88.        

  89.         while (1) {
  90.         }
  91. }

下面是运行结果:





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2403

主题

6994

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部